1from mpi4py import MPI 2import mpiunittest as unittest 3import sys 4import weakref 5 6 7class TestObjModel(unittest.TestCase): 8 9 objects = [ 10 MPI.Status(), 11 MPI.DATATYPE_NULL, 12 MPI.REQUEST_NULL, 13 MPI.INFO_NULL, 14 MPI.ERRHANDLER_NULL, 15 MPI.GROUP_NULL, 16 MPI.WIN_NULL, 17 MPI.OP_NULL, 18 MPI.FILE_NULL, 19 MPI.MESSAGE_NULL, 20 MPI.COMM_NULL, 21 ] 22 23 def testEq(self): 24 for i, obj1 in enumerate(self.objects): 25 objects = self.objects[:] 26 obj2 = objects[i] 27 self.assertTrue(obj1 == obj2) 28 self.assertFalse(obj1 != obj2) 29 del objects[i] 30 for obj2 in objects: 31 self.assertTrue(obj1 != obj2) 32 self.assertTrue(obj2 != obj1) 33 self.assertFalse(obj1 == obj2) 34 self.assertFalse(obj2 == obj1) 35 self.assertFalse(None == obj1 ) 36 self.assertFalse(obj1 == None ) 37 self.assertFalse(obj1 == True ) 38 self.assertFalse(obj1 == False) 39 self.assertFalse(obj1 == 12345) 40 self.assertFalse(obj1 == "abc") 41 self.assertFalse(obj1 == [123]) 42 self.assertFalse(obj1 == (1,2)) 43 self.assertFalse(obj1 == {0:0}) 44 self.assertFalse(obj1 == set()) 45 46 def testNe(self): 47 for i, obj1 in enumerate(self.objects): 48 objects = self.objects[:] 49 obj2 = objects[i] 50 self.assertFalse(obj1 != obj2) 51 del objects[i] 52 for obj2 in objects: 53 self.assertTrue (obj1 != obj2) 54 self.assertTrue(None != obj1 ) 55 self.assertTrue(obj1 != None ) 56 self.assertTrue(obj1 != True ) 57 self.assertTrue(obj1 != False) 58 self.assertTrue(obj1 != 12345) 59 self.assertTrue(obj1 != "abc") 60 self.assertTrue(obj1 != [123]) 61 self.assertTrue(obj1 != (1,2)) 62 self.assertTrue(obj1 != {0:0}) 63 self.assertTrue(obj1 != set()) 64 65 def testBool(self): 66 for obj in self.objects[1:]: 67 self.assertFalse(not not obj) 68 self.assertTrue(not obj) 69 self.assertFalse(obj) 70 71 def testHash(self): 72 try: 73 hash(MPI.COMM_NULL) 74 except TypeError: 75 pass 76 else: 77 if hasattr(sys, 'pypy_version_info'): 78 self.skipTest('pypy') 79 for obj in self.objects: 80 ob_hash = lambda: hash(obj) 81 self.assertRaises(TypeError, ob_hash) 82 83 def testInit(self): 84 for i, obj in enumerate(self.objects): 85 klass = type(obj) 86 new = klass() 87 self.assertEqual(new, obj) 88 new = klass(obj) 89 self.assertEqual(new, obj) 90 objects = self.objects[:] 91 del objects[i] 92 for other in objects: 93 ob_init = lambda: klass(other) 94 self.assertRaises(TypeError, ob_init) 95 ob_init = lambda: klass(1234) 96 self.assertRaises(TypeError, ob_init) 97 ob_init = lambda: klass("abc") 98 self.assertRaises(TypeError, ob_init) 99 100 def testWeakRef(self): 101 for obj in self.objects: 102 wr = weakref.ref(obj) 103 self.assertTrue(wr() is obj) 104 self.assertTrue(wr in weakref.getweakrefs(obj)) 105 wr = weakref.proxy(obj) 106 self.assertTrue(wr in weakref.getweakrefs(obj)) 107 108 def testSizeOf(self): 109 for obj in self.objects: 110 n1 = MPI._sizeof(obj) 111 n2 = MPI._sizeof(type(obj)) 112 self.assertEqual(n1, n2) 113 114 def testAddressOf(self): 115 for obj in self.objects: 116 addr = MPI._addressof(obj) 117 118 def testAHandleOf(self): 119 for obj in self.objects: 120 if isinstance(obj, MPI.Status): 121 hdl = lambda: MPI._handleof(obj) 122 self.assertRaises(NotImplementedError, hdl) 123 continue 124 hdl = MPI._handleof(obj) 125 126 127if __name__ == '__main__': 128 unittest.main() 129