ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/radcompare.c
(Generate patch)

Comparing ray/src/util/radcompare.c (file contents):
Revision 2.23 by greg, Tue Jun 30 01:17:54 2020 UTC vs.
Revision 2.30 by greg, Tue May 24 22:34:18 2022 UTC

# Line 27 | Line 27 | int    report = REP_WARN;      /* reporting level */
27  
28   int     ign_header = 0;         /* ignore header differences? */
29  
30 + int     escape_newlines = 0;    /* allow backslash to skip newlines */
31 +
32   double  rel_min = 1e-5;         /* positive for relative comparisons */
33  
34   double  rms_lim = 0.01;         /* RMS difference limit */
# Line 35 | Line 37 | double max_lim = 0.25;         /* difference limit if non-neg
37  
38   int     lin1cnt=0, lin2cnt=0;   /* file line position */
39  
40 + int     comment_c = '\0';       /* comment delimiter for text files */
41 +
42   const char      nsuffix[10][3] = {              /* 1st, 2nd, 3rd, etc. */
43                          "th","st","nd","rd","th","th","th","th","th","th"
44                  };
# Line 70 | Line 74 | enum {TYP_UNKNOWN, TYP_TEXT, TYP_ASCII, TYP_RGBE, TYP_
74  
75                                  /* header variables to always ignore */
76   const char      *hdr_ignkey[] = {
77 +                        "FORMAT",
78                          "SOFTWARE",
79                          "CAPDATE",
80                          "GMT",
# Line 111 | Line 116 | usage()
116   {
117          fputs("Usage: ", stderr);
118          fputs(progname, stderr);
119 <        fputs(" [-h][-s|-w|-v][-rel min_test][-rms epsilon][-max epsilon] reference test\n",
119 >        fputs(" [-h][-c#][-s|-w|-v][-rel min_test][-rms epsilon][-max epsilon] reference test\n",
120                          stderr);
121          exit(2);
122   }
# Line 130 | Line 135 | read_line(LINEBUF *bp, FILE *fp)
135          }
136          while (fgets(bp->str + bp->len, bp->siz - bp->len, fp)) {
137                  bp->len += strlen(bp->str + bp->len);
138 <                if (bp->str[bp->len-1] == '\n')
138 >                if (bp->str[bp->len-1] == '\n') {
139 >                        if (bp->len > 1 && bp->str[bp->len-2] == '\r') {
140 >                                bp->str[--bp->len] = '\0';
141 >                                bp->str[bp->len-1] = '\n';
142 >                        }
143 >                        if (escape_newlines && bp->len > 1 &&
144 >                                        bp->str[bp->len-2] == '\\') {
145 >                                bp->str[--bp->len] = '\0';
146 >                                bp->str[bp->len-1] = ' ';
147 >                                continue;
148 >                        }
149                          break;          /* found EOL */
150 +                }
151                  if (bp->len < bp->siz - 4)
152                          continue;       /* at EOF? */
153                  if (bp->siz >= MAXBUF) {
# Line 149 | Line 165 | read_line(LINEBUF *bp, FILE *fp)
165                  if (!bp->str)
166                          goto memerr;
167          }
168 +        if (comment_c) {                /* elide comment? */
169 +                char    *cp = sskip2(bp->str,0);
170 +                if (*cp == comment_c) {
171 +                        *cp++ = '\n';
172 +                        *cp = '\0';
173 +                        bp->len = cp - bp->str;
174 +                }
175 +        }
176          return(bp->len);
177   memerr:
178          fprintf(stderr,
# Line 187 | Line 211 | real_check(double r1, double r2)
211  
212          if (rel_min > 0) {      /* doing relative differences? */
213                  double  av2 = .25*(r1*r1 + 2.*fabs(r1*r2) + r2*r2);
214 <                if (av2 > rel_min*rel_min)
215 <                        diff2 /= av2;
214 >                if (av2 < rel_min*rel_min)
215 >                        av2 = rel_min*rel_min;
216 >                diff2 /= av2;
217          }
218          if (max_lim >= 0 && diff2 > max_lim*max_lim) {
219                  if (report != REP_QUIET)
# Line 317 | Line 342 | equiv_string(char *s1, char *s2)
342   static int
343   setheadvar(char *val, void *p)
344   {
345 +        char    newval[128];
346          LUTAB   *htp = (LUTAB *)p;
347          LUENT   *tep;
348          char    *key;
# Line 359 | Line 385 | setheadvar(char *val, void *p)
385                  return(-1);     /* memory allocation error */
386          if (!tep->key)
387                  tep->key = strcpy(malloc(kln+1), key);
388 <        if (tep->data)
388 >        if (tep->data) {        /* check for special cases */
389 >                if (!strcmp(key, "EXPOSURE")) {
390 >                        sprintf(newval, "%.6e", atof(tep->data)*atof(val));
391 >                        vln = strlen(val = newval);
392 >                }
393                  free(tep->data);
394 +        }
395          tep->data = strcpy(malloc(vln+1), val);
396          return(1);
397   }
# Line 469 | Line 500 | identify_type(const char *name, FILE *fin, LUTAB *htp)
500          }
501          if (c)
502                  return(TYP_BINARY);
472        SET_FILE_TEXT(fin);                     /* originally set to binary */
503          return(TYP_TEXT);
504   badeof:
505          if (report != REP_QUIET) {
# Line 552 | Line 582 | compare_text()
582  
583          if (report >= REP_VERBOSE) {
584                  fputs(progname, stdout);
585 <                fputs(": comparing inputs as ASCII text\n", stdout);
585 >                fputs(": comparing inputs as ASCII text", stdout);
586 >                if (escape_newlines)
587 >                        fputs(", allowing escaped newlines", stdout);
588 >                if (comment_c) {
589 >                        fputs(", ignoring comments starting with '", stdout);
590 >                        fputc(comment_c, stdout);
591 >                        fputc('\'', stdout);
592 >                }
593 >                fputc('\n', stdout);
594          }
595 +        SET_FILE_TEXT(f1in);                    /* originally set to binary */
596 +        SET_FILE_TEXT(f2in);
597          init_line(&l1buf); init_line(&l2buf);   /* compare a line at a time */
598          while (read_line(&l1buf, f1in)) {
599                  lin1cnt++;
# Line 892 | Line 932 | main(int argc, char *argv[])
932                  switch (argv[a][1]) {
933                  case 'h':                       /* ignore header info. */
934                          ign_header = !ign_header;
935 +                        continue;
936 +                case 'n':                       /* allow newline escapes */
937 +                        escape_newlines = !escape_newlines;
938 +                        continue;
939 +                case 'c':                       /* ignore comments */
940 +                        comment_c = argv[a][2];
941                          continue;
942                  case 's':                       /* silent operation */
943                          report = REP_QUIET;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines