#!/usr/bin/env bash

# Script to do performance testing.

# Invocation 
# check_performance SRC_DIR BUILD_DIR

# 1: variables
#
SRC_DIR=$1
BUILD_DIR=$2

# Now that we've successfully translated the numerical option into
# a symbolic one, we can safely ignore it.
shift

# This has been true all along.  Found out about it the hard way...
case $BASH_VERSION in
    1*)  
	echo 'You need bash 2.x to run check_performance.  Exiting.'; 
	exit 1 ;;
    *)   ;;  
esac

flags_script=$BUILD_DIR/scripts/testsuite_flags
INCLUDES=`$flags_script --build-includes`
PCH_FLAGS=`$flags_script --cxxpchflags`
FLAGS=`$flags_script --cxxflags`
THREAD_FLAG='-pthread'
COMPILER=`$flags_script --build-cxx`
SH_FLAG="-Wl,--rpath -Wl,$BUILD_DIR/../../gcc \
         -Wl,--rpath -Wl,$BUILD_DIR/src/.libs"
ST_FLAG="-static"
LINK=$SH_FLAG
CXX="$COMPILER $INCLUDES $PCH_FLAGS $FLAGS $LINK"
TESTS_FILE="testsuite_files_performance"

for NAME in `cat $TESTS_FILE`
do
  RUN=true

  # TEST_S == single thread
  # TEST_B == do both single and multi-thread
  # TEST_T == multi-thread
  for CYCLE in `sed -n 's,.*\(TEST_[SB][0-9]*\)$,\1,p' $SRC_DIR/testsuite/$NAME`
  do
    RUN=false
    echo $NAME $CYCLE
    FILE_NAME="`basename $NAME`"
    FILE_NAME="`echo $FILE_NAME | sed 's/.cc//g'`"
    EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
    $CXX -DNOTHREAD -D$CYCLE $SRC_DIR/testsuite/$NAME -o $EXE_NAME
    if [ -f $EXE_NAME ]; then
      ./$EXE_NAME
    fi
  done

  for CYCLE in `sed -n 's,.*\(TEST_[TB][0-9]*\)$,\1,p' $SRC_DIR/testsuite/$NAME`
  do
    RUN=false
    echo $NAME $CYCLE thread
    FILE_NAME="`basename $NAME`"
    FILE_NAME="`echo $FILE_NAME | sed 's/.cc//g'`"
    EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
    $CXX $THREAD_FLAG -D$CYCLE $SRC_DIR/testsuite/$NAME -o $EXE_NAME
    if [ -f $EXE_NAME ]; then
      ./$EXE_NAME
    fi
  done

  if $RUN; then
    echo $NAME
    FILE_NAME="`basename $NAME`"
    EXE_NAME="`echo $FILE_NAME | sed 's/cc$/exe/'`"
    $CXX $SRC_DIR/testsuite/$NAME -o $EXE_NAME
    if [ -f $EXE_NAME ]; then
      ./$EXE_NAME
    fi
  fi
done

exit 0
