111986Sandreas.sandberg@arm.comimport re 211986Sandreas.sandberg@arm.comimport pytest 312391Sjason@lowepower.comfrom pybind11_tests import numpy_dtypes as m 411986Sandreas.sandberg@arm.com 512037Sandreas.sandberg@arm.compytestmark = pytest.requires_numpy 612037Sandreas.sandberg@arm.com 711986Sandreas.sandberg@arm.comwith pytest.suppress(ImportError): 811986Sandreas.sandberg@arm.com import numpy as np 911986Sandreas.sandberg@arm.com 1011986Sandreas.sandberg@arm.com 1111986Sandreas.sandberg@arm.com@pytest.fixture(scope='module') 1211986Sandreas.sandberg@arm.comdef simple_dtype(): 1312037Sandreas.sandberg@arm.com ld = np.dtype('longdouble') 1412037Sandreas.sandberg@arm.com return np.dtype({'names': ['bool_', 'uint_', 'float_', 'ldbl_'], 1512037Sandreas.sandberg@arm.com 'formats': ['?', 'u4', 'f4', 'f{}'.format(ld.itemsize)], 1612037Sandreas.sandberg@arm.com 'offsets': [0, 4, 8, (16 if ld.alignment > 4 else 12)]}) 1711986Sandreas.sandberg@arm.com 1811986Sandreas.sandberg@arm.com 1911986Sandreas.sandberg@arm.com@pytest.fixture(scope='module') 2011986Sandreas.sandberg@arm.comdef packed_dtype(): 2112037Sandreas.sandberg@arm.com return np.dtype([('bool_', '?'), ('uint_', 'u4'), ('float_', 'f4'), ('ldbl_', 'g')]) 2212037Sandreas.sandberg@arm.com 2312037Sandreas.sandberg@arm.com 2412037Sandreas.sandberg@arm.comdef dt_fmt(): 2512037Sandreas.sandberg@arm.com from sys import byteorder 2612037Sandreas.sandberg@arm.com e = '<' if byteorder == 'little' else '>' 2712037Sandreas.sandberg@arm.com return ("{{'names':['bool_','uint_','float_','ldbl_']," 2812037Sandreas.sandberg@arm.com " 'formats':['?','" + e + "u4','" + e + "f4','" + e + "f{}']," 2912037Sandreas.sandberg@arm.com " 'offsets':[0,4,8,{}], 'itemsize':{}}}") 3012037Sandreas.sandberg@arm.com 3112037Sandreas.sandberg@arm.com 3212037Sandreas.sandberg@arm.comdef simple_dtype_fmt(): 3312037Sandreas.sandberg@arm.com ld = np.dtype('longdouble') 3412037Sandreas.sandberg@arm.com simple_ld_off = 12 + 4 * (ld.alignment > 4) 3512037Sandreas.sandberg@arm.com return dt_fmt().format(ld.itemsize, simple_ld_off, simple_ld_off + ld.itemsize) 3612037Sandreas.sandberg@arm.com 3712037Sandreas.sandberg@arm.com 3812037Sandreas.sandberg@arm.comdef packed_dtype_fmt(): 3912037Sandreas.sandberg@arm.com from sys import byteorder 4012037Sandreas.sandberg@arm.com return "[('bool_', '?'), ('uint_', '{e}u4'), ('float_', '{e}f4'), ('ldbl_', '{e}f{}')]".format( 4112037Sandreas.sandberg@arm.com np.dtype('longdouble').itemsize, e='<' if byteorder == 'little' else '>') 4212037Sandreas.sandberg@arm.com 4312037Sandreas.sandberg@arm.com 4412037Sandreas.sandberg@arm.comdef partial_ld_offset(): 4512037Sandreas.sandberg@arm.com return 12 + 4 * (np.dtype('uint64').alignment > 4) + 8 + 8 * ( 4612037Sandreas.sandberg@arm.com np.dtype('longdouble').alignment > 8) 4712037Sandreas.sandberg@arm.com 4812037Sandreas.sandberg@arm.com 4912037Sandreas.sandberg@arm.comdef partial_dtype_fmt(): 5012037Sandreas.sandberg@arm.com ld = np.dtype('longdouble') 5112037Sandreas.sandberg@arm.com partial_ld_off = partial_ld_offset() 5212037Sandreas.sandberg@arm.com return dt_fmt().format(ld.itemsize, partial_ld_off, partial_ld_off + ld.itemsize) 5312037Sandreas.sandberg@arm.com 5412037Sandreas.sandberg@arm.com 5512037Sandreas.sandberg@arm.comdef partial_nested_fmt(): 5612037Sandreas.sandberg@arm.com ld = np.dtype('longdouble') 5712037Sandreas.sandberg@arm.com partial_nested_off = 8 + 8 * (ld.alignment > 8) 5812037Sandreas.sandberg@arm.com partial_ld_off = partial_ld_offset() 5912037Sandreas.sandberg@arm.com partial_nested_size = partial_nested_off * 2 + partial_ld_off + ld.itemsize 6012037Sandreas.sandberg@arm.com return "{{'names':['a'], 'formats':[{}], 'offsets':[{}], 'itemsize':{}}}".format( 6112037Sandreas.sandberg@arm.com partial_dtype_fmt(), partial_nested_off, partial_nested_size) 6211986Sandreas.sandberg@arm.com 6311986Sandreas.sandberg@arm.com 6411986Sandreas.sandberg@arm.comdef assert_equal(actual, expected_data, expected_dtype): 6511986Sandreas.sandberg@arm.com np.testing.assert_equal(actual, np.array(expected_data, dtype=expected_dtype)) 6611986Sandreas.sandberg@arm.com 6711986Sandreas.sandberg@arm.com 6811986Sandreas.sandberg@arm.comdef test_format_descriptors(): 6911986Sandreas.sandberg@arm.com with pytest.raises(RuntimeError) as excinfo: 7012391Sjason@lowepower.com m.get_format_unbound() 7111986Sandreas.sandberg@arm.com assert re.match('^NumPy type info missing for .*UnboundStruct.*$', str(excinfo.value)) 7211986Sandreas.sandberg@arm.com 7312037Sandreas.sandberg@arm.com ld = np.dtype('longdouble') 7412037Sandreas.sandberg@arm.com ldbl_fmt = ('4x' if ld.alignment > 4 else '') + ld.char 7512391Sjason@lowepower.com ss_fmt = "^T{?:bool_:3xI:uint_:f:float_:" + ldbl_fmt + ":ldbl_:}" 7612037Sandreas.sandberg@arm.com dbl = np.dtype('double') 7712391Sjason@lowepower.com partial_fmt = ("^T{?:bool_:3xI:uint_:f:float_:" + 7812037Sandreas.sandberg@arm.com str(4 * (dbl.alignment > 4) + dbl.itemsize + 8 * (ld.alignment > 8)) + 7912037Sandreas.sandberg@arm.com "xg:ldbl_:}") 8012037Sandreas.sandberg@arm.com nested_extra = str(max(8, ld.alignment)) 8112391Sjason@lowepower.com assert m.print_format_descriptors() == [ 8212037Sandreas.sandberg@arm.com ss_fmt, 8312391Sjason@lowepower.com "^T{?:bool_:I:uint_:f:float_:g:ldbl_:}", 8412391Sjason@lowepower.com "^T{" + ss_fmt + ":a:^T{?:bool_:I:uint_:f:float_:g:ldbl_:}:b:}", 8512037Sandreas.sandberg@arm.com partial_fmt, 8612391Sjason@lowepower.com "^T{" + nested_extra + "x" + partial_fmt + ":a:" + nested_extra + "x}", 8712391Sjason@lowepower.com "^T{3s:a:3s:b:}", 8812391Sjason@lowepower.com "^T{(3)4s:a:(2)i:b:(3)B:c:1x(4, 2)f:d:}", 8912391Sjason@lowepower.com '^T{q:e1:B:e2:}', 9012391Sjason@lowepower.com '^T{Zf:cflt:Zd:cdbl:}' 9111986Sandreas.sandberg@arm.com ] 9211986Sandreas.sandberg@arm.com 9311986Sandreas.sandberg@arm.com 9411986Sandreas.sandberg@arm.comdef test_dtype(simple_dtype): 9512037Sandreas.sandberg@arm.com from sys import byteorder 9612037Sandreas.sandberg@arm.com e = '<' if byteorder == 'little' else '>' 9711986Sandreas.sandberg@arm.com 9812391Sjason@lowepower.com assert m.print_dtypes() == [ 9912037Sandreas.sandberg@arm.com simple_dtype_fmt(), 10012037Sandreas.sandberg@arm.com packed_dtype_fmt(), 10112037Sandreas.sandberg@arm.com "[('a', {}), ('b', {})]".format(simple_dtype_fmt(), packed_dtype_fmt()), 10212037Sandreas.sandberg@arm.com partial_dtype_fmt(), 10312037Sandreas.sandberg@arm.com partial_nested_fmt(), 10411986Sandreas.sandberg@arm.com "[('a', 'S3'), ('b', 'S3')]", 10512391Sjason@lowepower.com ("{{'names':['a','b','c','d'], " + 10614299Sbbruce@ucdavis.edu "'formats':[('S4', (3,)),('" + e + "i4', (2,)),('u1', (3,)),('" + e + "f4', (4, 2))], " + 10712391Sjason@lowepower.com "'offsets':[0,12,20,24], 'itemsize':56}}").format(e=e), 10812037Sandreas.sandberg@arm.com "[('e1', '" + e + "i8'), ('e2', 'u1')]", 10912391Sjason@lowepower.com "[('x', 'i1'), ('y', '" + e + "u8')]", 11012391Sjason@lowepower.com "[('cflt', '" + e + "c8'), ('cdbl', '" + e + "c16')]" 11111986Sandreas.sandberg@arm.com ] 11211986Sandreas.sandberg@arm.com 11311986Sandreas.sandberg@arm.com d1 = np.dtype({'names': ['a', 'b'], 'formats': ['int32', 'float64'], 11411986Sandreas.sandberg@arm.com 'offsets': [1, 10], 'itemsize': 20}) 11511986Sandreas.sandberg@arm.com d2 = np.dtype([('a', 'i4'), ('b', 'f4')]) 11612391Sjason@lowepower.com assert m.test_dtype_ctors() == [np.dtype('int32'), np.dtype('float64'), 11712391Sjason@lowepower.com np.dtype('bool'), d1, d1, np.dtype('uint32'), d2] 11811986Sandreas.sandberg@arm.com 11912391Sjason@lowepower.com assert m.test_dtype_methods() == [np.dtype('int32'), simple_dtype, False, True, 12012391Sjason@lowepower.com np.dtype('int32').itemsize, simple_dtype.itemsize] 12111986Sandreas.sandberg@arm.com 12212391Sjason@lowepower.com assert m.trailing_padding_dtype() == m.buffer_to_dtype(np.zeros(1, m.trailing_padding_dtype())) 12311986Sandreas.sandberg@arm.com 12411986Sandreas.sandberg@arm.com 12511986Sandreas.sandberg@arm.comdef test_recarray(simple_dtype, packed_dtype): 12612037Sandreas.sandberg@arm.com elements = [(False, 0, 0.0, -0.0), (True, 1, 1.5, -2.5), (False, 2, 3.0, -5.0)] 12711986Sandreas.sandberg@arm.com 12812391Sjason@lowepower.com for func, dtype in [(m.create_rec_simple, simple_dtype), (m.create_rec_packed, packed_dtype)]: 12911986Sandreas.sandberg@arm.com arr = func(0) 13011986Sandreas.sandberg@arm.com assert arr.dtype == dtype 13111986Sandreas.sandberg@arm.com assert_equal(arr, [], simple_dtype) 13211986Sandreas.sandberg@arm.com assert_equal(arr, [], packed_dtype) 13311986Sandreas.sandberg@arm.com 13411986Sandreas.sandberg@arm.com arr = func(3) 13511986Sandreas.sandberg@arm.com assert arr.dtype == dtype 13611986Sandreas.sandberg@arm.com assert_equal(arr, elements, simple_dtype) 13711986Sandreas.sandberg@arm.com assert_equal(arr, elements, packed_dtype) 13811986Sandreas.sandberg@arm.com 13911986Sandreas.sandberg@arm.com if dtype == simple_dtype: 14012391Sjason@lowepower.com assert m.print_rec_simple(arr) == [ 14112037Sandreas.sandberg@arm.com "s:0,0,0,-0", 14212037Sandreas.sandberg@arm.com "s:1,1,1.5,-2.5", 14312037Sandreas.sandberg@arm.com "s:0,2,3,-5" 14411986Sandreas.sandberg@arm.com ] 14511986Sandreas.sandberg@arm.com else: 14612391Sjason@lowepower.com assert m.print_rec_packed(arr) == [ 14712037Sandreas.sandberg@arm.com "p:0,0,0,-0", 14812037Sandreas.sandberg@arm.com "p:1,1,1.5,-2.5", 14912037Sandreas.sandberg@arm.com "p:0,2,3,-5" 15011986Sandreas.sandberg@arm.com ] 15111986Sandreas.sandberg@arm.com 15211986Sandreas.sandberg@arm.com nested_dtype = np.dtype([('a', simple_dtype), ('b', packed_dtype)]) 15311986Sandreas.sandberg@arm.com 15412391Sjason@lowepower.com arr = m.create_rec_nested(0) 15511986Sandreas.sandberg@arm.com assert arr.dtype == nested_dtype 15611986Sandreas.sandberg@arm.com assert_equal(arr, [], nested_dtype) 15711986Sandreas.sandberg@arm.com 15812391Sjason@lowepower.com arr = m.create_rec_nested(3) 15911986Sandreas.sandberg@arm.com assert arr.dtype == nested_dtype 16012037Sandreas.sandberg@arm.com assert_equal(arr, [((False, 0, 0.0, -0.0), (True, 1, 1.5, -2.5)), 16112037Sandreas.sandberg@arm.com ((True, 1, 1.5, -2.5), (False, 2, 3.0, -5.0)), 16212037Sandreas.sandberg@arm.com ((False, 2, 3.0, -5.0), (True, 3, 4.5, -7.5))], nested_dtype) 16312391Sjason@lowepower.com assert m.print_rec_nested(arr) == [ 16412037Sandreas.sandberg@arm.com "n:a=s:0,0,0,-0;b=p:1,1,1.5,-2.5", 16512037Sandreas.sandberg@arm.com "n:a=s:1,1,1.5,-2.5;b=p:0,2,3,-5", 16612037Sandreas.sandberg@arm.com "n:a=s:0,2,3,-5;b=p:1,3,4.5,-7.5" 16711986Sandreas.sandberg@arm.com ] 16811986Sandreas.sandberg@arm.com 16912391Sjason@lowepower.com arr = m.create_rec_partial(3) 17012037Sandreas.sandberg@arm.com assert str(arr.dtype) == partial_dtype_fmt() 17111986Sandreas.sandberg@arm.com partial_dtype = arr.dtype 17211986Sandreas.sandberg@arm.com assert '' not in arr.dtype.fields 17311986Sandreas.sandberg@arm.com assert partial_dtype.itemsize > simple_dtype.itemsize 17411986Sandreas.sandberg@arm.com assert_equal(arr, elements, simple_dtype) 17511986Sandreas.sandberg@arm.com assert_equal(arr, elements, packed_dtype) 17611986Sandreas.sandberg@arm.com 17712391Sjason@lowepower.com arr = m.create_rec_partial_nested(3) 17812037Sandreas.sandberg@arm.com assert str(arr.dtype) == partial_nested_fmt() 17911986Sandreas.sandberg@arm.com assert '' not in arr.dtype.fields 18011986Sandreas.sandberg@arm.com assert '' not in arr.dtype.fields['a'][0].fields 18111986Sandreas.sandberg@arm.com assert arr.dtype.itemsize > partial_dtype.itemsize 18212391Sjason@lowepower.com np.testing.assert_equal(arr['a'], m.create_rec_partial(3)) 18311986Sandreas.sandberg@arm.com 18411986Sandreas.sandberg@arm.com 18511986Sandreas.sandberg@arm.comdef test_array_constructors(): 18611986Sandreas.sandberg@arm.com data = np.arange(1, 7, dtype='int32') 18711986Sandreas.sandberg@arm.com for i in range(8): 18812391Sjason@lowepower.com np.testing.assert_array_equal(m.test_array_ctors(10 + i), data.reshape((3, 2))) 18912391Sjason@lowepower.com np.testing.assert_array_equal(m.test_array_ctors(20 + i), data.reshape((3, 2))) 19011986Sandreas.sandberg@arm.com for i in range(5): 19112391Sjason@lowepower.com np.testing.assert_array_equal(m.test_array_ctors(30 + i), data) 19212391Sjason@lowepower.com np.testing.assert_array_equal(m.test_array_ctors(40 + i), data) 19311986Sandreas.sandberg@arm.com 19411986Sandreas.sandberg@arm.com 19511986Sandreas.sandberg@arm.comdef test_string_array(): 19612391Sjason@lowepower.com arr = m.create_string_array(True) 19711986Sandreas.sandberg@arm.com assert str(arr.dtype) == "[('a', 'S3'), ('b', 'S3')]" 19812391Sjason@lowepower.com assert m.print_string_array(arr) == [ 19911986Sandreas.sandberg@arm.com "a='',b=''", 20011986Sandreas.sandberg@arm.com "a='a',b='a'", 20111986Sandreas.sandberg@arm.com "a='ab',b='ab'", 20211986Sandreas.sandberg@arm.com "a='abc',b='abc'" 20311986Sandreas.sandberg@arm.com ] 20411986Sandreas.sandberg@arm.com dtype = arr.dtype 20511986Sandreas.sandberg@arm.com assert arr['a'].tolist() == [b'', b'a', b'ab', b'abc'] 20611986Sandreas.sandberg@arm.com assert arr['b'].tolist() == [b'', b'a', b'ab', b'abc'] 20712391Sjason@lowepower.com arr = m.create_string_array(False) 20811986Sandreas.sandberg@arm.com assert dtype == arr.dtype 20911986Sandreas.sandberg@arm.com 21011986Sandreas.sandberg@arm.com 21112391Sjason@lowepower.comdef test_array_array(): 21212037Sandreas.sandberg@arm.com from sys import byteorder 21312037Sandreas.sandberg@arm.com e = '<' if byteorder == 'little' else '>' 21411986Sandreas.sandberg@arm.com 21512391Sjason@lowepower.com arr = m.create_array_array(3) 21612391Sjason@lowepower.com assert str(arr.dtype) == ( 21712391Sjason@lowepower.com "{{'names':['a','b','c','d'], " + 21814299Sbbruce@ucdavis.edu "'formats':[('S4', (3,)),('" + e + "i4', (2,)),('u1', (3,)),('{e}f4', (4, 2))], " + 21912391Sjason@lowepower.com "'offsets':[0,12,20,24], 'itemsize':56}}").format(e=e) 22012391Sjason@lowepower.com assert m.print_array_array(arr) == [ 22112391Sjason@lowepower.com "a={{A,B,C,D},{K,L,M,N},{U,V,W,X}},b={0,1}," + 22212391Sjason@lowepower.com "c={0,1,2},d={{0,1},{10,11},{20,21},{30,31}}", 22312391Sjason@lowepower.com "a={{W,X,Y,Z},{G,H,I,J},{Q,R,S,T}},b={1000,1001}," + 22412391Sjason@lowepower.com "c={10,11,12},d={{100,101},{110,111},{120,121},{130,131}}", 22512391Sjason@lowepower.com "a={{S,T,U,V},{C,D,E,F},{M,N,O,P}},b={2000,2001}," + 22612391Sjason@lowepower.com "c={20,21,22},d={{200,201},{210,211},{220,221},{230,231}}", 22712391Sjason@lowepower.com ] 22812391Sjason@lowepower.com assert arr['a'].tolist() == [[b'ABCD', b'KLMN', b'UVWX'], 22912391Sjason@lowepower.com [b'WXYZ', b'GHIJ', b'QRST'], 23012391Sjason@lowepower.com [b'STUV', b'CDEF', b'MNOP']] 23112391Sjason@lowepower.com assert arr['b'].tolist() == [[0, 1], [1000, 1001], [2000, 2001]] 23212391Sjason@lowepower.com assert m.create_array_array(0).dtype == arr.dtype 23312391Sjason@lowepower.com 23412391Sjason@lowepower.com 23512391Sjason@lowepower.comdef test_enum_array(): 23612391Sjason@lowepower.com from sys import byteorder 23712391Sjason@lowepower.com e = '<' if byteorder == 'little' else '>' 23812391Sjason@lowepower.com 23912391Sjason@lowepower.com arr = m.create_enum_array(3) 24011986Sandreas.sandberg@arm.com dtype = arr.dtype 24112037Sandreas.sandberg@arm.com assert dtype == np.dtype([('e1', e + 'i8'), ('e2', 'u1')]) 24212391Sjason@lowepower.com assert m.print_enum_array(arr) == [ 24311986Sandreas.sandberg@arm.com "e1=A,e2=X", 24411986Sandreas.sandberg@arm.com "e1=B,e2=Y", 24511986Sandreas.sandberg@arm.com "e1=A,e2=X" 24611986Sandreas.sandberg@arm.com ] 24711986Sandreas.sandberg@arm.com assert arr['e1'].tolist() == [-1, 1, -1] 24811986Sandreas.sandberg@arm.com assert arr['e2'].tolist() == [1, 2, 1] 24912391Sjason@lowepower.com assert m.create_enum_array(0).dtype == dtype 25012391Sjason@lowepower.com 25112391Sjason@lowepower.com 25212391Sjason@lowepower.comdef test_complex_array(): 25312391Sjason@lowepower.com from sys import byteorder 25412391Sjason@lowepower.com e = '<' if byteorder == 'little' else '>' 25512391Sjason@lowepower.com 25612391Sjason@lowepower.com arr = m.create_complex_array(3) 25712391Sjason@lowepower.com dtype = arr.dtype 25812391Sjason@lowepower.com assert dtype == np.dtype([('cflt', e + 'c8'), ('cdbl', e + 'c16')]) 25912391Sjason@lowepower.com assert m.print_complex_array(arr) == [ 26012391Sjason@lowepower.com "c:(0,0.25),(0.5,0.75)", 26112391Sjason@lowepower.com "c:(1,1.25),(1.5,1.75)", 26212391Sjason@lowepower.com "c:(2,2.25),(2.5,2.75)" 26312391Sjason@lowepower.com ] 26412391Sjason@lowepower.com assert arr['cflt'].tolist() == [0.0 + 0.25j, 1.0 + 1.25j, 2.0 + 2.25j] 26512391Sjason@lowepower.com assert arr['cdbl'].tolist() == [0.5 + 0.75j, 1.5 + 1.75j, 2.5 + 2.75j] 26612391Sjason@lowepower.com assert m.create_complex_array(0).dtype == dtype 26711986Sandreas.sandberg@arm.com 26811986Sandreas.sandberg@arm.com 26911986Sandreas.sandberg@arm.comdef test_signature(doc): 27012391Sjason@lowepower.com assert doc(m.create_rec_nested) == \ 27112391Sjason@lowepower.com "create_rec_nested(arg0: int) -> numpy.ndarray[NestedStruct]" 27211986Sandreas.sandberg@arm.com 27311986Sandreas.sandberg@arm.com 27411986Sandreas.sandberg@arm.comdef test_scalar_conversion(): 27511986Sandreas.sandberg@arm.com n = 3 27612391Sjason@lowepower.com arrays = [m.create_rec_simple(n), m.create_rec_packed(n), 27712391Sjason@lowepower.com m.create_rec_nested(n), m.create_enum_array(n)] 27812391Sjason@lowepower.com funcs = [m.f_simple, m.f_packed, m.f_nested] 27911986Sandreas.sandberg@arm.com 28011986Sandreas.sandberg@arm.com for i, func in enumerate(funcs): 28111986Sandreas.sandberg@arm.com for j, arr in enumerate(arrays): 28211986Sandreas.sandberg@arm.com if i == j and i < 2: 28311986Sandreas.sandberg@arm.com assert [func(arr[k]) for k in range(n)] == [k * 10 for k in range(n)] 28411986Sandreas.sandberg@arm.com else: 28511986Sandreas.sandberg@arm.com with pytest.raises(TypeError) as excinfo: 28611986Sandreas.sandberg@arm.com func(arr[0]) 28711986Sandreas.sandberg@arm.com assert 'incompatible function arguments' in str(excinfo.value) 28811986Sandreas.sandberg@arm.com 28911986Sandreas.sandberg@arm.com 29011986Sandreas.sandberg@arm.comdef test_register_dtype(): 29111986Sandreas.sandberg@arm.com with pytest.raises(RuntimeError) as excinfo: 29212391Sjason@lowepower.com m.register_dtype() 29311986Sandreas.sandberg@arm.com assert 'dtype is already registered' in str(excinfo.value) 29412037Sandreas.sandberg@arm.com 29512037Sandreas.sandberg@arm.com 29614299Sbbruce@ucdavis.edu@pytest.unsupported_on_pypy 29714299Sbbruce@ucdavis.edudef test_str_leak(): 29814299Sbbruce@ucdavis.edu from sys import getrefcount 29914299Sbbruce@ucdavis.edu fmt = "f4" 30014299Sbbruce@ucdavis.edu pytest.gc_collect() 30114299Sbbruce@ucdavis.edu start = getrefcount(fmt) 30214299Sbbruce@ucdavis.edu d = m.dtype_wrapper(fmt) 30314299Sbbruce@ucdavis.edu assert d is np.dtype("f4") 30414299Sbbruce@ucdavis.edu del d 30514299Sbbruce@ucdavis.edu pytest.gc_collect() 30614299Sbbruce@ucdavis.edu assert getrefcount(fmt) == start 30714299Sbbruce@ucdavis.edu 30814299Sbbruce@ucdavis.edu 30912037Sandreas.sandberg@arm.comdef test_compare_buffer_info(): 31012391Sjason@lowepower.com assert all(m.compare_buffer_info()) 311