#!/bin/bash
#
# This script is the heart of the bisection test. It assumes the good-objects
# and bad-objects directories have been created and populated. It runs three
# bisection tests:
# Test 1. use --file_args, and no pruning, which passes the object file list
# in a file, and stops as soon as it finds the first bad file.
# Test 2. do not use --file_args, and no pruning. The object files are passed
# directly on the command line; stop as soon as it finds the first
# bad file.
# Test 3. use --file_args and --prune. Pass the object file list in a file
# and run until it finds ALL the bad files (there are two of them).
#
SAVE_DIR=`pwd`
DIR=full_bisect_test
# Make sure you are running this script from the parent directory.
if [[ ! -f "${DIR}/setup.sh" ]] ; then
echo "Cannot find ${DIR}/setup.sh. You are running this from the wrong directory."
echo "You need to run this from toolchain-utils/binary_search_tool ."
exit 1
fi
# Run Test 1.
${DIR}/setup.sh
./binary_search_state.py --get_initial_items="${DIR}/get_initial_items.sh" \
--switch_to_good="${DIR}/switch_to_good.sh" \
--switch_to_bad="${DIR}/switch_to_bad.sh" \
--test_setup_script="${DIR}/test_setup.sh" \
--test_script="${DIR}/interactive_test.sh" \
--file_args &> /tmp/full_bisect_test.log
${DIR}/cleanup.sh
grep "Search complete. First bad version: " /tmp/full_bisect_test.log &> /dev/null
test_status=$?
if [[ ${test_status} -ne 0 ]] ; then
echo "Test 1 FAILED. See /tmp/full_bisect_test.log for details."
exit 1
else
echo "Test 1 passed."
fi
cd ${SAVE_DIR}
# Run Test 2.
${DIR}/setup.sh
./binary_search_state.py --get_initial_items="${DIR}/get_initial_items.sh" \
--switch_to_good="${DIR}/switch_to_good.sh" \
--switch_to_bad="${DIR}/switch_to_bad.sh" \
--test_setup_script="${DIR}/test_setup.sh" \
--test_script="${DIR}/interactive_test.sh" \
&> /tmp/full_bisect_test.log
${DIR}/cleanup.sh
grep "Search complete. First bad version: " /tmp/full_bisect_test.log &> /dev/null
test_status=$?
if [[ ${test_status} -ne 0 ]] ; then
echo "Test 2 FAILED. See /tmp/full_bisect_test.log for details."
exit 1
else
echo "Test 2 passed."
fi
cd ${SAVE_DIR}
# Run Test 3.
${DIR}/setup.sh
./binary_search_state.py --get_initial_items="${DIR}/get_initial_items.sh" \
--switch_to_good="${DIR}/switch_to_good.sh" \
--switch_to_bad="${DIR}/switch_to_bad.sh" \
--test_setup_script="${DIR}/test_setup.sh" \
--test_script="${DIR}/interactive_test.sh" \
--file_args --prune &> /tmp/full_bisect_test.log
${DIR}/cleanup.sh
grep "Bad items are: " /tmp/full_bisect_test.log | grep inorder_norecurse.o &> /dev/null
test_status_1=$?
grep "Bad items are: " /tmp/full_bisect_test.log | grep preorder_norecurse.o &> /dev/null
test_status_2=$?
if [[ ${test_status_1} -ne 0 ]] ; then
echo "Test 3 FAILED. See /tmp/full_bisect_test.log for details."
exit 1
elif [[ ${test_status_2} -ne 0 ]] ; then
echo "Test 3 FAILED. See /tmp/full_bisect_test.log for details."
exit 1
else
echo "Test 3 passed."
fi
# All tests passed!
exit 0