summaryrefslogtreecommitdiffstatshomepage
path: root/tests/perf_bench/core_locals.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/perf_bench/core_locals.py')
-rw-r--r--tests/perf_bench/core_locals.py191
1 files changed, 191 insertions, 0 deletions
diff --git a/tests/perf_bench/core_locals.py b/tests/perf_bench/core_locals.py
new file mode 100644
index 0000000000..d28e078b26
--- /dev/null
+++ b/tests/perf_bench/core_locals.py
@@ -0,0 +1,191 @@
+# This tests the performance of an instance class locals dict (importantly, that has all keys as qstrs)
+
+# These are all shorter than 10 characters, so will be interned by the parser.
+ZEN = [
+ "the",
+ "zen",
+ "of",
+ "python",
+ "beautiful",
+ "is",
+ "better",
+ "than",
+ "ugly",
+ "explicit",
+ "is",
+ "better",
+ "than",
+ "implicit",
+ "simple",
+ "is",
+ "better",
+ "than",
+ "complex",
+ "complex",
+ "is",
+ "better",
+ "than",
+ "complicate",
+ "flat",
+ "is",
+ "better",
+ "than",
+ "nested",
+ "sparse",
+ "is",
+ "better",
+ "than",
+ "dense",
+ "readabilit",
+ "counts",
+ "special",
+ "cases",
+ "arent",
+ "special",
+ "enough",
+ "to",
+ "break",
+ "the",
+ "rules",
+ "although",
+ "practicali",
+ "beats",
+ "purity",
+ "errors",
+ "should",
+ "never",
+ "pass",
+ "silently",
+ "unless",
+ "explicitly",
+ "silenced",
+ "in",
+ "the",
+ "face",
+ "of",
+ "ambiguity",
+ "refuse",
+ "the",
+ "temptation",
+ "to",
+ "guess",
+ "there",
+ "should",
+ "be",
+ "one",
+ "and",
+ "preferably",
+ "only",
+ "one",
+ "obvious",
+ "way",
+ "to",
+ "do",
+ "it",
+ "although",
+ "that",
+ "way",
+ "may",
+ "not",
+ "be",
+ "obvious",
+ "at",
+ "first",
+ "unless",
+ "youre",
+ "dutch",
+ "now",
+ "is",
+ "better",
+ "than",
+ "never",
+ "although",
+ "never",
+ "is",
+ "often",
+ "better",
+ "than",
+ "right",
+ "now",
+ "if",
+ "the",
+ "implementa",
+ "is",
+ "hard",
+ "to",
+ "explain",
+ "its",
+ "a",
+ "bad",
+ "idea",
+ "if",
+ "the",
+ "implementa",
+ "is",
+ "easy",
+ "to",
+ "explain",
+ "it",
+ "may",
+ "be",
+ "a",
+ "good",
+ "idea",
+ "namespaces",
+ "are",
+ "one",
+ "honking",
+ "great",
+ "idea",
+ "",
+ "lets",
+ "do",
+ "more",
+ "of",
+ "those",
+]
+
+
+class A:
+ pass
+
+
+def test(niter):
+ for _ in range(niter):
+ a = A()
+ for _ in range(niter):
+ for word in ZEN:
+ setattr(a, word, getattr(a, word, 0) + 1)
+
+ return (
+ getattr(a, "python"),
+ getattr(a, "is"),
+ getattr(a, "than"),
+ )
+
+
+###########################################################################
+# Benchmark interface
+
+bm_params = {
+ (32, 10): (2,),
+ (50, 10): (4,),
+ (100, 10): (8,),
+ (500, 10): (40,),
+ (1000, 10): (80,),
+ (5000, 10): (400,),
+}
+
+
+def bm_setup(params):
+ (niter,) = params
+ state = None
+
+ def run():
+ nonlocal state
+ state = test(niter)
+
+ def result():
+ return niter, state
+
+ return run, result