summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_decimal.py
diff options
context:
space:
mode:
authorStefan Krah <skrah@bytereef.org>2012-04-02 13:02:21 (GMT)
committerStefan Krah <skrah@bytereef.org>2012-04-02 13:02:21 (GMT)
commit5100171d81508e607a1c9c1ffa384ab07632a84f (patch)
treea81fdb71dfb44d65fc4271969f3730ca77c46a75 /Lib/test/test_decimal.py
parent41e031004bd156ea579a35d8e1d74cafe8dac3e0 (diff)
downloadcpython-5100171d81508e607a1c9c1ffa384ab07632a84f.zip
cpython-5100171d81508e607a1c9c1ffa384ab07632a84f.tar.gz
cpython-5100171d81508e607a1c9c1ffa384ab07632a84f.tar.bz2
Clear the context flags if a context is initialized from the DefaultContext.
Diffstat (limited to 'Lib/test/test_decimal.py')
-rw-r--r--Lib/test/test_decimal.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py
index 694b959..9278dad 100644
--- a/Lib/test/test_decimal.py
+++ b/Lib/test/test_decimal.py
@@ -56,6 +56,76 @@ sys.modules['decimal'] = C
fractions = {C:cfractions, P:pfractions}
sys.modules['decimal'] = orig_sys_decimal
+############ RunFirst ############
+class RunFirst(unittest.TestCase):
+
+ def setUp(self):
+ self.save_default = self.decimal.DefaultContext.copy()
+
+ def tearDown(self):
+ DefaultContext = self.decimal.DefaultContext
+
+ DefaultContext.prec = self.save_default.prec
+ DefaultContext.rounding = self.save_default.rounding
+ DefaultContext.Emax = self.save_default.Emax
+ DefaultContext.Emin = self.save_default.Emin
+ DefaultContext.capitals = self.save_default.capitals
+ DefaultContext.clamp = self.save_default.clamp
+ DefaultContext.flags = self.save_default.flags
+ DefaultContext.traps = self.save_default.traps
+
+ self.decimal.setcontext(self.decimal.DefaultContext)
+
+ def test_00default_context(self):
+ # The test depends on the fact that getcontext() is called
+ # for the first time.
+ DefaultContext = self.decimal.DefaultContext
+ ROUND_05UP = self.decimal.ROUND_05UP
+ Clamped = self.decimal.Clamped
+ InvalidOperation = self.decimal.InvalidOperation
+
+ DefaultContext.prec = 5001
+ DefaultContext.rounding = ROUND_05UP
+ DefaultContext.Emax = 10025
+ DefaultContext.Emin = -10025
+ DefaultContext.capitals = 0
+ DefaultContext.clamp = 1
+ DefaultContext.flags[InvalidOperation] = True
+ DefaultContext.clear_traps()
+ DefaultContext.traps[Clamped] = True
+
+ # implicit initialization on first access
+ c = self.decimal.getcontext()
+
+ self.assertEqual(c.prec, 5001)
+ self.assertEqual(c.rounding, ROUND_05UP)
+ self.assertEqual(c.Emax, 10025)
+ self.assertEqual(c.Emin, -10025)
+ self.assertEqual(c.capitals, 0)
+ self.assertEqual(c.clamp, 1)
+ for k in c.flags:
+ self.assertFalse(c.flags[k])
+ for k in c.traps:
+ if k is Clamped:
+ self.assertTrue(c.traps[k])
+ else:
+ self.assertFalse(c.traps[k])
+
+ # explicit initialization
+ self.decimal.setcontext(DefaultContext)
+ c = self.decimal.getcontext()
+ for k in c.flags:
+ self.assertFalse(c.flags[k])
+
+class CRunFirst(RunFirst):
+ decimal = C
+class PyRunFirst(RunFirst):
+ decimal = P
+if C:
+ run_unittest(CRunFirst, PyRunFirst)
+else:
+ run_unittest(PyRunFirst)
+############ END RunFirst ############
# Useful Test Constant
Signals = {