@@ -41,7 +41,7 @@ class UltraJSONTests(TestCase):
4141
4242 def test_encodeDecimal (self ):
4343 sut = decimal .Decimal ("1337.1337" )
44- encoded = ujson .encode (sut , double_precision = 100 )
44+ encoded = ujson .encode (sut , double_precision = 15 )
4545 decoded = ujson .decode (encoded )
4646 self .assertEquals (decoded , 1337.1337 )
4747
@@ -73,7 +73,7 @@ def test_doubleLongIssue(self):
7373 encoded = json .dumps (sut )
7474 decoded = json .loads (encoded )
7575 self .assertEqual (sut , decoded )
76- encoded = ujson .encode (sut , double_precision = 100 )
76+ encoded = ujson .encode (sut , double_precision = 15 )
7777 decoded = ujson .decode (encoded )
7878 self .assertEqual (sut , decoded )
7979
@@ -82,7 +82,7 @@ def test_doubleLongDecimalIssue(self):
8282 encoded = json .dumps (sut )
8383 decoded = json .loads (encoded )
8484 self .assertEqual (sut , decoded )
85- encoded = ujson .encode (sut , double_precision = 100 )
85+ encoded = ujson .encode (sut , double_precision = 15 )
8686 decoded = ujson .decode (encoded )
8787 self .assertEqual (sut , decoded )
8888
@@ -98,6 +98,16 @@ def test_decimalDecodeTestPrecise(self):
9898 decoded = ujson .decode (encoded , precise_float = True )
9999 self .assertEqual (sut , decoded )
100100
101+ def test_encodeDoubleTinyExponential (self ):
102+ num = 1e-40
103+ self .assertEqual (num , ujson .decode (ujson .encode (num )))
104+ num = 1e-100
105+ self .assertEqual (num , ujson .decode (ujson .encode (num )))
106+ num = - 1e-45
107+ self .assertEqual (num , ujson .decode (ujson .encode (num )))
108+ num = - 1e-145
109+ self .assertEqual (num , ujson .decode (ujson .encode (num )))
110+
101111 def test_encodeDictWithUnicodeKeys (self ):
102112 input = { u"key1" : u"value1" , u"key1" : u"value1" , u"key1" : u"value1" , u"key1" : u"value1" , u"key1" : u"value1" , u"key1" : u"value1" }
103113 output = ujson .encode (input )
@@ -158,15 +168,9 @@ def test_doublePrecisionTest(self):
158168
159169 def test_invalidDoublePrecision (self ):
160170 input = 30.12345678901234567890
161- output = ujson .encode (input , double_precision = 20 )
162- # should snap to the max, which is 15
163- self .assertEquals (round (input , 15 ), json .loads (output ))
164- self .assertEquals (round (input , 15 ), ujson .decode (output ))
165171
166- output = ujson .encode (input , double_precision = - 1 )
167- # also should snap to the max, which is 15
168- self .assertEquals (round (input , 15 ), json .loads (output ))
169- self .assertEquals (round (input , 15 ), ujson .decode (output ))
172+ self .assertRaises (ValueError , ujson .encode , input , double_precision = 20 )
173+ self .assertRaises (ValueError , ujson .encode , input , double_precision = - 1 )
170174
171175 # will throw typeError
172176 self .assertRaises (TypeError , ujson .encode , input , double_precision = '9' )
@@ -896,13 +900,13 @@ def testFloatArray(self):
896900
897901 def testFloatMax (self ):
898902 num = np .float (np .finfo (np .float ).max / 10 )
899- assert_approx_equal (np .float (ujson .decode (ujson .encode (num ))), num , 15 )
903+ assert_approx_equal (np .float (ujson .decode (ujson .encode (num , double_precision = 15 ))), num , 15 )
900904
901905 num = np .float32 (np .finfo (np .float32 ).max / 10 )
902- assert_approx_equal (np .float32 (ujson .decode (ujson .encode (num ))), num , 15 )
906+ assert_approx_equal (np .float32 (ujson .decode (ujson .encode (num , double_precision = 15 ))), num , 15 )
903907
904908 num = np .float64 (np .finfo (np .float64 ).max / 10 )
905- assert_approx_equal (np .float64 (ujson .decode (ujson .encode (num ))), num , 15 )
909+ assert_approx_equal (np .float64 (ujson .decode (ujson .encode (num , double_precision = 15 ))), num , 15 )
906910
907911 def testArrays (self ):
908912 arr = np .arange (100 );
0 commit comments