diff --git a/bench.py b/bench.py old mode 100644 new mode 100755 index 59617aa8..7797ebc9 --- a/bench.py +++ b/bench.py @@ -1,30 +1,64 @@ +#!/usr/bin/env python3 +# /// scripts +# dependencies = [ +# ".", +# "pyperf", +# ] +# /// import subprocess import sys +import tempfile -for name, s in ( - ("short escape", '"Hello, World!"'), - ("long escape", '"Hello, World!" * 1000'), - ("short plain", '"Hello, World!"'), - ("long plain", '"Hello, World!" * 1000'), - ("long suffix", '"Hello, World!" + "x" * 100_000'), -): +with tempfile.TemporaryDirectory() as d: + outfiles = [] for mod in "native", "speedups": - subprocess.run( - [ - sys.executable, - "-m", - "pyperf", - "timeit", - "--name", - f"{name} {mod}", - "-s", - ( - "import markupsafe\n" - f"from markupsafe._{mod} import _escape_inner\n" - "markupsafe._escape_inner = _escape_inner\n" - "from markupsafe import escape\n" - f"s = {s}" - ), - "escape(s)", - ] - ) + print(mod, end="", flush=True) + outname = f"{d}/{mod}.json" + outfiles.append(outname) + for name, s in ( + ("short escape", '"Hello, World!"'), + ("long escape", '"Hello, World!" * 1000'), + ("short plain", '"Hello, World!"'), + ("long plain", '"Hello, World!" * 1000'), + ( + "long prefix", + '"Hello, World!" * 1000 + "Hello, World!"', + ), + ("long suffix", '"Hello, World!" + "x" * 100_000'), + ): + subprocess.run( + [ + sys.executable, + "-m", + "pyperf", + "timeit", + "--quiet", + "--name", + name, + "--append", + outname, + "-s", + ( + "import markupsafe\n" + f"from markupsafe._{mod} import _escape_inner\n" + "markupsafe._escape_inner = _escape_inner\n" + "from markupsafe import escape\n" + f"s = {s}" + ), + "escape(s)", + ], + stdout=subprocess.DEVNULL, + ) + print(".", end="", flush=True) + print() + + subprocess.run( + [ + sys.executable, + "-m", + "pyperf", + "compare_to", + "--table", + *outfiles, + ] + )