@@ -4977,6 +4977,54 @@ def test_exact_conversion(self):
49774977 x = "1e%d" % (- sys .maxsize - 1 )
49784978 self .assertRaises (InvalidOperation , Decimal , x )
49794979
4980+ def test_from_tuple (self ):
4981+ Decimal = C .Decimal
4982+ localcontext = C .localcontext
4983+ InvalidOperation = C .InvalidOperation
4984+ Overflow = C .Overflow
4985+ Underflow = C .Underflow
4986+
4987+ with localcontext () as c :
4988+
4989+ c .traps [InvalidOperation ] = True
4990+ c .traps [Overflow ] = True
4991+ c .traps [Underflow ] = True
4992+
4993+ # SSIZE_MAX
4994+ x = (1 , (), sys .maxsize )
4995+ self .assertEqual (str (c .create_decimal (x )), '-0E+999999' )
4996+ self .assertRaises (InvalidOperation , Decimal , x )
4997+
4998+ x = (1 , (0 , 1 , 2 ), sys .maxsize )
4999+ self .assertRaises (Overflow , c .create_decimal , x )
5000+ self .assertRaises (InvalidOperation , Decimal , x )
5001+
5002+ # SSIZE_MIN
5003+ x = (1 , (), - sys .maxsize - 1 )
5004+ self .assertEqual (str (c .create_decimal (x )), '-0E-1000026' )
5005+ self .assertRaises (InvalidOperation , Decimal , x )
5006+
5007+ x = (1 , (0 , 1 , 2 ), - sys .maxsize - 1 )
5008+ self .assertRaises (Underflow , c .create_decimal , x )
5009+ self .assertRaises (InvalidOperation , Decimal , x )
5010+
5011+ # OverflowError
5012+ x = (1 , (), sys .maxsize + 1 )
5013+ self .assertRaises (OverflowError , c .create_decimal , x )
5014+ self .assertRaises (OverflowError , Decimal , x )
5015+
5016+ x = (1 , (), - sys .maxsize - 2 )
5017+ self .assertRaises (OverflowError , c .create_decimal , x )
5018+ self .assertRaises (OverflowError , Decimal , x )
5019+
5020+ # Specials
5021+ x = (1 , (), "N" )
5022+ self .assertEqual (str (Decimal (x )), '-sNaN' )
5023+ x = (1 , (0 ,), "N" )
5024+ self .assertEqual (str (Decimal (x )), '-sNaN' )
5025+ x = (1 , (0 , 1 ), "N" )
5026+ self .assertEqual (str (Decimal (x )), '-sNaN1' )
5027+
49805028
49815029all_tests = [
49825030 CExplicitConstructionTest , PyExplicitConstructionTest ,
0 commit comments