1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
from mpi4py import MPI
import mpiunittest as unittest
import sys
try:
import marshal
except ImportError:
marshal = None
try:
import json
except ImportError:
try:
import simplejson as json
except ImportError:
json = None
OBJS = [
None,
True,
False,
7,
1<<32,
3.14,
1+2j,
'qwerty',
(0, 1, 2),
[0, 1, 2],
{'a':0, 'b': 1},
]
class TestPickle(unittest.TestCase):
def setUp(self):
pickle = MPI._p_pickle
self._backup = (pickle.dumps,
pickle.loads,
pickle.PROTOCOL)
def tearDown(self):
pickle = MPI._p_pickle
(pickle.dumps,
pickle.loads,
pickle.PROTOCOL) = self._backup
def do_pickle(self, obj, pickle):
comm = MPI.COMM_SELF
o = comm.sendrecv(obj)
self.assertEqual(obj, o)
s = pickle.dumps(obj, pickle.PROTOCOL)
o = pickle.loads(s)
self.assertEqual(obj, o)
def testPickle(self):
pickle = MPI._p_pickle
protocols = [0, 1, 2]
if sys.version_info[0] > 2:
protocols.append(3)
protocols.append(-1)
for protocol in protocols:
pickle.PROTOCOL = protocol
for obj in OBJS:
self.do_pickle(obj, pickle)
self.do_pickle(OBJS, pickle)
if marshal is not None:
def testMarshal(self):
pickle = MPI._p_pickle
pickle.dumps = marshal.dumps
pickle.loads = marshal.loads
protocols = [0]
if sys.version_info[:2] < (2, 4):
pickle.dumps = lambda o,p: marshal.dumps(o)
if sys.version_info[:2] >= (2, 4):
protocols.append(1)
if sys.version_info[:2] >= (2, 5):
protocols.append(2)
for protocol in protocols:
pickle.PROTOCOL = protocol
for obj in OBJS:
self.do_pickle(obj, pickle)
self.do_pickle(OBJS, pickle)
if json is not None:
def testJson(self):
pickle = MPI._p_pickle
pickle.dumps = lambda o,p: json.dumps(o).encode()
pickle.loads = lambda s: json.loads(s.decode())
OBJS2 = [o for o in OBJS if not
isinstance(o, (complex, tuple))]
for obj in OBJS2:
self.do_pickle(obj, pickle)
self.do_pickle(OBJS2, pickle)
if __name__ == '__main__':
try:
unittest.main()
except SystemExit:
pass
|