#! /bin/bash # # run-nrtest.sh - Runs numerical regression test # # Date Created: 10/16/2017 # # Author: Michael E. Tryby # US EPA - ORD/NRMRL # # Arguments: # 1 - REF build identifier # 2 - SUT build identifier # 3 - relative path to location there test suite is staged # run-nrtest() { return_value=0 test_suite_path=$4 nrtest_execute_cmd="nrtest execute" sut_app_path="apps/epanet-$3.json" tests="tests/examples tests/exeter tests/large tests/network_one tests/small tests/tanks tests/valves" sut_output_path="benchmark/epanet-$3" nrtest_compare_cmd="nrtest compare" ref_output_path="benchmark/epanet-$2" rtol_value=0.01 atol_value=0.0001 # change current directory to test_suite cd ${test_suite_path} # clean test benchmark results rm -rf ${test_output_path} echo INFO: Creating test benchmark nrtest_command="${nrtest_execute_cmd} ${sut_app_path} ${tests} -o ${sut_output_path}" echo INFO: "$nrtest_command" return_value=$( $nrtest_command ) if [ $1 = 'true' ]; then echo echo INFO: Comparing test and ref benchmarks nrtest_command="${nrtest_compare_cmd} ${sut_output_path} ${ref_output_path} --rtol ${rtol_value} --atol ${atol_value} --output benchmark\receipt.json" echo INFO: "$nrtest_command" return_value=$( $nrtest_command ) fi return $return_value } print_usage() { echo " " echo "run-nrtest.sh - generates artifacts for SUT and performes benchmark comparison " echo " " echo "options:" echo "-c don't compare SUT and REF artifacts" echo "-r ref_build id REF build identifier" echo "-s sut build id SUT build identifier" echo "-t test_path relative path to location where test suite is staged" echo " " } # Default option values compare='true' ref_build_id='unknown' sut_build_id='local' test_path='nrtestsuite' while getopts "cr:s:t:" flag; do case "${flag}" in c ) compare='false' ;; r ) ref_build_id=${OPTARG} ;; s ) sut_build_id=${OPTARG} ;; t ) test_path="${OPTARG}" ;; \? ) print_usage exit 1 ;; esac done shift $(($OPTIND - 1)) # determine ref_build_id from manifest file if [[ $ref_build_id == 'unknown' ]] && [[ $compare == 'true' ]]; then description=(`cat ${test_path}/manifest.json | jq '.Application.description | splits(" ")'`) ref_build_id=${description[1]//\"/} fi # Invoke command run_command="run-nrtest ${compare} ${ref_build_id} ${sut_build_id} ${test_path}" echo INFO: "$run_command" $run_command