test_float.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import math
  2. from unittest import TestCase
  3. from simplejson.compat import long_type, text_type
  4. import simplejson as json
  5. from simplejson.decoder import NaN, PosInf, NegInf
  6. class TestFloat(TestCase):
  7. def test_degenerates_allow(self):
  8. for inf in (PosInf, NegInf):
  9. self.assertEqual(json.loads(json.dumps(inf)), inf)
  10. # Python 2.5 doesn't have math.isnan
  11. nan = json.loads(json.dumps(NaN))
  12. self.assertTrue((0 + nan) != nan)
  13. def test_degenerates_ignore(self):
  14. for f in (PosInf, NegInf, NaN):
  15. self.assertEqual(json.loads(json.dumps(f, ignore_nan=True)), None)
  16. def test_degenerates_deny(self):
  17. for f in (PosInf, NegInf, NaN):
  18. self.assertRaises(ValueError, json.dumps, f, allow_nan=False)
  19. def test_floats(self):
  20. for num in [1617161771.7650001, math.pi, math.pi**100,
  21. math.pi**-100, 3.1]:
  22. self.assertEqual(float(json.dumps(num)), num)
  23. self.assertEqual(json.loads(json.dumps(num)), num)
  24. self.assertEqual(json.loads(text_type(json.dumps(num))), num)
  25. def test_ints(self):
  26. for num in [1, long_type(1), 1<<32, 1<<64]:
  27. self.assertEqual(json.dumps(num), str(num))
  28. self.assertEqual(int(json.dumps(num)), num)
  29. self.assertEqual(json.loads(json.dumps(num)), num)
  30. self.assertEqual(json.loads(text_type(json.dumps(num))), num)