| #!/usr/bin/env python |
| """ |
| Run this file two ways under coverage and see that the times are the same: |
| |
| $ coverage run lab/bug397.py slow |
| Runtime per example: 130.96 +/- 3.70 us |
| $ coverage run lab/bug397.py fast |
| Runtime per example: 131.34 +/- 4.48 us |
| |
| Written by David MacIver as part of https://github.com/nedbat/coveragepy/issues/397 |
| |
| """ |
| from __future__ import print_function |
| |
| import sys |
| import random |
| import time |
| import math |
| |
| if sys.argv[1] == "slow": |
| sys.settrace(sys.gettrace()) |
| |
| random.seed(1) |
| |
| |
| def hash_str(s): |
| h = 0 |
| for c in s: |
| h = (h * 31 + ord(c)) & (2 ** 64 - 1) |
| return h |
| |
| data = [ |
| hex(random.getrandbits(1024)) for _ in range(500) |
| ] |
| |
| N_SAMPLES = 100 |
| |
| |
| def mean(xs): |
| xs = list(xs) |
| return sum(xs) / len(xs) |
| |
| |
| def sd(xs): |
| return math.sqrt(mean(x ** 2 for x in xs) - mean(xs) ** 2) |
| |
| |
| if __name__ == '__main__': |
| timing = [] |
| for _ in range(N_SAMPLES): |
| start = time.time() |
| for d in data: |
| hash_str(d) |
| timing.append(1000000 * (time.time() - start) / len(data)) |
| print("Runtime per example:", "%.2f +/- %.2f us" % (mean(timing), sd(timing))) |