summaryrefslogtreecommitdiff
path: root/lab
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-11-01 21:30:08 -0500
committerNed Batchelder <ned@nedbatchelder.com>2015-11-01 21:30:08 -0500
commitfc4d5df676a67e63d21ded54099daff1927f00f1 (patch)
tree126fd25945a0e87cfedb6adef78dabfca7f547c0 /lab
parent53aed6b1ea39312caaf4067d836d8080ad0ec610 (diff)
downloadpython-coveragepy-git-fc4d5df676a67e63d21ded54099daff1927f00f1.tar.gz
A test program assessing performance for issue #397
Diffstat (limited to 'lab')
-rw-r--r--lab/bug397.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/lab/bug397.py b/lab/bug397.py
new file mode 100644
index 00000000..4d72e908
--- /dev/null
+++ b/lab/bug397.py
@@ -0,0 +1,56 @@
+#!/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://bitbucket.org/ned/coveragepy/issues/397/stopping-and-resuming-coverage-with
+
+"""
+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)))