#!/bin/bash -u
#
# This script is one of the required scripts that get passed to
# binary_search_state.py.  It's job is to test the executable that
# was generated by mixing/matching good & bad object files, and determine
# whether the resulting binary is good or bad.
#
# In this particular case, the generated binary is 'bin-trees'.  This
# script runs the binary, captures its output, and compares the output
# to a file containg the correct (good) output, and three files containing
# what the bad output might look like, depending on if one of the two
# possile bad .o files was used, or if both bad .o files were used.
#
# If the output matches the known good output, this returns 0.
# If the output matches any known bad output, this returns 1.
# If the output does not match the good or bad outputs, this returns 125.
#

source full_bisect_test/common.sh

full_bisect_test/bin-trees > full_bisect_test/temp_output.txt

diff full_bisect_test/temp_output.txt full_bisect_test/good-output.txt &> /dev/null
retval=$?

if [[ ${retval} -eq 0 ]]; then
  rm -f full_bisect_test/temp_output.txt
  exit 0
fi

diff full_bisect_test/temp_output.txt full_bisect_test/bad-output-1.txt &> /dev/null
retval=$?

if [[ ${retval} -eq 0 ]]; then
  rm -f full_bisect_test/temp_output.txt
  exit 1
else
  diff full_bisect_test/temp_output.txt full_bisect_test/bad-output-2.txt &> /dev/null
  retval=$?
  if [[ ${retval} -eq 0 ]]; then
    rm -f full_bisect_test/temp_output.txt
    exit 1
  else
    diff full_bisect_test/temp_output.txt full_bisect_test/bad-output-3.txt &> /dev/null
    retval=$?
    if [[ ${retval} -eq 0 ]]; then
      rm -f full_bisect_test/temp_output.txt
      exit 1
    fi
  fi
fi

rm -f full_bisect_test/temp_output.txt
exit 125


