#!/bin/bash set -eu set -o pipefail function get_time { python3 -c 'import time; print(time.time())' } function subtract { left="$1" right="$2" echo "$left - $right" | bc } for i in 10 100 1,000 10,000 100,000 1,000,000 # 10,000,000 100,000,000 do echo sieve cpython $i 1>&2 time0=$(get_time) if ! output=$(set -eu; /usr/local/cpython-3.6/bin/python3 ./sieve $i 2>&1) then echo "Run failed:" 1>&2 echo "$output" 1>&2 exit 1 else time1=$(get_time) # shellcheck disable=SC2046,SC2086 echo $(subtract $time1 $time0) seconds fi echo sieve pypy $i 1>&2 time0=$(get_time) if ! output=$(set -eu; ./sieve $i 2>&1) then echo "Run failed:" 1>&2 echo "$output" 1>&2 exit 1 else time1=$(get_time) # shellcheck disable=SC2046,SC2086 echo $(subtract $time1 $time0) seconds fi echo sieve nuitka3 $i 1>&2 time0=$(get_time) if ! output=$(set -eu; ./sieve.exe $i 2>&1) then echo "Run failed:" 1>&2 echo "$output" 1>&2 exit 1 else time1=$(get_time) # shellcheck disable=SC2046,SC2086 echo $(subtract $time1 $time0) seconds fi echo sieve-mp micropython $i 1>&2 time0=$(get_time) # If this segfaults, it's probably because heapsize is too big. if ! output=$(set -eu; /usr/local/micropython-git-2017-06-16/bin/micropython -X heapsize=4000M ./sieve-mp $i 2>&1) then echo "Run failed:" 1>&2 echo "$output" 1>&2 exit 1 else time1=$(get_time) # shellcheck disable=SC2046,SC2086 echo $(subtract $time1 $time0) seconds fi echo numpy-sieve $i 1>&2 time0=$(get_time) if ! output=$(set -eu; ./numpy-sieve $i 2>&1) then echo "Run failed:" 1>&2 echo "$output" 1>&2 exit 1 else time1=$(get_time) # shellcheck disable=SC2046,SC2086 echo $(subtract $time1 $time0) seconds fi echo Sieve.java $i 1>&2 time0=$(get_time) if ! output=$(set -eu; java Sieve $i 2>&1) then echo "Run failed:" 1>&2 echo "$output" 1>&2 exit 1 else time1=$(get_time) # shellcheck disable=SC2046,SC2086 echo $(subtract $time1 $time0) seconds fi echo 1>&2 done