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