code: def testHandleAddress(self):
      ffi = cffi.FFI()
      typemap = {
          ffi.sizeof("int"): "int",
          ffi.sizeof("void*"): "void*",
      }
      typename = lambda t: t.__name__.rsplit(".", 1)[-1]
      for tp in self.mpitypes:
          handle_t = typemap[MPI._sizeof(tp)]
          mpi_t = "MPI_" + typename(tp)
          ffi.cdef(f"typedef {handle_t} {mpi_t};")
      for obj in self.objects:
          if isinstance(obj, MPI.Comm):
              mpi_t = "MPI_Comm"
          else:
              mpi_t = "MPI_" + typename(type(obj))
          oldobj = obj
          newobj = type(obj)()
          handle_old = ffi.cast(mpi_t + "*", MPI._addressof(oldobj))
          handle_new = ffi.cast(mpi_t + "*", MPI._addressof(newobj))
          handle_new[0] = handle_old[0]
          self.assertEqual(oldobj, newobj)
  
imports: from mpi4py import MPI
  import mpiunittest
label_desc: Use image node_id 1 for calling the TestCFFI obj's underlying member method code with example usage: obj.testHandleAddress() without return types