(self)
| 2989 | Overflow]) |
| 2990 | |
| 2991 | def test_pickle(self): |
| 2992 | |
| 2993 | for proto in range(pickle.HIGHEST_PROTOCOL + 1): |
| 2994 | Context = self.decimal.Context |
| 2995 | |
| 2996 | savedecimal = sys.modules['decimal'] |
| 2997 | |
| 2998 | # Round trip |
| 2999 | sys.modules['decimal'] = self.decimal |
| 3000 | c = Context() |
| 3001 | e = pickle.loads(pickle.dumps(c, proto)) |
| 3002 | |
| 3003 | self.assertEqual(c.prec, e.prec) |
| 3004 | self.assertEqual(c.Emin, e.Emin) |
| 3005 | self.assertEqual(c.Emax, e.Emax) |
| 3006 | self.assertEqual(c.rounding, e.rounding) |
| 3007 | self.assertEqual(c.capitals, e.capitals) |
| 3008 | self.assertEqual(c.clamp, e.clamp) |
| 3009 | self.assertEqual(c.flags, e.flags) |
| 3010 | self.assertEqual(c.traps, e.traps) |
| 3011 | |
| 3012 | # Test interchangeability |
| 3013 | combinations = [(C, P), (P, C)] if C else [(P, P)] |
| 3014 | for dumper, loader in combinations: |
| 3015 | for ri, _ in enumerate(RoundingModes): |
| 3016 | for fi, _ in enumerate(OrderedSignals[dumper]): |
| 3017 | for ti, _ in enumerate(OrderedSignals[dumper]): |
| 3018 | |
| 3019 | prec = random.randrange(1, 100) |
| 3020 | emin = random.randrange(-100, 0) |
| 3021 | emax = random.randrange(1, 100) |
| 3022 | caps = random.randrange(2) |
| 3023 | clamp = random.randrange(2) |
| 3024 | |
| 3025 | # One module dumps |
| 3026 | sys.modules['decimal'] = dumper |
| 3027 | c = dumper.Context( |
| 3028 | prec=prec, Emin=emin, Emax=emax, |
| 3029 | rounding=RoundingModes[ri], |
| 3030 | capitals=caps, clamp=clamp, |
| 3031 | flags=OrderedSignals[dumper][:fi], |
| 3032 | traps=OrderedSignals[dumper][:ti] |
| 3033 | ) |
| 3034 | s = pickle.dumps(c, proto) |
| 3035 | |
| 3036 | # The other module loads |
| 3037 | sys.modules['decimal'] = loader |
| 3038 | d = pickle.loads(s) |
| 3039 | self.assertIsInstance(d, loader.Context) |
| 3040 | |
| 3041 | self.assertEqual(d.prec, prec) |
| 3042 | self.assertEqual(d.Emin, emin) |
| 3043 | self.assertEqual(d.Emax, emax) |
| 3044 | self.assertEqual(d.rounding, RoundingModes[ri]) |
| 3045 | self.assertEqual(d.capitals, caps) |
| 3046 | self.assertEqual(d.clamp, clamp) |
| 3047 | assert_signals(self, d, 'flags', OrderedSignals[loader][:fi]) |
| 3048 | assert_signals(self, d, 'traps', OrderedSignals[loader][:ti]) |
nothing calls this directly
no test coverage detected