code: def testIBSendAndRecv(self):
      buf = MPI.Alloc_mem((1 << 16) + MPI.BSEND_OVERHEAD)
      MPI.Attach_buffer(buf)
      try:
          size = self.COMM.Get_size()
          rank = self.COMM.Get_rank()
          for smess in messages:
              req = self.COMM.ibsend(smess, MPI.PROC_NULL)
              self.assertTrue(req)
              req.wait()
              self.assertFalse(req)
              rmess = self.COMM.recv(None, MPI.PROC_NULL, 0)
              self.assertIsNone(rmess)
          for smess in messages:
              req = self.COMM.ibsend(smess, rank, 0)
              self.assertTrue(req)
              rmess = self.COMM.recv(None, rank, 0)
              self.assertTrue(req)
              flag, _ = req.test()
              self.assertTrue(flag)
              self.assertFalse(req)
              self.assertEqual(rmess, smess)
          for smess in messages:
              dst = (rank + 1) % size
              src = (rank - 1) % size
              req = self.COMM.ibsend(smess, dst, 0)
              self.assertTrue(req)
              rmess = self.COMM.recv(None, src, 0)
              req.wait()
              self.assertFalse(req)
              self.assertEqual(rmess, smess)
      finally:
          MPI.Detach_buffer()
          MPI.Free_mem(buf)
  
imports: from mpi4py import MPI
  from mpi4py.util import pkl5
  import sys, os
label_desc: Use image node_id 8 for calling the BaseTest obj's underlying member method code with example usage: obj.testIBSendAndRecv() without return types