43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
|
import numpy as np
|
||
|
from numba import from_dtype, cuda
|
||
|
from numba.cuda.testing import skip_on_cudasim, CUDATestCase
|
||
|
import unittest
|
||
|
|
||
|
|
||
|
class TestAlignment(CUDATestCase):
|
||
|
def test_record_alignment(self):
|
||
|
rec_dtype = np.dtype([('a', 'int32'), ('b', 'float64')], align=True)
|
||
|
rec = from_dtype(rec_dtype)
|
||
|
|
||
|
@cuda.jit((rec[:],))
|
||
|
def foo(a):
|
||
|
i = cuda.grid(1)
|
||
|
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[1, 3](a_recarray)
|
||
|
|
||
|
self.assertTrue(np.all(a_recarray.a == a_recarray.b))
|
||
|
|
||
|
@skip_on_cudasim('Simulator does not check alignment')
|
||
|
def test_record_alignment_error(self):
|
||
|
rec_dtype = np.dtype([('a', 'int32'), ('b', 'float64')])
|
||
|
rec = from_dtype(rec_dtype)
|
||
|
|
||
|
with self.assertRaises(Exception) as raises:
|
||
|
@cuda.jit((rec[:],))
|
||
|
def foo(a):
|
||
|
i = cuda.grid(1)
|
||
|
a[i].a = a[i].b
|
||
|
|
||
|
self.assertTrue('type float64 is not aligned' in str(raises.exception))
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|