#!/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