48 lines
1.6 KiB
Bash
Executable File
48 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# bench.sh — race fastwc against GNU coreutils wc on line counts, file input.
|
|
# Busybox and toybox wc are raced too, for shits and giggles. Includes
|
|
# the monster cases: 100M lines raced against coreutils (busybox/toybox
|
|
# through 1.1 GB is a spectator sport, not a benchmark), and 1B lines
|
|
# timed solo (no reference to beat — there isn't one).
|
|
# Fails fast: the moment fastwc is slower than (or disagrees with) an
|
|
# oracle wc, a human readable report is written to FAILED-benchmark.txt
|
|
# and this script exits non-zero.
|
|
#
|
|
# usage: ./bench.sh
|
|
set -u
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)"
|
|
source "$REPO_DIR/benchmarks/std.sh"
|
|
|
|
checkfastwc
|
|
checkwc
|
|
|
|
for oracle in $ORACLES; do
|
|
select_oracle "$oracle" || exit 1
|
|
|
|
printf 'benchmarking %s wc vs fastwc: lines, file input (%s interleaved runs each, minimum kept)\n' \
|
|
"$BENCH_NAME" "$BENCH_REPS"
|
|
printf '%-28s %16s %24s %8s %s\n' 'test' 'wc' 'fastwc (µs)' 'ratio' 'status'
|
|
|
|
printf '%s\n' '--- lines ---'
|
|
if ! run_cases lines -l 10000 100000 1000000 10000000; then
|
|
exit 1
|
|
fi
|
|
|
|
printf '\nall %s lines benchmarks passed — fastwc was never slower than %s wc\n' \
|
|
"$BENCH_NAME" "$BENCH_NAME"
|
|
done
|
|
|
|
# The monsters stay coreutils-only (busybox/toybox through 1.1 GB is a
|
|
# spectator sport, not a benchmark), so switch back from the last oracle
|
|
# raced.
|
|
select_oracle coreutils || exit 1
|
|
printf '%s\n' '--- monster: 100M lines vs coreutils ---'
|
|
if ! run_cases lines -l 100000000; then
|
|
exit 1
|
|
fi
|
|
|
|
printf '%s\n' '--- monster: 1B lines, solo ---'
|
|
run_solo_case 1000000000 -l
|