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