@@ -4399,6 +4399,51 @@ class CContextSubclassing(ContextSubclassing, unittest.TestCase):
4399
4399
class PyContextSubclassing (ContextSubclassing , unittest .TestCase ):
4400
4400
decimal = P
4401
4401
4402
+ class IEEEContexts :
4403
+
4404
+ def test_ieee_context (self ):
4405
+ # issue 8786: Add support for IEEE 754 contexts to decimal module.
4406
+ IEEEContext = self .decimal .IEEEContext
4407
+
4408
+ def assert_rest (self , context ):
4409
+ self .assertEqual (context .clamp , 1 )
4410
+ assert_signals (self , context , 'traps' , [])
4411
+ assert_signals (self , context , 'flags' , [])
4412
+
4413
+ c = IEEEContext (32 )
4414
+ self .assertEqual (c .prec , 7 )
4415
+ self .assertEqual (c .Emax , 96 )
4416
+ self .assertEqual (c .Emin , - 95 )
4417
+ assert_rest (self , c )
4418
+
4419
+ c = IEEEContext (64 )
4420
+ self .assertEqual (c .prec , 16 )
4421
+ self .assertEqual (c .Emax , 384 )
4422
+ self .assertEqual (c .Emin , - 383 )
4423
+ assert_rest (self , c )
4424
+
4425
+ c = IEEEContext (128 )
4426
+ self .assertEqual (c .prec , 34 )
4427
+ self .assertEqual (c .Emax , 6144 )
4428
+ self .assertEqual (c .Emin , - 6143 )
4429
+ assert_rest (self , c )
4430
+
4431
+ # Invalid values
4432
+ self .assertRaises (ValueError , IEEEContext , - 1 )
4433
+ self .assertRaises (ValueError , IEEEContext , 123 )
4434
+ self .assertRaises (ValueError , IEEEContext , 1024 )
4435
+
4436
+ def test_constants (self ):
4437
+ # IEEEContext
4438
+ IEEE_CONTEXT_MAX_BITS = self .decimal .IEEE_CONTEXT_MAX_BITS
4439
+ self .assertIn (IEEE_CONTEXT_MAX_BITS , {256 , 512 })
4440
+
4441
+ @requires_cdecimal
4442
+ class CIEEEContexts (IEEEContexts , unittest .TestCase ):
4443
+ decimal = C
4444
+ class PyIEEEContexts (IEEEContexts , unittest .TestCase ):
4445
+ decimal = P
4446
+
4402
4447
@skip_if_extra_functionality
4403
4448
@requires_cdecimal
4404
4449
class CheckAttributes (unittest .TestCase ):
@@ -4410,6 +4455,7 @@ def test_module_attributes(self):
4410
4455
self .assertEqual (C .MAX_EMAX , P .MAX_EMAX )
4411
4456
self .assertEqual (C .MIN_EMIN , P .MIN_EMIN )
4412
4457
self .assertEqual (C .MIN_ETINY , P .MIN_ETINY )
4458
+ self .assertEqual (C .IEEE_CONTEXT_MAX_BITS , P .IEEE_CONTEXT_MAX_BITS )
4413
4459
4414
4460
self .assertTrue (C .HAVE_THREADS is True or C .HAVE_THREADS is False )
4415
4461
self .assertTrue (P .HAVE_THREADS is True or P .HAVE_THREADS is False )
@@ -4893,42 +4939,6 @@ def test_py__round(self):
4893
4939
class CFunctionality (unittest .TestCase ):
4894
4940
"""Extra functionality in _decimal"""
4895
4941
4896
- @requires_extra_functionality
4897
- def test_c_ieee_context (self ):
4898
- # issue 8786: Add support for IEEE 754 contexts to decimal module.
4899
- IEEEContext = C .IEEEContext
4900
- DECIMAL32 = C .DECIMAL32
4901
- DECIMAL64 = C .DECIMAL64
4902
- DECIMAL128 = C .DECIMAL128
4903
-
4904
- def assert_rest (self , context ):
4905
- self .assertEqual (context .clamp , 1 )
4906
- assert_signals (self , context , 'traps' , [])
4907
- assert_signals (self , context , 'flags' , [])
4908
-
4909
- c = IEEEContext (DECIMAL32 )
4910
- self .assertEqual (c .prec , 7 )
4911
- self .assertEqual (c .Emax , 96 )
4912
- self .assertEqual (c .Emin , - 95 )
4913
- assert_rest (self , c )
4914
-
4915
- c = IEEEContext (DECIMAL64 )
4916
- self .assertEqual (c .prec , 16 )
4917
- self .assertEqual (c .Emax , 384 )
4918
- self .assertEqual (c .Emin , - 383 )
4919
- assert_rest (self , c )
4920
-
4921
- c = IEEEContext (DECIMAL128 )
4922
- self .assertEqual (c .prec , 34 )
4923
- self .assertEqual (c .Emax , 6144 )
4924
- self .assertEqual (c .Emin , - 6143 )
4925
- assert_rest (self , c )
4926
-
4927
- # Invalid values
4928
- self .assertRaises (OverflowError , IEEEContext , 2 ** 63 )
4929
- self .assertRaises (ValueError , IEEEContext , - 1 )
4930
- self .assertRaises (ValueError , IEEEContext , 1024 )
4931
-
4932
4942
@requires_extra_functionality
4933
4943
def test_c_context (self ):
4934
4944
Context = C .Context
@@ -4949,12 +4959,6 @@ def test_constants(self):
4949
4959
C .DecSubnormal , C .DecUnderflow
4950
4960
)
4951
4961
4952
- # IEEEContext
4953
- self .assertEqual (C .DECIMAL32 , 32 )
4954
- self .assertEqual (C .DECIMAL64 , 64 )
4955
- self .assertEqual (C .DECIMAL128 , 128 )
4956
- self .assertEqual (C .IEEE_CONTEXT_MAX_BITS , 512 )
4957
-
4958
4962
# Conditions
4959
4963
for i , v in enumerate (cond ):
4960
4964
self .assertEqual (v , 1 << i )
0 commit comments