#!/bin/bash

function upstream {
    if test "$1" = "mem"; then
      LD_LIBRARY_PATH="$HOME/local-glib-upstream/lib" \
        GDEBUG=gc-friendly G_SLICE=always-malloc \
	valgrind --tool=massif --massif-out-file=mem.upstream-single.$2.$3 \
	./test-single $2 $3
  else
    LD_LIBRARY_PATH="$HOME/local-glib-upstream/lib" ./test-single $2 $3
  fi
}

function mine {
    if test "$1" = "mem"; then
      LD_LIBRARY_PATH="$HOME/local-glib-persistent/lib" \
        GDEBUG=gc-friendly G_SLICE=always-malloc \
	valgrind --tool=massif --massif-out-file=mem.persistent-single.$2.$3 \
	./test-single $2 $3
      LD_LIBRARY_PATH="$HOME/local-glib-persistent/lib" \
        GDEBUG=gc-friendly G_SLICE=always-malloc \
	valgrind --tool=massif --massif-out-file=mem.persistent-few.$2.$3 \
	./test-few $2 $3
      LD_LIBRARY_PATH="$HOME/local-glib-persistent/lib" \
        GDEBUG=gc-friendly G_SLICE=always-malloc \
	valgrind --tool=massif --massif-out-file=mem.persistent-many.$2.$3 \
	./test-many $2 $3
  else
    LD_LIBRARY_PATH="$HOME/local-glib-persistent/lib" ./test-single $2 $3
    LD_LIBRARY_PATH="$HOME/local-glib-persistent/lib" ./test-few $2 $3
    LD_LIBRARY_PATH="$HOME/local-glib-persistent/lib" ./test-many $2 $3
  fi
}

function go {
    local TYPE=$1
    local COUNT=$2
    local SEED=$3
    local N=$4
    for i in $(seq $COUNT); do
	echo "Testing Upstream (N=$N)"
	S=$[$SEED+1771]
	upstream $TYPE $S $N
	if test $TYPE = speed; then
	    S=$[$S+1771]
	    upstream $TYPE $S $N
	    S=$[$S+1771]
	    upstream $TYPE $S $N
	fi
  
	echo "Testing Persistent (N=$N)"
	S=$[$SEED+1771]
	mine $TYPE $S $N
	if test $TYPE = speed; then
	    S=$[$S+1771]
	    mine $TYPE $S $N
	    S=$[$S+1771]
	    mine $TYPE $S $N
	fi
  
	N=$[$N+100000*(10/$COUNT)]
	SEED=$[$SEED+(3*1771)]
    done
}

SEED=$RANDOM
echo Seed: $SEED

echo Testing Heap Usage
go mem 10 $SEED 1000000

echo Testing Speed
go speed 10 $SEED 1000000
