@@ -4399,6 +4399,51 @@ class CContextSubclassing(ContextSubclassing, unittest.TestCase):
43994399class PyContextSubclassing (ContextSubclassing , unittest .TestCase ):
44004400 decimal = P
44014401
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+
44024447@skip_if_extra_functionality
44034448@requires_cdecimal
44044449class CheckAttributes (unittest .TestCase ):
@@ -4410,6 +4455,7 @@ def test_module_attributes(self):
44104455 self .assertEqual (C .MAX_EMAX , P .MAX_EMAX )
44114456 self .assertEqual (C .MIN_EMIN , P .MIN_EMIN )
44124457 self .assertEqual (C .MIN_ETINY , P .MIN_ETINY )
4458+ self .assertEqual (C .IEEE_CONTEXT_MAX_BITS , P .IEEE_CONTEXT_MAX_BITS )
44134459
44144460 self .assertTrue (C .HAVE_THREADS is True or C .HAVE_THREADS is False )
44154461 self .assertTrue (P .HAVE_THREADS is True or P .HAVE_THREADS is False )
@@ -4893,42 +4939,6 @@ def test_py__round(self):
48934939class CFunctionality (unittest .TestCase ):
48944940 """Extra functionality in _decimal"""
48954941
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-
49324942 @requires_extra_functionality
49334943 def test_c_context (self ):
49344944 Context = C .Context
@@ -4949,12 +4959,6 @@ def test_constants(self):
49494959 C .DecSubnormal , C .DecUnderflow
49504960 )
49514961
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-
49584962 # Conditions
49594963 for i , v in enumerate (cond ):
49604964 self .assertEqual (v , 1 << i )
0 commit comments