2013-09-07 05:46:52 +00:00
|
|
|
from unittest import TestCase
|
|
|
|
|
|
|
|
import simplejson as json
|
2015-03-23 20:58:26 +00:00
|
|
|
|
2013-09-07 05:46:52 +00:00
|
|
|
|
|
|
|
class TestBigintAsString(TestCase):
|
|
|
|
# Python 2.5, at least the one that ships on Mac OS X, calculates
|
|
|
|
# 2 ** 53 as 0! It manages to calculate 1 << 53 correctly.
|
|
|
|
values = [(200, 200),
|
|
|
|
((1 << 53) - 1, 9007199254740991),
|
|
|
|
((1 << 53), '9007199254740992'),
|
|
|
|
((1 << 53) + 1, '9007199254740993'),
|
|
|
|
(-100, -100),
|
|
|
|
((-1 << 53), '-9007199254740992'),
|
|
|
|
((-1 << 53) - 1, '-9007199254740993'),
|
|
|
|
((-1 << 53) + 1, -9007199254740991)]
|
|
|
|
|
2015-03-23 20:58:26 +00:00
|
|
|
options = (
|
|
|
|
{"bigint_as_string": True},
|
|
|
|
{"int_as_string_bitcount": 53}
|
|
|
|
)
|
|
|
|
|
2013-09-07 05:46:52 +00:00
|
|
|
def test_ints(self):
|
2015-03-23 20:58:26 +00:00
|
|
|
for opts in self.options:
|
|
|
|
for val, expect in self.values:
|
|
|
|
self.assertEqual(
|
|
|
|
val,
|
|
|
|
json.loads(json.dumps(val)))
|
|
|
|
self.assertEqual(
|
|
|
|
expect,
|
|
|
|
json.loads(json.dumps(val, **opts)))
|
2013-09-07 05:46:52 +00:00
|
|
|
|
|
|
|
def test_lists(self):
|
2015-03-23 20:58:26 +00:00
|
|
|
for opts in self.options:
|
|
|
|
for val, expect in self.values:
|
|
|
|
val = [val, val]
|
|
|
|
expect = [expect, expect]
|
|
|
|
self.assertEqual(
|
|
|
|
val,
|
|
|
|
json.loads(json.dumps(val)))
|
|
|
|
self.assertEqual(
|
|
|
|
expect,
|
|
|
|
json.loads(json.dumps(val, **opts)))
|
2013-09-07 05:46:52 +00:00
|
|
|
|
|
|
|
def test_dicts(self):
|
2015-03-23 20:58:26 +00:00
|
|
|
for opts in self.options:
|
|
|
|
for val, expect in self.values:
|
|
|
|
val = {'k': val}
|
|
|
|
expect = {'k': expect}
|
|
|
|
self.assertEqual(
|
|
|
|
val,
|
|
|
|
json.loads(json.dumps(val)))
|
|
|
|
self.assertEqual(
|
|
|
|
expect,
|
|
|
|
json.loads(json.dumps(val, **opts)))
|
2013-09-07 05:46:52 +00:00
|
|
|
|
|
|
|
def test_dict_keys(self):
|
2015-03-23 20:58:26 +00:00
|
|
|
for opts in self.options:
|
|
|
|
for val, _ in self.values:
|
|
|
|
expect = {str(val): 'value'}
|
|
|
|
val = {val: 'value'}
|
|
|
|
self.assertEqual(
|
|
|
|
expect,
|
|
|
|
json.loads(json.dumps(val)))
|
|
|
|
self.assertEqual(
|
|
|
|
expect,
|
|
|
|
json.loads(json.dumps(val, **opts)))
|