1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0+ 3# 4# Compares .out and .out.new files for each name on standard input, 5# one full pathname per line. Outputs comparison results followed by 6# a summary. 7# 8# sh cmplitmushist.sh 9 10T=/tmp/cmplitmushist.sh.$$ 11trap 'rm -rf $T' 0 12mkdir $T 13 14# comparetest oldpath newpath 15badmacnam=0 16timedout=0 17perfect=0 18obsline=0 19noobsline=0 20obsresult=0 21badcompare=0 22comparetest () { 23 if grep -q ': Unknown macro ' $1 || grep -q ': Unknown macro ' $2 24 then 25 if grep -q ': Unknown macro ' $1 26 then 27 badname=`grep ': Unknown macro ' $1 | 28 sed -e 's/^.*: Unknown macro //' | 29 sed -e 's/ (User error).*$//'` 30 echo 'Current LKMM version does not know "'$badname'"' $1 31 fi 32 if grep -q ': Unknown macro ' $2 33 then 34 badname=`grep ': Unknown macro ' $2 | 35 sed -e 's/^.*: Unknown macro //' | 36 sed -e 's/ (User error).*$//'` 37 echo 'Current LKMM version does not know "'$badname'"' $2 38 fi 39 badmacnam=`expr "$badmacnam" + 1` 40 return 0 41 elif grep -q '^Command exited with non-zero status 124' $1 || 42 grep -q '^Command exited with non-zero status 124' $2 43 then 44 if grep -q '^Command exited with non-zero status 124' $1 && 45 grep -q '^Command exited with non-zero status 124' $2 46 then 47 echo Both runs timed out: $2 48 elif grep -q '^Command exited with non-zero status 124' $1 49 then 50 echo Old run timed out: $2 51 elif grep -q '^Command exited with non-zero status 124' $2 52 then 53 echo New run timed out: $2 54 fi 55 timedout=`expr "$timedout" + 1` 56 return 0 57 fi 58 grep -v 'maxresident)k\|minor)pagefaults\|^Time' $1 > $T/oldout 59 grep -v 'maxresident)k\|minor)pagefaults\|^Time' $2 > $T/newout 60 if cmp -s $T/oldout $T/newout && grep -q '^Observation' $1 61 then 62 echo Exact output match: $2 63 perfect=`expr "$perfect" + 1` 64 return 0 65 fi 66 67 grep '^Observation' $1 > $T/oldout 68 grep '^Observation' $2 > $T/newout 69 if test -s $T/oldout -o -s $T/newout 70 then 71 if cmp -s $T/oldout $T/newout 72 then 73 echo Matching Observation result and counts: $2 74 obsline=`expr "$obsline" + 1` 75 return 0 76 fi 77 else 78 echo Missing Observation line "(e.g., syntax error)": $2 79 noobsline=`expr "$noobsline" + 1` 80 return 0 81 fi 82 83 grep '^Observation' $1 | awk '{ print $3 }' > $T/oldout 84 grep '^Observation' $2 | awk '{ print $3 }' > $T/newout 85 if cmp -s $T/oldout $T/newout 86 then 87 echo Matching Observation Always/Sometimes/Never result: $2 88 obsresult=`expr "$obsresult" + 1` 89 return 0 90 fi 91 echo ' !!!' Result changed: $2 92 badcompare=`expr "$badcompare" + 1` 93 return 1 94} 95 96sed -e 's/^.*$/comparetest &.out &.out.new/' > $T/cmpscript 97. $T/cmpscript > $T/cmpscript.out 98cat $T/cmpscript.out 99 100echo ' ---' Summary: 1>&2 101grep '!!!' $T/cmpscript.out 1>&2 102if test "$perfect" -ne 0 103then 104 echo Exact output matches: $perfect 1>&2 105fi 106if test "$obsline" -ne 0 107then 108 echo Matching Observation result and counts: $obsline 1>&2 109fi 110if test "$noobsline" -ne 0 111then 112 echo Missing Observation line "(e.g., syntax error)": $noobsline 1>&2 113fi 114if test "$obsresult" -ne 0 115then 116 echo Matching Observation Always/Sometimes/Never result: $obsresult 1>&2 117fi 118if test "$timedout" -ne 0 119then 120 echo "!!!" Timed out: $timedout 1>&2 121fi 122if test "$badmacnam" -ne 0 123then 124 echo "!!!" Unknown primitive: $badmacnam 1>&2 125fi 126if test "$badcompare" -ne 0 127then 128 echo "!!!" Result changed: $badcompare 1>&2 129 exit 1 130fi 131 132exit 0 133