class_docstr: This class tests all member functions of crypten package
code: def test_send_recv(self) -> None:
      tensor = torch.tensor([self.rank], dtype=torch.long)
  
      # Send forward, receive backward
      dst = (self.rank + 1) % self.world_size
      src = (self.rank - 1) % self.world_size
  
      if self.rank == 0:
          comm.get().send(tensor, dst=dst)
      result = comm.get().recv(tensor, src=src)
      if self.rank > 0:
          comm.get().send(tensor, dst=dst)
  
      self.assertTrue(torch.is_tensor(result))
      self.assertEqual(result.item(), src)
  
imports: import unittest
  import crypten
  import crypten.communicator
  import numpy
  import torch
  import torch.distributed
  import torch.nn
  import torch.nn.functional
  from crypten.common import serial
  from crypten.config import cfg
  from test.multiprocess_test_case import get_random_test_tensor, MultiProcessTestCase
label_desc: Use image node_id 1 for calling the TestCommunicator obj's underlying member method code with example usage: obj.test_send_recv() without return types