#!/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 $FLAGS -std=gnu++0x $CXXFLAGS $LINK"
LIBS="./libtestc++.a"
TESTS_FILE="testsuite_files_performance"

echo CXX is $CXX

for NAME in `cat $TESTS_FILE`
do
  RUN=true
  TESTNAME=$SRC_DIR/testsuite/$NAME
  FILE_NAME="`basename $NAME`"
  FILE_NAME="`echo $FILE_NAME | sed 's/.cc//g'`"

  # 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' $TESTNAME`
  do
    RUN=false
    echo $NAME $CYCLE
    EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
    $CXX -DNOTHREAD -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME
    if [ -f $EXE_NAME ]; then
      ./$EXE_NAME
    else
      echo "compile error:"
      echo "$CXX -DNOTHREAD -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME"
    fi
  done

  for CYCLE in `sed -n 's,.*\(TEST_[TB][0-9]*\)$,\1,p' $TESTNAME`
  do
    RUN=false
    echo $NAME $CYCLE thread
    EXE_NAME="`echo $FILE_NAME-$CYCLE.exe`"
    $CXX $THREAD_FLAG -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME
    if [ -f $EXE_NAME ]; then
      ./$EXE_NAME
    else
      echo "compile error:"
      echo "$CXX $THREAD_FLAG -D$CYCLE $TESTNAME $LIBS -o $EXE_NAME"
    fi
  done

  if $RUN; then
    echo $NAME
    EXE_NAME="`echo $FILE_NAME.exe`"
    $CXX $TESTNAME $LIBS -o $EXE_NAME
    if [ -f $EXE_NAME ]; then
      ./$EXE_NAME >& tmp.$FILE_NAME
    else
      echo "compile error:"
      echo "$CXX $TESTNAME $LIBS -o $EXE_NAME"
    fi
    if [ -s tmp.$FILE_NAME ]; then
	mv tmp.$FILE_NAME $FILE_NAME.xml
    fi
  fi
done

exit 0
