HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/anaconda3/Lib/site-packages/numba/tests/test_objects.py
"""
Test generic manipulation of objects.
"""


import unittest
from numba import jit
from numba.core import types
from numba.tests.support import TestCase


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):
        pyfunc = setattr_usecase
        cfunc = jit((types.pyobject, types.int32), forceobj=True)(pyfunc)
        c = C()
        cfunc(c, 123)
        self.assertEqual(c.x, 123)

    def test_setattr_attribute_error(self):
        pyfunc = setattr_usecase
        cfunc = jit((types.pyobject, types.int32), forceobj=True)(pyfunc)
        # Can't set undeclared slot
        with self.assertRaises(AttributeError):
            cfunc(object(), 123)

    def test_delattr(self):
        pyfunc = delattr_usecase
        cfunc = jit((types.pyobject,), forceobj=True)(pyfunc)
        c = C()
        c.x = 123
        cfunc(c)
        with self.assertRaises(AttributeError):
            c.x

    def test_delattr_attribute_error(self):
        pyfunc = delattr_usecase
        cfunc = jit((types.pyobject,), forceobj=True)(pyfunc)
        # Can't delete non-existing attribute
        with self.assertRaises(AttributeError):
            cfunc(C())


if __name__ == '__main__':
    unittest.main()