#!/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++11 $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'`"
  ORIG_CXX="$CXX"
  CXX="$CXX `sed -n 's/.* STD=/-std=/p' $TESTNAME`"

  # 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
  CXX="$ORIG_CXX"
done

exit 0
