CLI benchmarking tool with rich terminal output and markdown export.
Project description
benchdiff
A CLI benchmarking tool with rich terminal output and markdown export.
Installation
pip install benchdiff
Usage
Create a file named bench_*.py and define a __benchmarks__ list:
# bench_strings.py
words = ["hello", "world", "foo", "bar"]
def concat():
result = ""
for w in words:
result += w
def join():
"".join(words)
def format_string():
"%s %s %s %s" % tuple(words)
def fstring():
f"{words[0]} {words[1]} {words[2]} {words[3]}"
__benchmarks__ = [
("String concatenation", [concat, join]),
("String formatting", [format_string, fstring]),
]
Run benchmarks:
benchdiff benchmarks/
╭──────────────────────────────── benchdiff ────────────────────────────────╮
│ │
│ Benchmark Min Median Max × │
│ ─────────────────────────────────────────────────────────────────────── │
│ String concatenation │
│ concat 78.333ns 80.833ns 97.750ns 1.711x │
│ join 44.250ns 47.250ns 53.125ns 1.000x │
│ String formatting │
│ format_string 103.834ns 110.417ns 114.708ns 1.464x │
│ fstring 75.000ns 75.417ns 76.083ns 1.000x │
│ │
│ * times in nanoseconds, lower is better │
│ ───────────────────────────────────────────────────────────────────────── │
│ Python 3.14.2 │
│ Platform macOS-26.3.1 │
│ CPU Apple M3 Pro │
│ Rounds 5 × 1,000 calls │
│ Date 2026-05-08 10:05:59 │
╰───────────────────────────────────────────────────────────────────────────╯
CLI options
benchdiff [PATH] [OPTIONS]
Arguments:
PATH Path to search for bench_*.py files [default: .]
Options:
--repeat Number of measurement loops [default: 5]
--times Number of calls per measurement [default: 1000]
--markdown Output as GFM markdown table
--help Show this message and exit.
Markdown output
benchdiff benchmarks/ --markdown
| Benchmark | Min | Median | Max | × |
|---|---|---|---|---|
| String concatenation | ||||
| concat | 84.875ns | 94.250ns | 157.792ns | 1.879x |
| join | 50.042ns | 50.167ns | 52.166ns | 1.000x |
| String formatting | ||||
| format_string | 113.833ns | 115.083ns | 118.750ns | 1.539x |
| fstring | 72.375ns | 74.791ns | 84.583ns | 1.000x |
times in nanoseconds, lower is better
Python 3.14.2 · macOS-26.3.1 · Apple M3 Pro · 5 × 1,000 rounds · 2026-05-08 11:14:38
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file benchdiff-0.3.0.tar.gz.
File metadata
- Download URL: benchdiff-0.3.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fca4dd6d5fda7c2c409842c28631c40aeedcc7607fe600a0e418f66b5a21641b
|
|
| MD5 |
9068b373aa07e13c9f4fa4fbdf1f6610
|
|
| BLAKE2b-256 |
e520f4b57f07a428f80f8062dc65129faf0a954ac856fba11e4792d502da7cb4
|
File details
Details for the file benchdiff-0.3.0-py3-none-any.whl.
File metadata
- Download URL: benchdiff-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.12 {"installer":{"name":"uv","version":"0.11.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d634dcfa563d168bd1d146157a82ba4f208d75c6183393340db337a75096f975
|
|
| MD5 |
37879e243d7f2a1570a221a258c72a3a
|
|
| BLAKE2b-256 |
83d1a372f9be53fc93432c620254f245b706bee7e529f53b605fe6ad26acae5d
|