| 6 | from simplejson.decoder import NaN, PosInf, NegInf |
| 7 | |
| 8 | class TestFloat(TestCase): |
| 9 | def test_degenerates_allow(self): |
| 10 | for inf in (PosInf, NegInf): |
| 11 | self.assertEqual(json.loads(json.dumps(inf, allow_nan=True), allow_nan=True), inf) |
| 12 | # Python 2.5 doesn't have math.isnan |
| 13 | nan = json.loads(json.dumps(NaN, allow_nan=True), allow_nan=True) |
| 14 | self.assertTrue((0 + nan) != nan) |
| 15 | |
| 16 | def test_degenerates_ignore(self): |
| 17 | for f in (PosInf, NegInf, NaN): |
| 18 | self.assertEqual(json.loads(json.dumps(f, ignore_nan=True)), None) |
| 19 | |
| 20 | def test_degenerates_deny(self): |
| 21 | for f in (PosInf, NegInf, NaN): |
| 22 | self.assertRaises(ValueError, json.dumps, f, allow_nan=False) |
| 23 | for s in ('Infinity', '-Infinity', 'NaN'): |
| 24 | self.assertRaises(ValueError, json.loads, s, allow_nan=False) |
| 25 | self.assertRaises(ValueError, json.loads, s) |
| 26 | |
| 27 | def test_floats(self): |
| 28 | for num in [1617161771.7650001, math.pi, math.pi**100, |
| 29 | math.pi**-100, 3.1]: |
| 30 | self.assertEqual(float(json.dumps(num)), num) |
| 31 | self.assertEqual(json.loads(json.dumps(num)), num) |
| 32 | self.assertEqual(json.loads(text_type(json.dumps(num))), num) |
| 33 | |
| 34 | def test_ints(self): |
| 35 | for num in [1, long_type(1), 1<<32, 1<<64]: |
| 36 | self.assertEqual(json.dumps(num), str(num)) |
| 37 | self.assertEqual(int(json.dumps(num)), num) |
| 38 | self.assertEqual(json.loads(json.dumps(num)), num) |
| 39 | self.assertEqual(json.loads(text_type(json.dumps(num))), num) |
| 40 | |
| 41 | def test_float_range(self): |
| 42 | try: |
| 43 | float_range = [sys.float_info.min, sys.float_info.max] |
| 44 | except AttributeError: |
| 45 | float_range = [2.2250738585072014e-308, 1.7976931348623157e+308] |
| 46 | self.assertEqual(json.loads(json.dumps(float_range)), float_range) |
nothing calls this directly
no outgoing calls
no test coverage detected
searching dependent graphs…