#!/bin/bash

#cd build

RED='\033[1;31m'
GREEN='\033[1;32m'
ORANGE='\033[1;33m'
PINK='\033[1;95m'
NC='\033[0m' # No Color

function print_output {
    if [ $1 -eq 0 ]; then
        echo -e "$2 ${GREEN}OK${NC}"
    elif [ $1 -eq 1 ]; then
        echo -e "$2 ${RED}FATAL ERROR${NC}"
    elif [ $1 -eq 2 ] || [ $1 -eq 10 ]; then
        echo -e "$2 ${PINK}CUDNN ERROR${NC}"
    elif [ $1 -eq 4 ] || [ $1 -eq 12 ]; then
        echo -e "$2 ${PINK}TENSORRT ERROR${NC}"
    elif [ $1 -eq 8 ]; then
        echo -e "$2 ${PINK}CUDNN vs TENSORRT ERROR${NC}"
    elif [ $1 -eq 6 ]; then
        echo -e "$2 ${PINK}CUDNN & TENSORTRT ERROR${NC}"
    elif [ $1 -eq 14 ]; then
        echo -e "$2 ${PINK}ERROR FOR EVERY CHECK${NC}"
    else
        echo -e "$2 ${RED}NOT OKAY (OPENCV maybe)${NC}"
    fi 

} 

out_dir=results
out_file=results.log
rm -rf $out_dir/
mkdir -p $out_dir

function test_net {
    ./test_$1 &> $out_dir/$1_${TKDNN_MODE}_build_$out_file
    print_output $? $1
    ./test_rtinference $1*.rt 1 &> $out_dir/$1_${TKDNN_MODE}_inference_batch1_$out_file
    print_output $? "infer $1"
    ./test_rtinference $1*.rt $TKDNN_BATCHSIZE &> $out_dir/$1_${TKDNN_MODE}_inference_batch${TKDNN_BATCHSIZE}_$out_file
    print_output $? "batched $1"
}


# modes=( 1 ) # only FP32
modes=( 1 2 ) # FP32 and FP16
# modes=( 1 2 3 ) # FP32, FP16 and INT8

for i in "${modes[@]}"
do
    rm -f *rt
    if [ $i -eq 1 ]
    then
        export TKDNN_MODE=FP32
        echo -e "${ORANGE}Test FP32${NC}"
    fi
    if [ $i -eq 2 ]
    then
        export TKDNN_MODE=FP16
        echo -e "${ORANGE}Test FP16${NC}"
    fi
    if [ $i -eq 3 ]
    then
        export TKDNN_MODE=INT8
        export TKDNN_CALIB_LABEL_PATH=../demo/COCO_val2017/all_labels.txt
        export TKDNN_CALIB_IMG_PATH=../demo/COCO_val2017/all_images.txt
        echo -e "${ORANGE}Test INT8${NC}"
	fi

    export TKDNN_BATCHSIZE=2
    echo -e "${ORANGE}Batch $TKDNN_BATCHSIZE ${NC}"
    
    test_net mnist    
    # ./test_imuodom &>> $out_file
    # print_output $? imuodom

    test_net yolo4
    # test_net yolo4_320
    # test_net yolo4_320_coco2
    # test_net yolo4_512
    # test_net yolo4_608
    # test_net yolo4-csp
    # test_net yolo4x
    # test_net yolo4_berkeley
    # test_net yolo4_berkeley_f1
    # test_net yolo4tiny
    # test_net yolo4tiny_512
    # test_net yolo3
    # test_net yolo3_berkeley
    # test_net yolo3_coco4
    # test_net yolo3_flir
    # test_net yolo3_512
    # test_net yolo3tiny
    # test_net yolo3tiny_512
    # test_net yolo2
    # test_net yolo2_voc
    # test_net yolo2tiny
    # test_net csresnext50-panet-spp
    # test_net csresnext50-panet-spp_berkeley
    # test_net resnet101_cnet
    # test_net dla34_cnet
    # test_net dla34_cnet3d
    # test_net mobilenetv2ssd
    # test_net mobilenetv2ssd512
    # test_net bdd-mobilenetv2ssd
    # test_net dla34_ctrack
    # test_net shelfnet
    # test_net shelfnet_berkeley
done

echo "If errors occured, check logfiles in directory: $out_dir" 
