62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
|
|
||
|
import unittest
|
||
|
|
||
|
from numba import njit
|
||
|
from numba.core.funcdesc import PythonFunctionDescriptor, default_mangler
|
||
|
from numba.core.compiler import run_frontend
|
||
|
from numba.core.itanium_mangler import mangle_abi_tag
|
||
|
|
||
|
|
||
|
class TestModule(unittest.TestCase):
|
||
|
def test_module_not_in_namespace(self):
|
||
|
""" Test of trying to run a compiled function
|
||
|
where the module from which the function is being compiled
|
||
|
doesn't exist in the namespace.
|
||
|
"""
|
||
|
filename = 'test.py'
|
||
|
name = 'mypackage'
|
||
|
code = """
|
||
|
def f(x):
|
||
|
return x
|
||
|
"""
|
||
|
|
||
|
objs = dict(__file__=filename, __name__=name)
|
||
|
compiled = compile(code, filename, 'exec')
|
||
|
exec(compiled, objs)
|
||
|
|
||
|
compiled_f = njit(objs['f'])
|
||
|
self.assertEqual(compiled_f(3), 3)
|
||
|
|
||
|
|
||
|
class TestFuncDescMangledName(unittest.TestCase):
|
||
|
def test_mangling_abi_tags(self):
|
||
|
"""
|
||
|
This is a minimal test for the abi-tags support in the mangler.
|
||
|
"""
|
||
|
def udt():
|
||
|
pass
|
||
|
|
||
|
# run minimal frontend to create a function descriptor
|
||
|
func_ir = run_frontend(udt)
|
||
|
typemap = {}
|
||
|
restype = None
|
||
|
calltypes = ()
|
||
|
mangler = default_mangler
|
||
|
inline = False
|
||
|
noalias = False
|
||
|
|
||
|
abi_tags = ("Shrubbery", "Herring")
|
||
|
|
||
|
fd = PythonFunctionDescriptor.from_specialized_function(
|
||
|
func_ir, typemap, restype, calltypes, mangler, inline, noalias,
|
||
|
abi_tags=abi_tags,
|
||
|
)
|
||
|
|
||
|
# mangled tag must exist in the mangled name
|
||
|
self.assertIn("".join([mangle_abi_tag(x) for x in abi_tags]),
|
||
|
fd.mangled_name)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|