1 1.1 mrg #!/bin/sh 2 1.1 mrg # This script automatically test the given tool with the tool's test cases, 3 1.1 mrg # reporting anything of interest. 4 1.1 mrg 5 1.1.1.3 mrg # Written by Mike Stump <mrs (at] cygnus.com> 6 1.1.1.3 mrg # Subdir comparison added by Quentin Neill <quentin.neill (at] amd.com> 7 1.1.1.3 mrg 8 1.1.1.2 mrg usage() 9 1.1.1.2 mrg { 10 1.1.1.2 mrg if [ -n "$1" ] ; then 11 1.1.1.2 mrg echo "$0: Error: $1" >&2 12 1.1.1.2 mrg echo >&2 13 1.1.1.2 mrg fi 14 1.1.1.2 mrg cat >&2 <<EOUSAGE 15 1.1.1.2 mrg Usage: $0 [-strict] PREVIOUS CURRENT 16 1.1.1.2 mrg 17 1.1.1.2 mrg Compare the PREVIOUS and CURRENT test case .sum files, reporting anything of interest. 18 1.1.1.2 mrg 19 1.1.1.2 mrg If PREVIOUS and CURRENT are directories, find and compare any *.sum files. 20 1.1.1.2 mrg 21 1.1.1.2 mrg Unless -strict is given, these discrepancies are not counted as errors: 22 1.1.1.2 mrg missing/extra .sum files when comparing directories 23 1.1.1.2 mrg tests that failed in PREVIOUS but pass in CURRENT 24 1.1.1.2 mrg tests that were not in PREVIOUS but appear in CURRENT 25 1.1.1.2 mrg tests in PREVIOUS that are missing in CURRENT 26 1.1.1.2 mrg 27 1.1.1.2 mrg Exit with the following values: 28 1.1.1.2 mrg 0 if there is nothing of interest 29 1.1.1.2 mrg 1 if there are errors when comparing single test case files 30 1.1.1.2 mrg N for the number of errors found when comparing directories 31 1.1.1.2 mrg EOUSAGE 32 1.1.1.2 mrg exit 2 33 1.1.1.2 mrg } 34 1.1 mrg 35 1.1.1.2 mrg export LC_ALL=C 36 1.1 mrg 37 1.1 mrg tool=gxx 38 1.1 mrg 39 1.1.1.7 mrg TMPDIR=${TMPDIR:-/tmp} 40 1.1.1.7 mrg tmp1=$TMPDIR/$tool-testing.$$a 41 1.1.1.7 mrg tmp2=$TMPDIR/$tool-testing.$$b 42 1.1.1.7 mrg now_s=$TMPDIR/$tool-testing.$$d 43 1.1.1.7 mrg before_s=$TMPDIR/$tool-testing.$$e 44 1.1.1.7 mrg lst1=$TMPDIR/$tool-lst1.$$ 45 1.1.1.7 mrg lst2=$TMPDIR/$tool-lst2.$$ 46 1.1.1.7 mrg lst3=$TMPDIR/$tool-lst3.$$ 47 1.1.1.7 mrg lst4=$TMPDIR/$tool-lst4.$$ 48 1.1.1.7 mrg lst5=$TMPDIR/$tool-lst5.$$ 49 1.1.1.7 mrg sum1=$TMPDIR/$tool-sum1.$$ 50 1.1.1.7 mrg sum2=$TMPDIR/$tool-sum2.$$ 51 1.1.1.2 mrg tmps="$tmp1 $tmp2 $now_s $before_s $lst1 $lst2 $lst3 $lst4 $lst5 $sum1 $sum2" 52 1.1.1.2 mrg 53 1.1.1.2 mrg [ "$1" = "-strict" ] && strict=$1 && shift 54 1.1.1.2 mrg [ "$1" = "-?" ] && usage 55 1.1.1.2 mrg [ "$2" = "" ] && usage "Must specify both PREVIOUS and CURRENT" 56 1.1 mrg 57 1.1.1.2 mrg trap "rm -f $tmps" 0 1 2 3 5 9 13 15 58 1.1.1.2 mrg exit_status=0 59 1.1.1.2 mrg 60 1.1.1.2 mrg if [ -d "$1" -a -d "$2" ] ; then 61 1.1.1.2 mrg find "$1/" -name '*.sum' >$lst1 62 1.1.1.2 mrg find "$2/" -name '*.sum' >$lst2 63 1.1.1.2 mrg echo "# Comparing directories" 64 1.1.1.2 mrg echo "## Dir1=$1: `cat $lst1 | wc -l` sum files" 65 1.1.1.2 mrg echo "## Dir2=$2: `cat $lst2 | wc -l` sum files" 66 1.1.1.2 mrg echo 67 1.1.1.2 mrg # remove leading directory components to compare 68 1.1.1.2 mrg sed -e "s|^$1[/]*||" $lst1 | sort >$lst3 69 1.1.1.2 mrg sed -e "s|^$2[/]*||" $lst2 | sort >$lst4 70 1.1.1.2 mrg comm -23 $lst3 $lst4 >$lst5 71 1.1.1.2 mrg if [ -s $lst5 ] ; then 72 1.1.1.2 mrg echo "# Extra sum files in Dir1=$1" 73 1.1.1.2 mrg sed -e "s|^|< $1/|" $lst5 74 1.1.1.2 mrg echo 75 1.1.1.2 mrg [ -n "$strict" ] && exit_status=`expr $exit_status + 1` 76 1.1.1.2 mrg fi 77 1.1.1.2 mrg comm -13 $lst3 $lst4 >$lst5 78 1.1.1.2 mrg if [ -s $lst5 ] ; then 79 1.1.1.2 mrg echo "# Extra sum files in Dir2=$2" 80 1.1.1.2 mrg sed -e "s|^|> $2/|" $lst5 81 1.1.1.2 mrg echo 82 1.1.1.2 mrg [ -n "$strict" ] && exit_status=`expr $exit_status + 1` 83 1.1.1.2 mrg fi 84 1.1.1.2 mrg comm -12 $lst3 $lst4 | sort -u >$lst5 85 1.1.1.2 mrg if [ ! -s $lst5 ] ; then 86 1.1.1.2 mrg echo "# No common sum files" 87 1.1.1.2 mrg exit_status=`expr $exit_status + 1` 88 1.1.1.2 mrg exit $exit_status 89 1.1.1.2 mrg fi 90 1.1.1.2 mrg cmnsums=`cat $lst5 | wc -l` 91 1.1.1.2 mrg echo "# Comparing $cmnsums common sum files" 92 1.1.1.2 mrg ( for fname in `cat $lst5`; do cat $1/$fname; done ) >$sum1 93 1.1.1.2 mrg ( for fname in `cat $lst5`; do cat $2/$fname; done ) >$sum2 94 1.1.1.2 mrg echo "## ${CONFIG_SHELL-/bin/sh} $0 $strict $sum1 $sum2" 95 1.1.1.2 mrg ${CONFIG_SHELL-/bin/sh} $0 $strict $sum1 $sum2 96 1.1.1.2 mrg ret=$? 97 1.1.1.2 mrg if [ $ret -ne 0 ]; then 98 1.1.1.2 mrg exit_status=`expr $exit_status + 1` 99 1.1.1.9 mrg echo "## Differences found" 100 1.1.1.2 mrg fi 101 1.1.1.2 mrg if [ $exit_status -ne 0 ]; then 102 1.1.1.2 mrg echo "# $exit_status differences in $cmnsums common sum files found" 103 1.1.1.2 mrg else 104 1.1.1.2 mrg echo "# No differences found in $cmnsums common sum files" 105 1.1.1.2 mrg fi 106 1.1.1.2 mrg exit $exit_status 107 1.1.1.2 mrg elif [ -d "$1" -o -d "$2" ] ; then 108 1.1.1.2 mrg usage "Must specify either two directories or two files" 109 1.1 mrg fi 110 1.1 mrg 111 1.1.1.9 mrg sed 's/^XFAIL/FAIL/; s/^ERROR/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^[ ]*=== [^ ]* tests ===$/ {tool = $2} /^Running target / {target = $3} { if (tool != "") { sub(/:[ ]/, "&"tool": " ); }; if (target != "unix") { sub(/:[ ]/, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp1 112 1.1.1.9 mrg sed 's/^XFAIL/FAIL/; s/^ERROR/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^[ ]*=== [^ ]* tests ===$/ {tool = $2} /^Running target / {target = $3} { if (tool != "") { sub(/:[ ]/, "&"tool": " ); }; if (target != "unix") { sub(/:[ ]/, "&"target": " ); }; print $0; }' | cut -c1-2000 >$tmp2 113 1.1 mrg 114 1.1 mrg before=$tmp1 115 1.1 mrg now=$tmp2 116 1.1 mrg 117 1.1 mrg 118 1.1 mrg if sort -k 2 </dev/null >/dev/null 2>&1; then 119 1.1 mrg skip1='-k 2' 120 1.1 mrg else 121 1.1 mrg skip1='+1' 122 1.1 mrg fi 123 1.1 mrg 124 1.1 mrg sort -t ':' $skip1 "$now" > "$now_s" 125 1.1 mrg sort -t ':' $skip1 "$before" > "$before_s" 126 1.1 mrg 127 1.1 mrg grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 128 1.1 mrg grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2 129 1.1 mrg 130 1.1 mrg grep -s . $tmp2 >/dev/null 131 1.1 mrg if [ $? = 0 ]; then 132 1.1.1.8 mrg num=`cat $tmp2 | wc -l` 133 1.1.1.8 mrg echo "Tests that now fail, but worked before ($num tests):" 134 1.1 mrg echo 135 1.1 mrg cat $tmp2 136 1.1 mrg echo 137 1.1 mrg exit_status=1 138 1.1 mrg fi 139 1.1 mrg 140 1.1 mrg grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 141 1.1 mrg grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2 142 1.1 mrg 143 1.1 mrg grep -s . $tmp2 >/dev/null 144 1.1 mrg if [ $? = 0 ]; then 145 1.1.1.8 mrg num=`cat $tmp2 | wc -l` 146 1.1.1.8 mrg echo "Tests that now work, but didn't before ($num tests):" 147 1.1 mrg echo 148 1.1 mrg cat $tmp2 149 1.1.1.2 mrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 150 1.1 mrg echo 151 1.1 mrg fi 152 1.1 mrg 153 1.1 mrg grep '^FAIL' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 154 1.1 mrg grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2 155 1.1 mrg 156 1.1 mrg grep -s . $tmp2 >/dev/null 157 1.1 mrg if [ $? = 0 ]; then 158 1.1.1.8 mrg num=`cat $tmp2 | wc -l` 159 1.1.1.8 mrg echo "New tests that FAIL ($num tests):" 160 1.1 mrg echo 161 1.1 mrg cat $tmp2 162 1.1 mrg echo 163 1.1 mrg exit_status=1 164 1.1 mrg fi 165 1.1 mrg 166 1.1 mrg grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 167 1.1 mrg grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2 168 1.1 mrg 169 1.1 mrg grep -s . $tmp2 >/dev/null 170 1.1 mrg if [ $? = 0 ]; then 171 1.1.1.8 mrg num=`cat $tmp2 | wc -l` 172 1.1.1.8 mrg echo "New tests that PASS ($num tests):" 173 1.1 mrg echo 174 1.1 mrg cat $tmp2 175 1.1.1.2 mrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 176 1.1 mrg echo 177 1.1 mrg fi 178 1.1 mrg 179 1.1 mrg grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 180 1.1 mrg grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2 181 1.1 mrg 182 1.1 mrg grep -s . $tmp2 >/dev/null 183 1.1 mrg if [ $? = 0 ]; then 184 1.1.1.8 mrg num=`cat $tmp2 | wc -l` 185 1.1.1.8 mrg echo "Old tests that passed, that have disappeared ($num tests): (Eeek!)" 186 1.1 mrg echo 187 1.1 mrg cat $tmp2 188 1.1.1.2 mrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 189 1.1 mrg echo 190 1.1 mrg fi 191 1.1 mrg 192 1.1 mrg grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 193 1.1 mrg grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2 194 1.1 mrg 195 1.1 mrg grep -s . $tmp2 >/dev/null 196 1.1 mrg if [ $? = 0 ]; then 197 1.1.1.8 mrg num=`cat $tmp2 | wc -l` 198 1.1.1.8 mrg echo "Old tests that failed, that have disappeared ($num tests): (Eeek!)" 199 1.1 mrg echo 200 1.1 mrg cat $tmp2 201 1.1.1.2 mrg [ -n "$strict" ] && echo "Strict test fails" && exit_status=1 202 1.1 mrg echo 203 1.1 mrg fi 204 1.1 mrg 205 1.1 mrg exit $exit_status 206