summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/perf_bench/core_yield_from.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/perf_bench/core_yield_from.py b/tests/perf_bench/core_yield_from.py
new file mode 100644
index 000000000..2f6930e2b
--- /dev/null
+++ b/tests/perf_bench/core_yield_from.py
@@ -0,0 +1,31 @@
+# Test a deep set of "yield from" statements.
+
+
+def recursive_yield_from(depth, iter_):
+ if depth <= 0:
+ for i in iter_:
+ yield i
+ else:
+ yield from recursive_yield_from(depth - 1, iter_)
+
+
+def test(n):
+ global result
+ result = 0
+ for i in recursive_yield_from(10, range(n)):
+ result += i
+
+
+###########################################################################
+# Benchmark interface
+
+bm_params = {
+ (100, 10): (2000,),
+ (1000, 10): (20000,),
+ (5000, 10): (100000,),
+}
+
+
+def bm_setup(params):
+ (nloop,) = params
+ return lambda: test(nloop), lambda: (nloop // 100, result)