1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from importlib import import_module
from time import perf_counter
TEST_FILE = 'test/samples/syntax.md'
TIMES = 1000
def benchmark(package_name):
def decorator(func):
def inner():
try:
package = import_module(package_name)
except ImportError:
return 'not available.'
start = perf_counter()
for i in range(TIMES):
func(package)
end = perf_counter()
return end - start
return inner
return decorator
@benchmark('markdown')
def run_markdown(package):
with open(TEST_FILE, 'r') as fin:
return package.markdown(fin.read(), ['extra'])
@benchmark('mistune')
def run_mistune(package):
with open(TEST_FILE, 'r') as fin:
return package.markdown(fin.read())
@benchmark('CommonMark')
def run_commonmark(package):
with open(TEST_FILE, 'r') as fin:
return package.commonmark(fin.read())
@benchmark('mistletoe')
def run_mistletoe(package):
with open(TEST_FILE, 'r') as fin:
return package.markdown(fin)
def run(package_name):
print(package_name, end=': ')
print(globals()['run_{}'.format(package_name.lower())]())
def run_all(package_names):
prompt = 'Running tests with {}...'.format(', '.join(package_names))
print(prompt)
print('='*len(prompt))
for package_name in package_names:
run(package_name)
def main(*args):
print('Test document: {}'.format(TEST_FILE))
print('Test iterations: {}'.format(TIMES))
if args[1:]:
run_all(args[1:])
else:
run_all(['markdown', 'mistune', 'commonmark', 'mistletoe'])
if __name__ == '__main__':
main(*sys.argv)
|