11debfc3dSmrg#!/bin/sh 21debfc3dSmrg# This script automatically test the given tool with the tool's test cases, 31debfc3dSmrg# reporting anything of interest. 41debfc3dSmrg 51debfc3dSmrg# Written by Mike Stump <mrs@cygnus.com> 61debfc3dSmrg# Subdir comparison added by Quentin Neill <quentin.neill@amd.com> 71debfc3dSmrg 81debfc3dSmrgusage() 91debfc3dSmrg{ 101debfc3dSmrg if [ -n "$1" ] ; then 111debfc3dSmrg echo "$0: Error: $1" >&2 121debfc3dSmrg echo >&2 131debfc3dSmrg fi 141debfc3dSmrg cat >&2 <<EOUSAGE 151debfc3dSmrgUsage: $0 [-strict] PREVIOUS CURRENT 161debfc3dSmrg 171debfc3dSmrgCompare the PREVIOUS and CURRENT test case .sum files, reporting anything of interest. 181debfc3dSmrg 191debfc3dSmrg If PREVIOUS and CURRENT are directories, find and compare any *.sum files. 201debfc3dSmrg 211debfc3dSmrg Unless -strict is given, these discrepancies are not counted as errors: 221debfc3dSmrg missing/extra .sum files when comparing directories 231debfc3dSmrg tests that failed in PREVIOUS but pass in CURRENT 241debfc3dSmrg tests that were not in PREVIOUS but appear in CURRENT 251debfc3dSmrg tests in PREVIOUS that are missing in CURRENT 261debfc3dSmrg 271debfc3dSmrg Exit with the following values: 281debfc3dSmrg 0 if there is nothing of interest 291debfc3dSmrg 1 if there are errors when comparing single test case files 301debfc3dSmrg N for the number of errors found when comparing directories 311debfc3dSmrgEOUSAGE 321debfc3dSmrg exit 2 331debfc3dSmrg} 341debfc3dSmrg 351debfc3dSmrgexport LC_ALL=C 361debfc3dSmrg 371debfc3dSmrgtool=gxx 381debfc3dSmrg 39a2dc1f3fSmrgTMPDIR=${TMPDIR:-/tmp} 40a2dc1f3fSmrgtmp1=$TMPDIR/$tool-testing.$$a 41a2dc1f3fSmrgtmp2=$TMPDIR/$tool-testing.$$b 42a2dc1f3fSmrgnow_s=$TMPDIR/$tool-testing.$$d 43a2dc1f3fSmrgbefore_s=$TMPDIR/$tool-testing.$$e 44a2dc1f3fSmrglst1=$TMPDIR/$tool-lst1.$$ 45a2dc1f3fSmrglst2=$TMPDIR/$tool-lst2.$$ 46a2dc1f3fSmrglst3=$TMPDIR/$tool-lst3.$$ 47a2dc1f3fSmrglst4=$TMPDIR/$tool-lst4.$$ 48a2dc1f3fSmrglst5=$TMPDIR/$tool-lst5.$$ 49a2dc1f3fSmrgsum1=$TMPDIR/$tool-sum1.$$ 50a2dc1f3fSmrgsum2=$TMPDIR/$tool-sum2.$$ 511debfc3dSmrgtmps="$tmp1 $tmp2 $now_s $before_s $lst1 $lst2 $lst3 $lst4 $lst5 $sum1 $sum2" 521debfc3dSmrg 531debfc3dSmrg[ "$1" = "-strict" ] && strict=$1 && shift 541debfc3dSmrg[ "$1" = "-?" ] && usage 551debfc3dSmrg[ "$2" = "" ] && usage "Must specify both PREVIOUS and CURRENT" 561debfc3dSmrg 571debfc3dSmrgtrap "rm -f $tmps" 0 1 2 3 5 9 13 15 581debfc3dSmrgexit_status=0 591debfc3dSmrg 601debfc3dSmrgif [ -d "$1" -a -d "$2" ] ; then 611debfc3dSmrg find "$1/" -name '*.sum' >$lst1 621debfc3dSmrg find "$2/" -name '*.sum' >$lst2 631debfc3dSmrg echo "# Comparing directories" 641debfc3dSmrg echo "## Dir1=$1: `cat $lst1 | wc -l` sum files" 651debfc3dSmrg echo "## Dir2=$2: `cat $lst2 | wc -l` sum files" 661debfc3dSmrg echo 671debfc3dSmrg # remove leading directory components to compare 681debfc3dSmrg sed -e "s|^$1[/]*||" $lst1 | sort >$lst3 691debfc3dSmrg sed -e "s|^$2[/]*||" $lst2 | sort >$lst4 701debfc3dSmrg comm -23 $lst3 $lst4 >$lst5 711debfc3dSmrg if [ -s $lst5 ] ; then 721debfc3dSmrg echo "# Extra sum files in Dir1=$1" 731debfc3dSmrg sed -e "s|^|< $1/|" $lst5 741debfc3dSmrg echo 751debfc3dSmrg [ -n "$strict" ] && exit_status=`expr $exit_status + 1` 761debfc3dSmrg fi 771debfc3dSmrg comm -13 $lst3 $lst4 >$lst5 781debfc3dSmrg if [ -s $lst5 ] ; then 791debfc3dSmrg echo "# Extra sum files in Dir2=$2" 801debfc3dSmrg sed -e "s|^|> $2/|" $lst5 811debfc3dSmrg echo 821debfc3dSmrg [ -n "$strict" ] && exit_status=`expr $exit_status + 1` 831debfc3dSmrg fi 841debfc3dSmrg comm -12 $lst3 $lst4 | sort -u >$lst5 851debfc3dSmrg if [ ! -s $lst5 ] ; then 861debfc3dSmrg echo "# No common sum files" 871debfc3dSmrg exit_status=`expr $exit_status + 1` 881debfc3dSmrg exit $exit_status 891debfc3dSmrg fi 901debfc3dSmrg cmnsums=`cat $lst5 | wc -l` 911debfc3dSmrg echo "# Comparing $cmnsums common sum files" 921debfc3dSmrg ( for fname in `cat $lst5`; do cat $1/$fname; done ) >$sum1 931debfc3dSmrg ( for fname in `cat $lst5`; do cat $2/$fname; done ) >$sum2 941debfc3dSmrg echo "## ${CONFIG_SHELL-/bin/sh} $0 $strict $sum1 $sum2" 951debfc3dSmrg ${CONFIG_SHELL-/bin/sh} $0 $strict $sum1 $sum2 961debfc3dSmrg ret=$? 971debfc3dSmrg if [ $ret -ne 0 ]; then 981debfc3dSmrg exit_status=`expr $exit_status + 1` 991debfc3dSmrg echo "## Differences found: $fname" 1001debfc3dSmrg fi 1011debfc3dSmrg if [ $exit_status -ne 0 ]; then 1021debfc3dSmrg echo "# $exit_status differences in $cmnsums common sum files found" 1031debfc3dSmrg else 1041debfc3dSmrg echo "# No differences found in $cmnsums common sum files" 1051debfc3dSmrg fi 1061debfc3dSmrg exit $exit_status 1071debfc3dSmrgelif [ -d "$1" -o -d "$2" ] ; then 1081debfc3dSmrg usage "Must specify either two directories or two files" 1091debfc3dSmrgfi 1101debfc3dSmrg 1111debfc3dSmrgsed 's/^XFAIL/FAIL/; s/^ERROR/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp1 1121debfc3dSmrgsed 's/^XFAIL/FAIL/; s/^ERROR/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp2 1131debfc3dSmrg 1141debfc3dSmrgbefore=$tmp1 1151debfc3dSmrgnow=$tmp2 1161debfc3dSmrg 1171debfc3dSmrg 1181debfc3dSmrgif sort -k 2 </dev/null >/dev/null 2>&1; then 1191debfc3dSmrg skip1='-k 2' 1201debfc3dSmrgelse 1211debfc3dSmrg skip1='+1' 1221debfc3dSmrgfi 1231debfc3dSmrg 1241debfc3dSmrgsort -t ':' $skip1 "$now" > "$now_s" 1251debfc3dSmrgsort -t ':' $skip1 "$before" > "$before_s" 1261debfc3dSmrg 1271debfc3dSmrggrep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 1281debfc3dSmrggrep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2 1291debfc3dSmrg 1301debfc3dSmrggrep -s . $tmp2 >/dev/null 1311debfc3dSmrgif [ $? = 0 ]; then 132*c0a68be4Smrg num=`cat $tmp2 | wc -l` 133*c0a68be4Smrg echo "Tests that now fail, but worked before ($num tests):" 1341debfc3dSmrg echo 1351debfc3dSmrg cat $tmp2 1361debfc3dSmrg echo 1371debfc3dSmrg exit_status=1 1381debfc3dSmrgfi 1391debfc3dSmrg 1401debfc3dSmrggrep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 1411debfc3dSmrggrep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2 1421debfc3dSmrg 1431debfc3dSmrggrep -s . $tmp2 >/dev/null 1441debfc3dSmrgif [ $? = 0 ]; then 145*c0a68be4Smrg num=`cat $tmp2 | wc -l` 146*c0a68be4Smrg echo "Tests that now work, but didn't before ($num tests):" 1471debfc3dSmrg echo 1481debfc3dSmrg cat $tmp2 1491debfc3dSmrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 1501debfc3dSmrg echo 1511debfc3dSmrgfi 1521debfc3dSmrg 1531debfc3dSmrggrep '^FAIL' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 1541debfc3dSmrggrep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2 1551debfc3dSmrg 1561debfc3dSmrggrep -s . $tmp2 >/dev/null 1571debfc3dSmrgif [ $? = 0 ]; then 158*c0a68be4Smrg num=`cat $tmp2 | wc -l` 159*c0a68be4Smrg echo "New tests that FAIL ($num tests):" 1601debfc3dSmrg echo 1611debfc3dSmrg cat $tmp2 1621debfc3dSmrg echo 1631debfc3dSmrg exit_status=1 1641debfc3dSmrgfi 1651debfc3dSmrg 1661debfc3dSmrggrep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 1671debfc3dSmrggrep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2 1681debfc3dSmrg 1691debfc3dSmrggrep -s . $tmp2 >/dev/null 1701debfc3dSmrgif [ $? = 0 ]; then 171*c0a68be4Smrg num=`cat $tmp2 | wc -l` 172*c0a68be4Smrg echo "New tests that PASS ($num tests):" 1731debfc3dSmrg echo 1741debfc3dSmrg cat $tmp2 1751debfc3dSmrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 1761debfc3dSmrg echo 1771debfc3dSmrgfi 1781debfc3dSmrg 1791debfc3dSmrggrep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 1801debfc3dSmrggrep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2 1811debfc3dSmrg 1821debfc3dSmrggrep -s . $tmp2 >/dev/null 1831debfc3dSmrgif [ $? = 0 ]; then 184*c0a68be4Smrg num=`cat $tmp2 | wc -l` 185*c0a68be4Smrg echo "Old tests that passed, that have disappeared ($num tests): (Eeek!)" 1861debfc3dSmrg echo 1871debfc3dSmrg cat $tmp2 1881debfc3dSmrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 1891debfc3dSmrg echo 1901debfc3dSmrgfi 1911debfc3dSmrg 1921debfc3dSmrggrep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 1931debfc3dSmrggrep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2 1941debfc3dSmrg 1951debfc3dSmrggrep -s . $tmp2 >/dev/null 1961debfc3dSmrgif [ $? = 0 ]; then 197*c0a68be4Smrg num=`cat $tmp2 | wc -l` 198*c0a68be4Smrg echo "Old tests that failed, that have disappeared ($num tests): (Eeek!)" 1991debfc3dSmrg echo 2001debfc3dSmrg cat $tmp2 2011debfc3dSmrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 2021debfc3dSmrg echo 2031debfc3dSmrgfi 2041debfc3dSmrg 2051debfc3dSmrgexit $exit_status 206