Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 30 additions & 36 deletions benchmark.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,78 +64,72 @@ def __exit__(self, *args):

results = []

def _assert_items(parser, item_getter=lambda x: x, item_key='id'):
n = 0
for n, item in enumerate(parser):
assert(item_getter(item)[item_key] == n)
assert(n + 1 == args.json_size)

with TestCase('json.loads()', 'str', args.json_size, results):
for n, item in enumerate(json.loads(jsondata)['level1']['level2']):
assert(item['id'] == n)
_assert_items(json.loads(jsondata)['level1']['level2'])

with TestCase('json.load(StringIO())', 'str', args.json_size, results):
gen = io.StringIO(jsondata)
for n, item in enumerate(json.load(gen)['level1']['level2']):
assert(item['id'] == n)
_assert_items(json.load(gen)['level1']['level2'])

with TestCase('**JsonSlicer (no paths, binary input, binary output)**', 'bytes', args.json_size, results):
with TestCase('**JsonSlicer (no paths, binary input)**', 'bytes', args.json_size, results):
gen = io.BytesIO(jsondata.encode('utf-8'))
parser = JsonSlicer(gen, (b'level1', b'level2', None), binary=True)
for n, item in enumerate(parser):
assert(item[b'id'] == n)
_assert_items(parser, item_key=b'id')

with TestCase('**JsonSlicer (no paths, unicode input, binary output)**', 'bytes', args.json_size, results):
with TestCase('**JsonSlicer (no paths, unicode input)**', 'bytes', args.json_size, results):
gen = io.StringIO(jsondata)
parser = JsonSlicer(gen, (b'level1', b'level2', None), binary=True)
for n, item in enumerate(parser):
assert(item[b'id'] == n)
_assert_items(parser, item_key=b'id')

with TestCase('**JsonSlicer (no paths, binary input, unicode output)**', 'str', args.json_size, results):
with TestCase('**JsonSlicer (no paths, binary input)**', 'str', args.json_size, results):
gen = io.BytesIO(jsondata.encode('utf-8'))
parser = JsonSlicer(gen, ('level1', 'level2', None))
for n, item in enumerate(parser):
assert(item['id'] == n)
_assert_items(parser)

with TestCase('**JsonSlicer (no paths, unicode input, unicode output)**', 'str', args.json_size, results):
with TestCase('**JsonSlicer (no paths, unicode input)**', 'str', args.json_size, results):
gen = io.StringIO(jsondata)
parser = JsonSlicer(gen, ('level1', 'level2', None))
for n, item in enumerate(parser):
assert(item['id'] == n)
_assert_items(parser)

with TestCase('**JsonSlicer (full paths, binary output)**', 'bytes', args.json_size, results):
with TestCase('**JsonSlicer (full paths)**', 'bytes', args.json_size, results):
gen = io.BytesIO(jsondata.encode('utf-8'))
parser = JsonSlicer(gen, (b'level1', b'level2', None), path_mode='full', binary=True)
for n, (*path, item) in enumerate(parser):
assert(item[b'id'] == n)
_assert_items(parser, item_getter=lambda x: x[-1], item_key=b'id')

with TestCase('**JsonSlicer (full paths, unicode output)**', 'str', args.json_size, results):
with TestCase('**JsonSlicer (full paths)**', 'str', args.json_size, results):
gen = io.StringIO(jsondata)
parser = JsonSlicer(gen, ('level1', 'level2', None), path_mode='full')
for n, (*path, item) in enumerate(parser):
assert(item['id'] == n)
_assert_items(parser, item_getter=lambda x: x[-1])

with TestCase('ijson.yajl2_c', 'bytes', args.json_size, results):
with TestCase('ijson.yajl2_c', 'str', args.json_size, results):
gen = io.BytesIO(jsondata.encode('utf-8'))
parser = ijson_yajl2_c.items(gen, b'level1.level2.item')
for n, item in enumerate(parser):
assert(item['id'] == n)
parser = ijson_yajl2_c.items(gen, 'level1.level2.item')
_assert_items(parser)

with TestCase('ijson.yajl2_cffi', 'bytes', args.json_size, results):
with TestCase('ijson.yajl2_cffi', 'str', args.json_size, results):
gen = io.BytesIO(jsondata.encode('utf-8'))
parser = ijson_yajl2_cffi.items(gen, b'level1.level2.item')
for n, item in enumerate(parser):
assert(item['id'] == n)
parser = ijson_yajl2_cffi.items(gen, 'level1.level2.item')
_assert_items(parser)

with TestCase('ijson.yajl2', 'bytes', args.json_size, results):
with TestCase('ijson.yajl2', 'str', args.json_size, results):
gen = io.BytesIO(jsondata.encode('utf-8'))
parser = ijson_yajl2.items(gen, 'level1.level2.item')
for n, item in enumerate(parser):
assert(item['id'] == n)
_assert_items(parser)

with TestCase('ijson.python', 'str', args.json_size, results):
gen = io.StringIO(jsondata)
parser = ijson_python.items(gen, 'level1.level2.item')
for n, item in enumerate(parser):
assert(item['id'] == n)
_assert_items(parser)

print(tabulate(
results,
headers=['Facility', 'Type', 'Objects/sec'],
headers=['Facility', 'Output type', 'Objects/sec'],
stralign='right',
# colalign=['left', 'center', 'right'],
tablefmt='pipe'
Expand Down