""" Micro-benchmark for the Python. Run it with: ./python.orig benchmark.py script bench_str.py --file=orig ./python.patched benchmark.py script bench_str.py --file=patched ./python.patched benchmark.py compare_to orig patched Download benchmark.py from: https://bitbucket.org/haypo/misc/raw/tip/python/benchmark.py """ LENGTHS = ('10', '100', '10**3', '10**5') COUNT = (1, 5, 10, 25, 100, 200, 500) def run_benchmark(bench): bench.start_group('use smaller buffer') bench.timeit(setup='fmt = bytearray(b"hello %s")', stmt='fmt % b"world"') bench.timeit(setup='fmt = bytearray(b"hello %-100s")', stmt='fmt % b"world"') bench.timeit(setup='fmt = bytearray(b"x=%d")', stmt='fmt % 123') bench.timeit(setup='fmt = bytearray(b"x=%f")', stmt='fmt % 1.2') bench.timeit(setup='fmt = bytearray(b"x=%100d")', stmt='fmt % 123') bench.start_group('"hello %s" % long_string') for length in LENGTHS: bench.timeit(setup='fmt = bytearray(b"hello %%s"); arg = b"x" * %s' % length, stmt='fmt % arg') bench.start_group('b"xxxxxx %s" % b"y"') for length in LENGTHS: bench.timeit(setup='fmt = bytearray(b"x" * %s + b"%%s")' % length, stmt='fmt % b"y"') bench.start_group('%f') bench.timeit(setup='n = 200; fmt = bytearray(b"%f" * n); arg = tuple([1.2]*n)', stmt='fmt % arg') bench.start_group('%i') for n in COUNT: bench.timeit(setup='n = %s; fmt = bytearray(b"%%d" * n); arg = tuple([12345]*n)' % n, stmt='fmt % arg') bench.start_group('x=%i') for n in COUNT: bench.timeit(setup='n = %s; fmt = bytearray(b"x=%%d " * n); arg = tuple([12345]*n)' % n, stmt='fmt % arg') bench.start_group('%x') for n in COUNT: bench.timeit(setup='n = %s; fmt = bytearray(b"%%d" * n); arg = tuple([12345]*n)' % n, stmt='fmt % arg') bench.start_group('x=%x') for n in COUNT: bench.timeit(setup='n = %s; fmt = bytearray(b"x=%%x " * n); arg = tuple([0xabcdef]*n)' % n, stmt='fmt % arg') bench.start_group('large int: %i') for n in range(0, 201, 50): bench.timeit(setup='fmt = bytearray(b"%%i"); arg = 10 ** %s - 1' % n, stmt='fmt % arg') bench.start_group('large int: x=%i') for n in range(0, 200, 50): bench.timeit(setup='fmt = bytearray(b"x=%%i"); arg = 10 ** %s - 1' % n, stmt='fmt % arg')