#!/bin/bash
clear
TIMEOUT=0;

cd utils
make
cd ..

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

echo "Running ladder 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 >> ../$logs_folder/compilation_log_v0.1.txt
cd ..

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

echo "compile v1..."
cd v1_trimble_seq
make clean > /dev/null
make | ts >> ../$logs_folder/compilation_log_v1.txt
cd ..

echo "compile v2..."
cd v2_trimble_multi
make clean > /dev/null
make | ts >> ../$logs_folder/compilation_log_v2.txt
cd ..

echo "compile v3..."
cd v3_iterative_seq
make clean > /dev/null
make | ts >> ../$logs_folder/compilation_log_v3.txt
cd ..

echo "compile v4..."
cd v4_iterative_multi
make clean > /dev/null
make | ts >> ../$logs_folder/compilation_log_v4.txt
cd ..

echo "compile v5..."
cd v5_iterative_gpu
make clean > /dev/null
make | ts >> ../$logs_folder/compilation_log_v5.txt
cd ..

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

output_file="$result_folder/total_lad.csv"
file_v01="$result_folder/result_cpp_v01_lad.csv"
file_v02="$result_folder/result_cpp_v02_lad.csv"
file_v1="$result_folder/result_c_v1_lad.csv"
file_v2="$result_folder/result_c_v2_lad.csv"
file_v3="$result_folder/result_c_v3_lad.csv"
file_v4="$result_folder/result_c_v4_lad.csv"
file_v5="$result_folder/result_c_v5_lad.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


instances="00 01 02 03 04 05 06 07 08 09"
counter=0;
for dir in utils/ladder_files/*/* ; 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)
			####
			echo -n "v0.1 "
			result_v01=$(./v0.1_trimble_seq_cpp/v0.1_trimble_seq_cpp -lc -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_multi_cpp/v0.2_trimble_multi_cpp -lc -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/v1_trim_seq -lc -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_multi/v2_trim_multi -lc -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/v3_it_seq -lc -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_multi/v4_it_multi -lc -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/v5_it_gpu -lc -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++))
		done
	done
done
