52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
import unittest
|
|
from numba import jit
|
|
from numba.core import types
|
|
|
|
|
|
force_pyobj_flags = {'forceobj': True}
|
|
no_pyobj_flags = {'nopython': True}
|
|
|
|
|
|
def return_int(a, b):
|
|
return a + b
|
|
|
|
|
|
class TestPythonInt(unittest.TestCase):
|
|
|
|
# Issue #474: ints should be returned rather than longs under Python 2,
|
|
# as much as possible.
|
|
|
|
def test_int_return_type(self, flags=force_pyobj_flags,
|
|
int_type=types.int64, operands=(3, 4)):
|
|
pyfunc = return_int
|
|
cfunc = jit((int_type, int_type), **flags)(pyfunc)
|
|
expected = pyfunc(*operands)
|
|
got = cfunc(*operands)
|
|
self.assertIs(type(got), type(expected))
|
|
self.assertEqual(got, expected)
|
|
|
|
def test_int_return_type_npm(self):
|
|
self.test_int_return_type(flags=no_pyobj_flags)
|
|
|
|
def test_unsigned_int_return_type(self, flags=force_pyobj_flags):
|
|
self.test_int_return_type(int_type=types.uint64, flags=flags)
|
|
|
|
def test_unsigned_int_return_type_npm(self):
|
|
self.test_unsigned_int_return_type(flags=no_pyobj_flags)
|
|
|
|
def test_long_int_return_type(self, flags=force_pyobj_flags):
|
|
# Same but returning a 64-bit integer. The return type should be
|
|
# `int` on 64-bit builds, `long` on 32-bit ones (or Windows).
|
|
self.test_int_return_type(flags=flags, operands=(2**33, 2**40))
|
|
|
|
def test_long_int_return_type_npm(self):
|
|
self.test_long_int_return_type(flags=no_pyobj_flags)
|
|
|
|
def test_longer_int_return_type(self, flags=force_pyobj_flags):
|
|
# This won't be supported in nopython mode.
|
|
self.test_int_return_type(flags=flags, operands=(2**70, 2**75))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|