@@ -248,23 +248,59 @@ def test_seek_delimiter_endline():
248
248
assert f .tell () == 7
249
249
250
250
251
- def test_ensure_memoryview_empty ():
252
- result = ensure_memoryview (b"" )
251
+ @pytest .mark .parametrize (
252
+ "data" ,
253
+ [
254
+ b"" ,
255
+ bytearray (),
256
+ b"1" ,
257
+ bytearray (b"1" ),
258
+ memoryview (b"1" ),
259
+ memoryview (bytearray (b"1" )),
260
+ array ("B" , b"1" ),
261
+ array ("I" , range (5 )),
262
+ memoryview (b"123456" )[::2 ],
263
+ memoryview (b"123456" ).cast ("B" , (2 , 3 )),
264
+ memoryview (b"0123456789" ).cast ("B" , (5 , 2 ))[::2 ],
265
+ ],
266
+ )
267
+ def test_ensure_memoryview (data ):
268
+ data_mv = memoryview (data )
269
+ result = ensure_memoryview (data )
253
270
assert isinstance (result , memoryview )
254
- assert result == memoryview (b"" )
255
-
256
-
257
- def test_ensure_memoryview ():
258
- data = [b"1" , memoryview (b"1" ), bytearray (b"1" ), array ("B" , b"1" )]
259
- for d in data :
260
- result = ensure_memoryview (d )
261
- assert isinstance (result , memoryview )
262
- assert result == memoryview (b"1" )
263
-
264
-
265
- def test_ensure_memoryview_ndarray ():
271
+ assert result .contiguous
272
+ assert result .ndim == 1
273
+ assert result .format == "B"
274
+ assert result == bytes (data_mv )
275
+ if data_mv .nbytes and data_mv .contiguous :
276
+ assert id (result .obj ) == id (data_mv .obj )
277
+ assert result .readonly == data_mv .readonly
278
+ if isinstance (data , memoryview ):
279
+ if data .ndim == 1 and data .format == "B" :
280
+ assert id (result ) == id (data )
281
+ else :
282
+ assert id (data ) != id (result )
283
+ else :
284
+ assert id (result .obj ) != id (data_mv .obj )
285
+ assert not result .readonly
286
+
287
+
288
+ @pytest .mark .parametrize (
289
+ "dt, nitems, shape, strides" ,
290
+ [
291
+ ("i8" , 12 , (12 ,), (8 ,)),
292
+ ("i8" , 12 , (3 , 4 ), (32 , 8 )),
293
+ ("i8" , 12 , (4 , 3 ), (8 , 32 )),
294
+ ("i8" , 12 , (3 , 2 ), (32 , 16 )),
295
+ ("i8" , 12 , (2 , 3 ), (16 , 32 )),
296
+ ],
297
+ )
298
+ def test_ensure_memoryview_ndarray (dt , nitems , shape , strides ):
266
299
np = pytest .importorskip ("numpy" )
267
- result = ensure_memoryview (np .arange (12 ).reshape (3 , 4 )[:, ::2 ].T )
300
+ data = np .ndarray (
301
+ shape , dtype = dt , buffer = np .arange (nitems , dtype = dt ), strides = strides
302
+ )
303
+ result = ensure_memoryview (data )
268
304
assert isinstance (result , memoryview )
269
305
assert result .ndim == 1
270
306
assert result .format == "B"
0 commit comments