70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
"""
|
|
Test generic manipulation of objects.
|
|
"""
|
|
|
|
|
|
import unittest
|
|
from numba import njit
|
|
from numba.core.compiler import compile_isolated, Flags
|
|
from numba.core import types
|
|
from numba.tests.support import TestCase
|
|
|
|
enable_pyobj_flags = Flags()
|
|
enable_pyobj_flags.enable_pyobject = True
|
|
|
|
force_pyobj_flags = Flags()
|
|
force_pyobj_flags.force_pyobject = True
|
|
|
|
no_pyobj_flags = Flags()
|
|
|
|
|
|
class C(object):
|
|
pass
|
|
|
|
|
|
def setattr_usecase(o, v):
|
|
o.x = v
|
|
|
|
def delattr_usecase(o):
|
|
del o.x
|
|
|
|
|
|
class TestAttributes(TestCase):
|
|
def test_setattr(self, flags=enable_pyobj_flags):
|
|
pyfunc = setattr_usecase
|
|
cr = compile_isolated(pyfunc, (types.pyobject, types.int32), flags=flags)
|
|
cfunc = cr.entry_point
|
|
c = C()
|
|
cfunc(c, 123)
|
|
self.assertEqual(c.x, 123)
|
|
|
|
def test_setattr_attribute_error(self, flags=enable_pyobj_flags):
|
|
pyfunc = setattr_usecase
|
|
cr = compile_isolated(pyfunc, (types.pyobject, types.int32), flags=flags)
|
|
cfunc = cr.entry_point
|
|
# Can't set undeclared slot
|
|
with self.assertRaises(AttributeError):
|
|
cfunc(object(), 123)
|
|
|
|
def test_delattr(self, flags=enable_pyobj_flags):
|
|
pyfunc = delattr_usecase
|
|
cr = compile_isolated(pyfunc, (types.pyobject,), flags=flags)
|
|
cfunc = cr.entry_point
|
|
c = C()
|
|
c.x = 123
|
|
cfunc(c)
|
|
with self.assertRaises(AttributeError):
|
|
c.x
|
|
|
|
def test_delattr_attribute_error(self, flags=enable_pyobj_flags):
|
|
pyfunc = delattr_usecase
|
|
cr = compile_isolated(pyfunc, (types.pyobject,), flags=flags)
|
|
cfunc = cr.entry_point
|
|
# Can't delete non-existing attribute
|
|
with self.assertRaises(AttributeError):
|
|
cfunc(C())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|