81 lines
2.5 KiB
Python
81 lines
2.5 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
from numba import int32, int64, uint32, uint64, float32, float64
|
||
|
from numba.core.types import range_iter32_type
|
||
|
from numba.core import itanium_mangler
|
||
|
import unittest
|
||
|
|
||
|
|
||
|
class TestItaniumManager(unittest.TestCase):
|
||
|
def test_ident(self):
|
||
|
got = itanium_mangler.mangle_identifier("apple")
|
||
|
expect = "5apple"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_identifier("ap_ple")
|
||
|
expect = "6ap_ple"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_identifier("apple213")
|
||
|
expect = "8apple213"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
def test_types(self):
|
||
|
got = itanium_mangler.mangle_type(int32)
|
||
|
expect = "i"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_type(int64)
|
||
|
expect = "x"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_type(uint32)
|
||
|
expect = "j"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_type(uint64)
|
||
|
expect = "y"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_type(float32)
|
||
|
expect = "f"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle_type(float64)
|
||
|
expect = "d"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
def test_function(self):
|
||
|
got = itanium_mangler.mangle("what", [int32, float32])
|
||
|
expect = "_Z4whatif"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
got = itanium_mangler.mangle("a_little_brown_fox", [uint64,
|
||
|
uint32,
|
||
|
float64])
|
||
|
expect = "_Z18a_little_brown_foxyjd"
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
def test_custom_type(self):
|
||
|
got = itanium_mangler.mangle_type(range_iter32_type)
|
||
|
name = str(range_iter32_type)
|
||
|
expect = "{n}{name}".format(n=len(name), name=name)
|
||
|
self.assertEqual(expect, got)
|
||
|
|
||
|
def test_mangle_literal(self):
|
||
|
# check int
|
||
|
got = itanium_mangler.mangle_value(123)
|
||
|
expect = "Li123E"
|
||
|
self.assertEqual(expect, got)
|
||
|
# check float (not handled using standard)
|
||
|
got = itanium_mangler.mangle_value(12.3)
|
||
|
self.assertRegex(got, r'^\d+_12_[0-9a-z][0-9a-z]3$')
|
||
|
|
||
|
def test_mangle_unicode(self):
|
||
|
name = u'f∂ƒ©z'
|
||
|
got = itanium_mangler.mangle_identifier(name)
|
||
|
self.assertRegex(got, r'^\d+f(_[a-z0-9][a-z0-9])+z$')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|