Skip to content

Commit

Permalink
Merge pull request #51 from epage/bench
Browse files Browse the repository at this point in the history
 perf: Benchmark 0.1
  • Loading branch information
epage committed Oct 25, 2019
2 parents 5e6e4b9 + ca78fed commit 8ef836a
Show file tree
Hide file tree
Showing 17 changed files with 1,353 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ keywords = ["development", "spelling"]
license = "MIT"
edition = "2018"

[[bin]]
name = "typos"
path = "src/main.rs"
doc = false

[badges]
travis-ci = { repository = "epage/typos" }
appveyor = { repository = "epage/typos" }
Expand Down
304 changes: 304 additions & 0 deletions benchsuite/benchsuite.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,304 @@
#!/usr/bin/env bash
set -e

current_dir=`dirname $(readlink -f $0)`

base_dir="/tmp/benchsuite"
if [[ $# -ge 1 ]]; then
base_dir=$1
fi
mkdir -p $base_dir
pushd $base_dir
base_dir=.


machine="$HOSTNAME"
if [[ $# -ge 2 ]]; then
machine=$2
fi

current_day=`date +%Y-%m-%d`
report_prefix=$current_dir/runs/$current_day-$machine
report_path=$report_prefix.md
mkdir -p `dirname $report_path`

echo "" > $report_path
echo "# Spell Check Shootout" >> $report_path
echo "" >> $report_path
echo "These are the results as of $current_day" >> $report_path
echo "" >> $report_path
echo "Command:" >> $report_path
echo "\`\`\`bash" >> $report_path
echo "$ $0 $base_dir $machine" >> $report_path
echo "\`\`\`" >> $report_path
echo "" >> $report_path

linux_clean_path=`$current_dir/fixtures/linux_clean.sh path $base_dir`
linux_clean_version=`$current_dir/fixtures/linux_clean.sh version $base_dir`

linux_built_path=`$current_dir/fixtures/linux_built.sh path $base_dir`
linux_built_version=`$current_dir/fixtures/linux_built.sh version $base_dir`

ripgrep_clean_path=`$current_dir/fixtures/ripgrep_clean.sh path $base_dir`
ripgrep_clean_version=`$current_dir/fixtures/ripgrep_clean.sh version $base_dir`

ripgrep_built_path=`$current_dir/fixtures/ripgrep_built.sh path $base_dir`
ripgrep_built_version=`$current_dir/fixtures/ripgrep_built.sh version $base_dir`

subtitles_en_path=`$current_dir/fixtures/subtitles_en.sh path $base_dir`
subtitles_en_version=`$current_dir/fixtures/subtitles_en.sh version $base_dir`

subtitles_en_small_path=`$current_dir/fixtures/subtitles_en_small.sh path $base_dir`
subtitles_en_small_version=`$current_dir/fixtures/subtitles_en_small.sh version $base_dir`

subtitles_ru_path=`$current_dir/fixtures/subtitles_ru.sh path $base_dir`
subtitles_ru_version=`$current_dir/fixtures/subtitles_ru.sh version $base_dir`

subtitles_ru_small_path=`$current_dir/fixtures/subtitles_ru_small.sh path $base_dir`
subtitles_ru_small_version=`$current_dir/fixtures/subtitles_ru_small.sh version $base_dir`
echo "" >> $report_path


echo "Spell checkers:" >> $report_path
rg_path=`$current_dir/uut/rg.sh path $base_dir`
rg_version=`$current_dir/uut/rg.sh version $base_dir`
if [[ -z $rg_path ]]; then
>&2 echo "Warning: rg uut is unavailable"
echo "- rg: N/A" >> $report_path
else
echo "- $rg_version" >> $report_path
fi

typos_path=`$current_dir/uut/typos.sh path $base_dir`
typos_version=`$current_dir/uut/typos.sh version $base_dir`
if [[ -z $typos_path ]]; then
>&2 echo "Warning: typos uut is unavailable"
echo "- typos: N/A" >> $report_path
else
echo "- $typos_version" >> $report_path
fi

misspell_rs_path=`$current_dir/uut/misspell_rs.sh path $base_dir`
misspell_rs_version=`$current_dir/uut/misspell_rs.sh version $base_dir`
if [[ -z $misspell_rs_path ]]; then
>&2 echo "Warning: misspell_rs uut is unavailable"
echo "- misspell_rs: N/A" >> $report_path
else
echo "- $misspell_rs_version" >> $report_path
fi

misspell_go_path=`$current_dir/uut/misspell_go.sh path $base_dir`
misspell_go_version=`$current_dir/uut/misspell_go.sh version $base_dir`
if [[ -z $misspell_go_path ]]; then
>&2 echo "Warning: misspell_go uut is unavailable"
echo "- misspell_go: N/A" >> $report_path
else
echo "- $misspell_go_version" >> $report_path
fi

codespell_path=`$current_dir/uut/codespell.sh path $base_dir`
codespell_version=`$current_dir/uut/codespell.sh version $base_dir`
if [[ -z $codespell_path ]]; then
>&2 echo "Warning: codespell uut is unavailable"
echo "- codespell: N/A" >> $report_path
else
echo "- $codespell_version" >> $report_path
fi

scspell_path=`$current_dir/uut/scspell.sh path $base_dir`
scspell_version=`$current_dir/uut/scspell.sh version $base_dir`
if [[ -z $scspell_path ]]; then
>&2 echo "Warning: scspell uut is unavailable"
echo "- scspell: N/A" >> $report_path
else
echo "- $scspell_version" >> $report_path
fi
echo "" >> $report_path


echo "## linux_clean fixture" >> $report_path
echo "" >> $report_path
if [[ -z $linux_clean_path ]]; then
>&2 echo "Warning: linux_clean fixture is unavailable"
echo "N/A" >> $report_path
else
echo "linux_clean: $linux_clean_version" >> $report_path
echo "" >> $report_path
rg_command=""
if [[ ! -z $rg_path ]]; then
rg_command="$rg_path bin $linux_clean_path"
fi
typos_command=""
if [[ ! -z $typos_path ]]; then
typos_command="$typos_path $linux_clean_path"
fi
misspell_rs_command=""
if [[ ! -z $misspell_rs_path ]]; then
misspell_rs_command="$misspell_rs_path $linux_clean_path"
fi
misspell_go_command=""
if [[ ! -z $misspell_go_path ]]; then
misspell_go_command="$misspell_go_path $linux_clean_path"
fi
# Skipping scspell, doesn't work on directories
codespell_command=""
if [[ ! -z $codespell_path ]]; then
codespell_command="$codespell_path $linux_clean_path"
fi
hyperfine --warmup 1 -i --export-json $report_prefix-rg.json --export-markdown $report_prefix-rg.md "$rg_command" "$typos_command" "$misspell_rs_command" "$misspell_go_command" "$codespell_command"
cat $report_prefix-rg.md >> $report_path
fi
echo "" >> $report_path


echo "## linux_built fixture" >> $report_path
echo "" >> $report_path
if [[ -z $linux_built_path ]]; then
>&2 echo "Warning: linux_built fixture is unavailable"
echo "N/A" >> $report_path
else
echo "linux_built: $linux_built_version" >> $report_path
echo "" >> $report_path
rg_command=""
if [[ ! -z $rg_path ]]; then
rg_command="$rg_path bin $linux_built_path"
fi
typos_command=""
if [[ ! -z $typos_path ]]; then
typos_command="$typos_path $linux_built_path"
fi
misspell_rs_command=""
if [[ ! -z $misspell_rs_path ]]; then
misspell_rs_command="$misspell_rs_path $linux_built_path"
fi
misspell_go_command=""
if [[ ! -z $misspell_go_path ]]; then
misspell_go_command="$misspell_go_path $linux_built_path"
fi
# Skipping scspell, doesn't work on directories
codespell_command=""
if [[ ! -z $codespell_path ]]; then
codespell_command="$codespell_path $linux_built_path"
fi
hyperfine --warmup 1 -i --export-json $report_prefix-rg.json --export-markdown $report_prefix-rg.md "$rg_command" "$typos_command" "$misspell_rs_command" "$misspell_go_command" "$codespell_command"
cat $report_prefix-rg.md >> $report_path
fi
echo "" >> $report_path


if [[ -z $subtitles_en_path ]]; then
>&2 echo "Warning: subtitles_en fixture is unavailable"
fi


if [[ -z $subtitles_en_small_path ]]; then
>&2 echo "Warning: subtitles_en_small fixture is unavailable"
fi


echo "## subtitles_ru_small fixture" >> $report_path
echo "" >> $report_path
if [[ -z $subtitles_ru_small_path ]]; then
>&2 echo "Warning: subtitles_ru_small fixture is unavailable"
echo "N/A" >> $report_path
else
echo "subtitles_ru_small: $subtitles_ru_small_version" >> $report_path
echo "" >> $report_path
rg_command=""
if [[ ! -z $rg_path ]]; then
rg_command="$rg_path bin $subtitles_ru_small_path"
fi
typos_command=""
if [[ ! -z $typos_path ]]; then
typos_command="$typos_path $subtitles_ru_small_path"
fi
misspell_rs_command=""
if [[ ! -z $misspell_rs_path ]]; then
misspell_rs_command="$misspell_rs_path $subtitles_ru_small_path"
fi
misspell_go_command=""
if [[ ! -z $misspell_go_path ]]; then
misspell_go_command="$misspell_go_path $subtitles_ru_small_path"
fi
scspell_command=""
if [[ ! -z $scspell_path ]]; then
scspell_command="$scspell_path $subtitles_ru_small_path"
fi
codespell_command=""
if [[ ! -z $codespell_path ]]; then
codespell_command="$codespell_path $subtitles_ru_small_path"
fi
hyperfine --warmup 1 -i --export-json $report_prefix-rg.json --export-markdown $report_prefix-rg.md "$rg_command" "$typos_command" "$misspell_rs_command" "$misspell_go_command" "$scspell_command" "$codespell_command"
cat $report_prefix-rg.md >> $report_path
fi
echo "" >> $report_path


echo "## ripgrep_clean fixture" >> $report_path
echo "" >> $report_path
if [[ -z $ripgrep_clean_path ]]; then
>&2 echo "Warning: ripgrep_clean fixture is unavailable"
echo "N/A" >> $report_path
else
echo "ripgrep_clean: $ripgrep_clean_version" >> $report_path
echo "" >> $report_path
rg_command=""
if [[ ! -z $rg_path ]]; then
rg_command="$rg_path bin $ripgrep_clean_path"
fi
typos_command=""
if [[ ! -z $typos_path ]]; then
typos_command="$typos_path $ripgrep_clean_path"
fi
misspell_rs_command=""
if [[ ! -z $misspell_rs_path ]]; then
misspell_rs_command="$misspell_rs_path $ripgrep_clean_path"
fi
misspell_go_command=""
if [[ ! -z $misspell_go_path ]]; then
misspell_go_command="$misspell_go_path $ripgrep_clean_path"
fi
# Skipping scspell, doesn't work on directories
codespell_command=""
if [[ ! -z $codespell_path ]]; then
codespell_command="$codespell_path $ripgrep_clean_path"
fi
hyperfine --warmup 1 -i --export-json $report_prefix-rg.json --export-markdown $report_prefix-rg.md "$rg_command" "$typos_command" "$misspell_rs_command" "$misspell_go_command" "$codespell_command"
cat $report_prefix-rg.md >> $report_path
fi
echo "" >> $report_path


echo "## ripgrep_built fixture" >> $report_path
echo "" >> $report_path
if [[ -z $ripgrep_built_path ]]; then
>&2 echo "Warning: ripgrep_built fixture is unavailable"
echo "N/A" >> $report_path
else
echo "ripgrep_built: $ripgrep_built_version" >> $report_path
echo "" >> $report_path
rg_command=""
if [[ ! -z $rg_path ]]; then
rg_command="$rg_path bin $ripgrep_built_path"
fi
typos_command=""
if [[ ! -z $typos_path ]]; then
typos_command="$typos_path $ripgrep_built_path"
fi
misspell_rs_command=""
if [[ ! -z $misspell_rs_path ]]; then
misspell_rs_command="$misspell_rs_path $ripgrep_built_path"
fi
misspell_go_command=""
if [[ ! -z $misspell_go_path ]]; then
misspell_go_command="$misspell_go_path $ripgrep_built_path"
fi
# Skipping scspell, doesn't work on directories
codespell_command=""
if [[ ! -z $codespell_path ]]; then
codespell_command="$codespell_path $ripgrep_built_path"
fi
hyperfine --warmup 1 -i --export-json $report_prefix-rg.json --export-markdown $report_prefix-rg.md "$rg_command" "$typos_command" "$misspell_rs_command" "$misspell_go_command" "$codespell_command"
cat $report_prefix-rg.md >> $report_path
fi
echo "" >> $report_path
80 changes: 80 additions & 0 deletions benchsuite/fixtures/linux_built.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/usr/bin/env bash
# Pre-reqs:
# - git
# - able to build a Linux kernel
# - apt install libelf-dev, bc
set -e

FIXTURE_DIR="linux_built"

function cpucount() {
echo `grep -c ^processor /proc/cpuinfo`
}

if [[ $# -eq 0 ]]; then
exit 1
fi
command=$1

base_dir="/tmp/benchsuite"
if [[ $# -ge 2 ]]; then
base_dir=$2
fi

current_dir=`dirname $(readlink -f $0)`
root_dir="${base_dir}/$FIXTURE_DIR"
out_file="$root_dir"
log_path="${base_dir}/$FIXTURE_DIR.log"

function path() {
if [[ -e $out_file ]]; then
echo $out_file
fi
}

function clear() {
rm -Rf ${root_dir} ${log_path}
}

function download() {
if [[ ! -e $out_file ]]; then
echo "Downloading $FIXTURE_DIR" >> ${log_path}
in_file=`$current_dir/linux_clean.sh download $base_dir`
cp -R $in_file $out_file
# We want to build the kernel because the process of building it produces
# a lot of junk in the repository that a search tool probably shouldn't
# touch.
pushd $root_dir >> ${log_path}
make defconfig >> ${log_path}
make -j $(cpucount) >> ${log_path}
popd >> ${log_path}
fi
}

function version() {
if [[ -e $out_file ]]; then
pushd $root_dir >> ${log_path}
echo "linux `git rev-parse HEAD`"
popd >> ${log_path}
fi
}

case $command in
path)
echo $(path)
;;
clear)
echo $(clear)
;;
version)
echo $(version)
;;
download)
download
echo $(path)
;;
*)
>&2 echo "Invalid command: $command"
exit 1
;;
esac

0 comments on commit 8ef836a

Please sign in to comment.