test_alignment.py 1.06 KB
Newer Older
dugupeiwen's avatar
dugupeiwen committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# See also numba.cuda.tests.test_alignment

import numpy as np
from numba import from_dtype, njit, void
from numba.tests.support import TestCase


class TestAlignment(TestCase):

    def test_record_alignment(self):
        rec_dtype = np.dtype([('a', 'int32'), ('b', 'float64')], align=True)
        rec = from_dtype(rec_dtype)

        @njit((rec[:],))
        def foo(a):
            for i in range(a.size):
                a[i].a = a[i].b

        a_recarray = np.recarray(3, dtype=rec_dtype)
        for i in range(a_recarray.size):
            a_rec = a_recarray[i]
            a_rec.a = 0
            a_rec.b = (i + 1) * 123

        foo(a_recarray)
        np.testing.assert_equal(a_recarray.a, a_recarray.b)

    def test_record_misaligned(self):
        rec_dtype = np.dtype([('a', 'int32'), ('b', 'float64')])
        rec = from_dtype(rec_dtype)

        # Unlike the CUDA target, this will not generate an error
        @njit((rec[:],))
        def foo(a):
            for i in range(a.size):
                a[i].a = a[i].b


if __name__ == '__main__':
    unittest.main()