162306a36Sopenharmony_ci#!/bin/sh
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0+
362306a36Sopenharmony_ci#
462306a36Sopenharmony_ci# Compares .out and .out.new files for each name on standard input,
562306a36Sopenharmony_ci# one full pathname per line.  Outputs comparison results followed by
662306a36Sopenharmony_ci# a summary.
762306a36Sopenharmony_ci#
862306a36Sopenharmony_ci# sh cmplitmushist.sh
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciT=/tmp/cmplitmushist.sh.$$
1162306a36Sopenharmony_citrap 'rm -rf $T' 0
1262306a36Sopenharmony_cimkdir $T
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci# comparetest oldpath newpath
1562306a36Sopenharmony_cibadmacnam=0
1662306a36Sopenharmony_citimedout=0
1762306a36Sopenharmony_ciperfect=0
1862306a36Sopenharmony_ciobsline=0
1962306a36Sopenharmony_cinoobsline=0
2062306a36Sopenharmony_ciobsresult=0
2162306a36Sopenharmony_cibadcompare=0
2262306a36Sopenharmony_cicomparetest () {
2362306a36Sopenharmony_ci	if grep -q ': Unknown macro ' $1 || grep -q ': Unknown macro ' $2
2462306a36Sopenharmony_ci	then
2562306a36Sopenharmony_ci		if grep -q ': Unknown macro ' $1
2662306a36Sopenharmony_ci		then
2762306a36Sopenharmony_ci			badname=`grep ': Unknown macro ' $1 |
2862306a36Sopenharmony_ci				sed -e 's/^.*: Unknown macro //' |
2962306a36Sopenharmony_ci				sed -e 's/ (User error).*$//'`
3062306a36Sopenharmony_ci			echo 'Current LKMM version does not know "'$badname'"' $1
3162306a36Sopenharmony_ci		fi
3262306a36Sopenharmony_ci		if grep -q ': Unknown macro ' $2
3362306a36Sopenharmony_ci		then
3462306a36Sopenharmony_ci			badname=`grep ': Unknown macro ' $2 |
3562306a36Sopenharmony_ci				sed -e 's/^.*: Unknown macro //' |
3662306a36Sopenharmony_ci				sed -e 's/ (User error).*$//'`
3762306a36Sopenharmony_ci			echo 'Current LKMM version does not know "'$badname'"' $2
3862306a36Sopenharmony_ci		fi
3962306a36Sopenharmony_ci		badmacnam=`expr "$badmacnam" + 1`
4062306a36Sopenharmony_ci		return 0
4162306a36Sopenharmony_ci	elif grep -q '^Command exited with non-zero status 124' $1 ||
4262306a36Sopenharmony_ci	     grep -q '^Command exited with non-zero status 124' $2
4362306a36Sopenharmony_ci	then
4462306a36Sopenharmony_ci		if grep -q '^Command exited with non-zero status 124' $1 &&
4562306a36Sopenharmony_ci		   grep -q '^Command exited with non-zero status 124' $2
4662306a36Sopenharmony_ci		then
4762306a36Sopenharmony_ci			echo Both runs timed out: $2
4862306a36Sopenharmony_ci		elif grep -q '^Command exited with non-zero status 124' $1
4962306a36Sopenharmony_ci		then
5062306a36Sopenharmony_ci			echo Old run timed out: $2
5162306a36Sopenharmony_ci		elif grep -q '^Command exited with non-zero status 124' $2
5262306a36Sopenharmony_ci		then
5362306a36Sopenharmony_ci			echo New run timed out: $2
5462306a36Sopenharmony_ci		fi
5562306a36Sopenharmony_ci		timedout=`expr "$timedout" + 1`
5662306a36Sopenharmony_ci		return 0
5762306a36Sopenharmony_ci	fi
5862306a36Sopenharmony_ci	grep -v 'maxresident)k\|minor)pagefaults\|^Time' $1 > $T/oldout
5962306a36Sopenharmony_ci	grep -v 'maxresident)k\|minor)pagefaults\|^Time' $2 > $T/newout
6062306a36Sopenharmony_ci	if cmp -s $T/oldout $T/newout && grep -q '^Observation' $1
6162306a36Sopenharmony_ci	then
6262306a36Sopenharmony_ci		echo Exact output match: $2
6362306a36Sopenharmony_ci		perfect=`expr "$perfect" + 1`
6462306a36Sopenharmony_ci		return 0
6562306a36Sopenharmony_ci	fi
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	grep '^Observation' $1 > $T/oldout
6862306a36Sopenharmony_ci	grep '^Observation' $2 > $T/newout
6962306a36Sopenharmony_ci	if test -s $T/oldout -o -s $T/newout
7062306a36Sopenharmony_ci	then
7162306a36Sopenharmony_ci		if cmp -s $T/oldout $T/newout
7262306a36Sopenharmony_ci		then
7362306a36Sopenharmony_ci			echo Matching Observation result and counts: $2
7462306a36Sopenharmony_ci			obsline=`expr "$obsline" + 1`
7562306a36Sopenharmony_ci			return 0
7662306a36Sopenharmony_ci		fi
7762306a36Sopenharmony_ci	else
7862306a36Sopenharmony_ci		echo Missing Observation line "(e.g., syntax error)": $2
7962306a36Sopenharmony_ci		noobsline=`expr "$noobsline" + 1`
8062306a36Sopenharmony_ci		return 0
8162306a36Sopenharmony_ci	fi
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci	grep '^Observation' $1 | awk '{ print $3 }' > $T/oldout
8462306a36Sopenharmony_ci	grep '^Observation' $2 | awk '{ print $3 }' > $T/newout
8562306a36Sopenharmony_ci	if cmp -s $T/oldout $T/newout
8662306a36Sopenharmony_ci	then
8762306a36Sopenharmony_ci		echo Matching Observation Always/Sometimes/Never result: $2
8862306a36Sopenharmony_ci		obsresult=`expr "$obsresult" + 1`
8962306a36Sopenharmony_ci		return 0
9062306a36Sopenharmony_ci	fi
9162306a36Sopenharmony_ci	echo ' !!!' Result changed: $2
9262306a36Sopenharmony_ci	badcompare=`expr "$badcompare" + 1`
9362306a36Sopenharmony_ci	return 1
9462306a36Sopenharmony_ci}
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_cised -e 's/^.*$/comparetest &.out &.out.new/' > $T/cmpscript
9762306a36Sopenharmony_ci. $T/cmpscript > $T/cmpscript.out
9862306a36Sopenharmony_cicat $T/cmpscript.out
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciecho ' ---' Summary: 1>&2
10162306a36Sopenharmony_cigrep '!!!' $T/cmpscript.out 1>&2
10262306a36Sopenharmony_ciif test "$perfect" -ne 0
10362306a36Sopenharmony_cithen
10462306a36Sopenharmony_ci	echo Exact output matches: $perfect 1>&2
10562306a36Sopenharmony_cifi
10662306a36Sopenharmony_ciif test "$obsline" -ne 0
10762306a36Sopenharmony_cithen
10862306a36Sopenharmony_ci	echo Matching Observation result and counts: $obsline 1>&2
10962306a36Sopenharmony_cifi
11062306a36Sopenharmony_ciif test "$noobsline" -ne 0
11162306a36Sopenharmony_cithen
11262306a36Sopenharmony_ci	echo Missing Observation line "(e.g., syntax error)": $noobsline 1>&2
11362306a36Sopenharmony_cifi
11462306a36Sopenharmony_ciif test "$obsresult" -ne 0
11562306a36Sopenharmony_cithen
11662306a36Sopenharmony_ci	echo Matching Observation Always/Sometimes/Never result: $obsresult 1>&2
11762306a36Sopenharmony_cifi
11862306a36Sopenharmony_ciif test "$timedout" -ne 0
11962306a36Sopenharmony_cithen
12062306a36Sopenharmony_ci	echo "!!!" Timed out: $timedout 1>&2
12162306a36Sopenharmony_cifi
12262306a36Sopenharmony_ciif test "$badmacnam" -ne 0
12362306a36Sopenharmony_cithen
12462306a36Sopenharmony_ci	echo "!!!" Unknown primitive: $badmacnam 1>&2
12562306a36Sopenharmony_cifi
12662306a36Sopenharmony_ciif test "$badcompare" -ne 0
12762306a36Sopenharmony_cithen
12862306a36Sopenharmony_ci	echo "!!!" Result changed: $badcompare 1>&2
12962306a36Sopenharmony_ci	exit 1
13062306a36Sopenharmony_cifi
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ciexit 0
133