File: AutoCompare

package info (click to toggle)
fcode-utils 1.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 46,768 kB
  • sloc: ansic: 9,717; csh: 241; makefile: 129; sh: 17
file content (183 lines) | stat: -rw-r--r-- 6,992 bytes parent folder | download | duplicates (5)
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