File: test_pickle.py

package info (click to toggle)
mpi4py 1.3%2Bhg20120611-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 2,020 kB
  • sloc: python: 9,503; ansic: 6,296; makefile: 571; f90: 158; sh: 146; cpp: 103
file content (101 lines) | stat: -rw-r--r-- 2,582 bytes parent folder | download | duplicates (2)
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