Home | History | Annotate | Line # | Download | only in contrib
      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