#!/bin/bash
clear
TIMEOUT=0;

while getopts t:s: option ; do
	case "${option}"
	in
		t) TIMEOUT=${OPTARG};;
		s) MAXSIZE=${OPTARG};;
	esac
done

echo "Running standard benchmark tests"

time=$(date +%Y-%m-%dT%H-%M)
result_folder="results/$time"
logs_folder="logs/$time"
mkdir -p $logs_folder

################################################################################

echo "compile v0.1..."
cd v0.1_trimble_seq_cpp
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v0.1.txt
cd ..

echo "compile v0.2..."
cd v0.2_trimble_par_cpp
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v0.2.txt
cd ..

echo "compile v1..."
cd v1_trimble_seq_c
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v1.txt
cd ..

echo "compile v2..."
cd v2_trimble_par_c
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v2.txt
cd ..

echo "compile v3..."
cd v3_iterative_seq_c
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v3.txt
cd ..

echo "compile v4..."
cd v4_iterative_par_c
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v4.txt
cd ..

echo "compile v5..."
cd v5_iterative_gpu_c
make clean > /dev/null
make | ts 2>&1 >> ../$logs_folder/compilation_log_v5.txt
cd ..

################################################################################


output_file="$result_folder/total.csv"
file_v01="$result_folder/result_cpp_v01.csv"
file_v02="$result_folder/result_cpp_v02.csv"
file_v1="$result_folder/result_c_v1.csv"
file_v2="$result_folder/result_c_v2.csv"
file_v3="$result_folder/result_c_v3.csv"
file_v4="$result_folder/result_c_v4.csv"
file_v5="$result_folder/result_c_v5.csv"

mkdir -p $result_folder
echo "bench,file1,file2,v0.1,v0.2,v1,v2,v3,v4,v5" >  $output_file
echo "bench,file1,file2,sol_size,time" > $file_v01
echo "bench,file1,file2,sol_size,time" >  $file_v02
echo "bench,file1,file2,sol_size,time" >  $file_v1
echo "bench,file1,file2,sol_size,time" >  $file_v2
echo "bench,file1,file2,sol_size,time" >  $file_v3
echo "bench,file1,file2,sol_size,time" >  $file_v4
echo "bench,file1,file2,sol_size,time" >  $file_v5

counter=0;
for dir in utils/mcs-instances/*/*/* ; do
	[ -e "$dir" ] || continue
	echo $dir
	for a in $(ls $dir/*.A*); do
		b=$(echo $a | tr A B)
		nameA=$(basename $a)
		nameB=$(basename $b)
		graph_size=$(echo $nameA | cut -d "." -f 1 | cut -d "s" -f 3)
		if [[ $graph_size -le $MAXSIZE ]] ; then
			####
			echo -n "v0.1 "
			result_v01=$(./v0.1_trimble_seq_cpp/v0.1_trimble_seq_cpp -c -t $TIMEOUT min_max $a $b | grep -e ">>>")
			s_v01=$(echo $result_v01 | tr -s ' ' | cut -d " " -f 2)
			t_v01=$(echo $result_v01 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v01,$t_v01" >> $file_v01
			####
			echo -n "v0.2 "
			result_v02=$(./v0.2_trimble_par_cpp/v0.2_trimble_par_cpp -c -t $TIMEOUT min_max $a $b | grep -e ">>>")
			s_v02=$(echo $result_v02 | tr -s ' ' | cut -d " " -f 2)
			t_v02=$(echo $result_v02 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v02,$t_v02" >> $file_v02
			####
			echo -n "v1 "
			result_v1=$(./v1_trimble_seq_c/v1_trimble_seq_c -c -t $TIMEOUT $a $b | grep -e ">>>")
			s_v1=$(echo $result_v1 | tr -s ' ' | cut -d " " -f 2)
			t_v1=$(echo $result_v1 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v1,$t_v1" >> $file_v1
			####
			echo -n "v2 "
			result_v2=$(./v2_trimble_par_c/v2_trimble_par_c -c -t $TIMEOUT $a $b | grep -e ">>>")
			s_v2=$(echo $result_v2 | tr -s ' ' | cut -d " " -f 2)
			t_v2=$(echo $result_v2 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v2,$t_v2" >> $file_v2
			####
			echo -n "v3 "
			result_v3=$(./v3_iterative_seq_c/v3_iterative_seq_c -c -t $TIMEOUT $a $b | grep -e ">>>")
			s_v3=$(echo $result_v3 | tr -s ' ' | cut -d " " -f 2)
			t_v3=$(echo $result_v3 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v3,$t_v3" >> $file_v3
			####
			echo -n "v4 "
			result_v4=$(./v4_iterative_par_c/v4_iterative_par_c -c -t $TIMEOUT $a $b | grep -e ">>>")
			s_v4=$(echo $result_v4 | tr -s ' ' | cut -d " " -f 2)
			t_v4=$(echo $result_v4 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v4,$t_v4" >> $file_v4
			echo "v5 "
			result_v5=$(./v5_iterative_gpu_c/v5_iterative_gpu_c -c -t $TIMEOUT $a $b | grep -e ">>>")
			s_v5=$(echo $result_v5 | tr -s ' ' | cut -d " " -f 2)
			t_v5=$(echo $result_v5 | tr -s ' ' | cut -d " " -f 4)
			echo "$counter,$nameA,$nameB,$s_v5,$t_v5" >> $file_v5

			echo "Result processing..."
			echo "$counter,$nameA,$nameB,$t_v01,$t_v02,$t_v1,$t_v2,$t_v3,$t_v4,$t_v5" | tee -a $output_file
			((counter++))
		fi
	done
done
done
