xref: /netbsd-src/external/gpl3/gcc.old/dist/contrib/compare_tests (revision c0a68be459da21030695f60d10265c2fc49758f8)
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