#!/bin/bash set -e set -o pipefail prefix_with() ( local PREFIX=("$@") while read line do echo "${PREFIX[@]}" "$line" done ) progress() ( local EXPECTED_LINES=$1 local I=0 echo "0/$EXPECTED_LINES (0%)" >&2 while read line do echo "$line" I="$[$I + 1]" echo "$I/$EXPECTED_LINES ($[100 * $I / $EXPECTED_LINES]%)" >&2 done ) print_stats() ( local TOTAL=0 local N=0 for VALUE in "$@" do TOTAL="$(echo $TOTAL + $VALUE | bc -l)" N="$[$N + 1]" done if [[ $N == 0 ]] then echo "N/A ()" else echo "$(echo $TOTAL / $N | bc -l) ($@)" fi ) BASEDIR="$PWD" COMPILERS=(g++ clang++) # NUM_ITERATIONS = ITERATIONS_FACTOR/NUM_BINDINGS ITERATIONS_FACTOR="$[400 * 1000 * 1000]" # Must be multiples of 10 NUM_BINDINGS_FOR_RUNTIME_TESTS=(100 1000) # Must be multiples of 5 NUM_BINDINGS_FOR_COMPILE_TESTS=(20 80 320) NUM_LINES="$[${#COMPILERS[@]} * (${#NUM_BINDINGS_FOR_RUNTIME_TESTS[@]} * 3 + ${#NUM_BINDINGS_FOR_COMPILE_TESTS[@]})]" # All result lines are of the form: # (