@@ -41,7 +41,7 @@ class UltraJSONTests(TestCase):
41
41
42
42
def test_encodeDecimal (self ):
43
43
sut = decimal .Decimal ("1337.1337" )
44
- encoded = ujson .encode (sut , double_precision = 100 )
44
+ encoded = ujson .encode (sut , double_precision = 15 )
45
45
decoded = ujson .decode (encoded )
46
46
self .assertEquals (decoded , 1337.1337 )
47
47
@@ -73,7 +73,7 @@ def test_doubleLongIssue(self):
73
73
encoded = json .dumps (sut )
74
74
decoded = json .loads (encoded )
75
75
self .assertEqual (sut , decoded )
76
- encoded = ujson .encode (sut , double_precision = 100 )
76
+ encoded = ujson .encode (sut , double_precision = 15 )
77
77
decoded = ujson .decode (encoded )
78
78
self .assertEqual (sut , decoded )
79
79
@@ -82,7 +82,7 @@ def test_doubleLongDecimalIssue(self):
82
82
encoded = json .dumps (sut )
83
83
decoded = json .loads (encoded )
84
84
self .assertEqual (sut , decoded )
85
- encoded = ujson .encode (sut , double_precision = 100 )
85
+ encoded = ujson .encode (sut , double_precision = 15 )
86
86
decoded = ujson .decode (encoded )
87
87
self .assertEqual (sut , decoded )
88
88
@@ -98,6 +98,16 @@ def test_decimalDecodeTestPrecise(self):
98
98
decoded = ujson .decode (encoded , precise_float = True )
99
99
self .assertEqual (sut , decoded )
100
100
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
+
101
111
def test_encodeDictWithUnicodeKeys (self ):
102
112
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" }
103
113
output = ujson .encode (input )
@@ -158,15 +168,9 @@ def test_doublePrecisionTest(self):
158
168
159
169
def test_invalidDoublePrecision (self ):
160
170
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 ))
165
171
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 )
170
174
171
175
# will throw typeError
172
176
self .assertRaises (TypeError , ujson .encode , input , double_precision = '9' )
@@ -896,13 +900,13 @@ def testFloatArray(self):
896
900
897
901
def testFloatMax (self ):
898
902
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 )
900
904
901
905
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 )
903
907
904
908
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 )
906
910
907
911
def testArrays (self ):
908
912
arr = np .arange (100 );
0 commit comments