test_bigint_as_string.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from unittest import TestCase
  2. import simplejson as json
  3. class TestBigintAsString(TestCase):
  4. # Python 2.5, at least the one that ships on Mac OS X, calculates
  5. # 2 ** 53 as 0! It manages to calculate 1 << 53 correctly.
  6. values = [(200, 200),
  7. ((1 << 53) - 1, 9007199254740991),
  8. ((1 << 53), '9007199254740992'),
  9. ((1 << 53) + 1, '9007199254740993'),
  10. (-100, -100),
  11. ((-1 << 53), '-9007199254740992'),
  12. ((-1 << 53) - 1, '-9007199254740993'),
  13. ((-1 << 53) + 1, -9007199254740991)]
  14. options = (
  15. {"bigint_as_string": True},
  16. {"int_as_string_bitcount": 53}
  17. )
  18. def test_ints(self):
  19. for opts in self.options:
  20. for val, expect in self.values:
  21. self.assertEqual(
  22. val,
  23. json.loads(json.dumps(val)))
  24. self.assertEqual(
  25. expect,
  26. json.loads(json.dumps(val, **opts)))
  27. def test_lists(self):
  28. for opts in self.options:
  29. for val, expect in self.values:
  30. val = [val, val]
  31. expect = [expect, expect]
  32. self.assertEqual(
  33. val,
  34. json.loads(json.dumps(val)))
  35. self.assertEqual(
  36. expect,
  37. json.loads(json.dumps(val, **opts)))
  38. def test_dicts(self):
  39. for opts in self.options:
  40. for val, expect in self.values:
  41. val = {'k': val}
  42. expect = {'k': expect}
  43. self.assertEqual(
  44. val,
  45. json.loads(json.dumps(val)))
  46. self.assertEqual(
  47. expect,
  48. json.loads(json.dumps(val, **opts)))
  49. def test_dict_keys(self):
  50. for opts in self.options:
  51. for val, _ in self.values:
  52. expect = {str(val): 'value'}
  53. val = {val: 'value'}
  54. self.assertEqual(
  55. expect,
  56. json.loads(json.dumps(val)))
  57. self.assertEqual(
  58. expect,
  59. json.loads(json.dumps(val, **opts)))