| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | # set -e |
| 4 | |
| 5 | die () { |
| 6 | echo "$1" >&2 |
| 7 | exit 1 |
| 8 | } |
| 9 | |
| 10 | if $(which gtime) --version >/dev/null 2>&1; then |
| 11 | time=$(which gtime) |
| 12 | elif $(which gnutime) --version >/dev/null 2>&1; then |
| 13 | time=$(which gnutime) |
| 14 | elif $(which time) --version 2>&1 | grep -q GNU; then |
| 15 | time=$(which time) |
| 16 | else |
| 17 | die 'Can'\''t find GNU time' |
| 18 | fi |
| 19 | |
| 20 | |
| 21 | minTime="75.0" |
| 22 | |
| 23 | bench="string-concat vector-concat" |
| 24 | |
| 25 | cd tests |
| 26 | for prog in $bench; do |
| 27 | case "$prog" in |
| 28 | "fxp") |
| 29 | continue ;; |
| 30 | esac |
| 31 | |
| 32 | ( cat $prog.sml ; echo "val _ = Main.doit (valOf (Int.fromString (hd (CommandLine.arguments ()))))" ) > $prog.main.sml |
| 33 | mlton -output $prog $prog.main.sml 1>/dev/null 2>/dev/null |
| 34 | |
| 35 | n=0 |
| 36 | t=0 |
| 37 | |
| 38 | while [ "$(echo "$t < $minTime" | bc)" = "1" ]; do |
| 39 | if [ $n -eq 0 ]; then |
| 40 | n=1 |
| 41 | m=1 |
| 42 | k=1 |
| 43 | elif [ $n -lt $m ]; then |
| 44 | n=$(($n+$k)) |
| 45 | else |
| 46 | m=$((2*$m)) |
| 47 | if [ $m -lt 8 ]; then |
| 48 | n=$m |
| 49 | else |
| 50 | k=$(( ($m-$n) / 2 )) |
| 51 | n=$(($n+$k)) |
| 52 | fi |
| 53 | fi |
| 54 | $time -o $prog.time --format "%U + %S" ./$prog $n 1>/dev/null 2>/dev/null |
| 55 | t=$(cat $prog.time | grep -v "Command exited" | bc) |
| 56 | s=$(grep "Command exited" $prog.time) |
| 57 | if [ ! -z "$s" ]; then |
| 58 | s="; $s " |
| 59 | break |
| 60 | fi |
| 61 | done |
| 62 | |
| 63 | echo "(\"$prog\", $n):: (* $t sec $s*)" |
| 64 | |
| 65 | rm $prog $prog.main.sml $prog.time |
| 66 | |
| 67 | done |