text: """
  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()
  