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