Hash :
b986c7db
Author :
Date :
2006-10-14T20:34:46
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
#! /bin/csh -f
#
# Part of automation of the testing process for the Tokenizer/De-Tokenizer
# Automate Comparison of results of Auto-Execution of the various test-cases
# Updated Fri, 16 Jun 2006 at 12:12 PDT by David L. Paktor
# To Do:
# Conditional comparison of .DeTok files:
# Detect difference in .fc file, but do not display
# Display differences in .Log file
# If difference detected in .fc file, display mssg
# Otherwise, detect difference in .DeTok file and display mssg
# If either diff detected in .fc or in .DeTok file, show .DeTok diffs
# Display differences in .RomHdr
#
# Compare the source (.fth) files (for regression testing...)
# Usage:
# Run this from the parent-directory of the various Test categories.
# This script uses the same TestArgs files that were used by
# (and described in) the AutoExec script.
#
# This script needs a shell environment variable called CygTestLogs
# whose value is the path to the parent-directory that contains
# the results of Auto-Execution of the various test-cases under
# Cygwin, which is the "Gold Standard" to which the other
# platforms' results will be compared.
#
# This script accepts an optional environment variable called LogFilesDiff
# which may be set to change the number of lines by which two .Log
# files are expected to differ (due to different compilation-signatures)
# If this is not supplied in the environment, a default will be provided.
#
# This script compares only one platform's results at a time;
# the parent-directory that contains the Auto-Execution results
# for the platform to be compared should be the current directory.
#
# This script displays both operational errors and detected discrepancies
# in Standard Output and also collects the same in a log file whose
# name is AutoComp.Log.<time-and-date-stamp>
#
# A secondary output file, called AutoComp.TKdiffs.<time-and-date-stamp>
# is produced; it can be "source"d to cause a sequential tkdiff of
# the detected discrepancies
# Set the number of lines by which two .Log files are expected to differ.
# (this is due to different compilation-signature lines)
set LogFilesDiffLines = 6
# Over-ride with optional shell env't variable called LogFilesDiff
if ( $?LogFilesDiff ) then
set notallnumbers = `echo $LogFilesDiff | tr '0-9' ' '`
if ( "$notallnumbers" == "" ) then
set LogFilesDiffLines = $LogFilesDiff
endif
endif
# Preliminary error checking:
if ( ! $?CygTestLogs ) then
echo 'Please define a shell environment variable called CygTestLogs'
echo ' whose value is the path to the Cygwin test-results directory.'
exit 1
endif
set TArgFiles = `find . -name TestArgs -exec expr {} : '\./\(.*\)' \;`
if ( $#TArgFiles == 0 ) then
echo 'No TestArgs files found in subdirectories.'
echo 'Starting in wrong directory?'
exit 2
endif
set TArgReslts = `find $CygTestLogs -name TestArgs -exec expr {} : $CygTestLogs/'\(.*\)' \;`
if ( $#TArgReslts != $#TArgFiles ) then
echo 'Number of TestArgs files in CygTestLogs ('$CygTestLogs') directory'
echo ' does not match those found under current directory.'
echo 'Please correct discrepancy and try again.'
exit 4
endif
if ( "$TArgReslts" != "$TArgFiles" ) then
echo 'List of TestArgs files in CygTestLogs ('$CygTestLogs') directory'
echo ' does not match those found under current directory.'
echo 'Please correct discrepancy and try again.'
exit 8
endif
# Let's save mismatch identifiers:
set datemark = `date '+%y%m%d.%H%M%S'`
set ErrResltFil = AutoComp.Log.$datemark
set ScriptResltFil = AutoComp.TKdiffs.$datemark
# Let's show a progress-downcount
# Find the count of actual tests; leave the max number on display:
set cnt = `egrep '^[^#].*' $TArgFiles | wc -l`
echo ''
echo $cnt
foreach TArgFil ( $TArgFiles )
set dir = $TArgFil:h
set lindxmax = `cat $TArgFil | wc -l`
set lindx = 0
while ( $lindx < $lindxmax )
@ lindx++
set targline = `sed -n ${lindx}p $TArgFil`
if ( $#targline == 0 ) continue
if ( "$targline[1]" == "#" ) continue
set ttarg = $dir/$targline[1]
# One more error-check:
if ( ! -f ${ttarg}.fth ) then
echo File Not found: ${ttarg}.fth
echo Please update ${TArgFil} file, line $lindx
continue
endif
set label = `echo $targline | awk -F , '{print $2}'`
if ( "$label" != "" ) set label = .$label
# Now begins the real fun...
# Show a running down-count
echo -n X${cnt}' ' | tr X \\015
@ cnt--
# Check the extensions that are text-type files
foreach txext ( Log RomHdr fl fl.missing )
# Is the file in both?
if ( -f $CygTestLogs/${ttarg}${label}.${txext} && ! -f ${ttarg}${label}.${txext} ) then
echo Missing ${ttarg}${label}.${txext} | tee -a $ErrResltFil
else
if ( -f ${ttarg}${label}.${txext} ) then
set lim = 0
set fxext = `echo $txext | tr '.' '_'`
if ( `eval echo '$?'${fxext}FilesDiffLines` ) then
set lim = `eval echo '$'${fxext}FilesDiffLines`
endif
set logdiff = `diff {,$CygTestLogs/}${ttarg}${label}.${txext} | wc -l`
if ( $logdiff > $lim ) then
echo ${ttarg}${label}.${txext} files differ. | tee -a $ErrResltFil
diff {$CygTestLogs/,}${ttarg}${label}.${txext} | tee -a $ErrResltFil
echo 'tkdiff {$CygTestLogs/,}'${ttarg}${label}.${txext} >> $ScriptResltFil
endif
endif
endif
end
# Now, check the FCode file.
# If there's an FCode file in the reference directory ($CygTestLogs)
# there should be one in the directory under test.
if ( -f $CygTestLogs/${ttarg}${label}.fc && ! -f ${ttarg}${label}.fc ) then
echo Missing ${ttarg}${label}.fc | tee -a $ErrResltFil
else
# Is there an FCode file in the directory under test?
unset ShowDetokDiffs
if ( -f ${ttarg}${label}.fc ) then
set bindiff = `cmp {,$CygTestLogs/}${ttarg}${label}.fc`
if ( "$bindiff" != "" ) then
echo "$bindiff" | tee -a $ErrResltFil
# If the binaries are different, show the difference in the DeTok form
# If the DeTok form is missing, it's an even stranger error!
if ( ! -f $CygTestLogs/${ttarg}${label}.DeTok || ! -f ${ttarg}${label}.DeTok ) then
echo Missing DeTok file for ${ttarg}${label} | tee -a $ErrResltFil
else
set ShowDetokDiffs
endif
else
# Even if the binaries are not different,
# check for changes in in the DeTok form
set detokdiff = `diff {,$CygTestLogs/}${ttarg}${label}.DeTok | wc -l`
if ( $detokdiff > 0 ) set ShowDetokDiffs
endif
endif
if ( $?ShowDetokDiffs ) then
echo ${ttarg}${label}.DeTok files differ. | tee -a $ErrResltFil
diff {$CygTestLogs/,}${ttarg}${label}.DeTok | tee -a $ErrResltFil
echo 'tkdiff {$CygTestLogs/,}'${ttarg}${label}.DeTok >> $ScriptResltFil
endif
endif
end
end