Annotation of 43BSDTahoe/lib/libc/gen/regexp/timer.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Simple timing program for regcomp().
                      3:  *
                      4:  *     Copyright (c) 1986 by University of Toronto.
                      5:  *     Written by Henry Spencer.  Not derived from licensed software.
                      6:  *
                      7:  *     Permission is granted to anyone to use this software for any
                      8:  *     purpose on any computer system, and to redistribute it freely,
                      9:  *     subject to the following restrictions:
                     10:  *
                     11:  *     1. The author is not responsible for the consequences of use of
                     12:  *             this software, no matter how awful, even if they arise
                     13:  *             from defects in it.
                     14:  *
                     15:  *     2. The origin of this software must not be misrepresented, either
                     16:  *             by explicit claim or by omission.
                     17:  *
                     18:  *     3. Altered versions must be plainly marked as such, and must not
                     19:  *             be misrepresented as being the original software.
                     20:  *
                     21:  * Usage: timer ncomp nexec nsub
                     22:  *     or
                     23:  *     timer ncomp nexec nsub regexp string [ answer [ sub ] ]
                     24:  *
                     25:  * The second form is for timing repetitions of a single test case.
                     26:  * The first form's test data is a compiled-in copy of the "tests" file.
                     27:  * Ncomp, nexec, nsub are how many times to do each regcomp, regexec,
                     28:  * and regsub.  The way to time an operation individually is to do something
                     29:  * like "timer 1 50 1".
                     30:  */
                     31: #include <stdio.h>
                     32: 
                     33: struct try {
                     34:        char *re, *str, *ans, *src, *dst;
                     35: } tests[] = {
                     36: #include "timer.t.h"
                     37: { NULL, NULL, NULL, NULL, NULL }
                     38: };
                     39: 
                     40: #include <regexp.h>
                     41: 
                     42: int errreport = 0;             /* Report errors via errseen? */
                     43: char *errseen = NULL;          /* Error message. */
                     44: 
                     45: char *progname;
                     46: 
                     47: /* ARGSUSED */
                     48: main(argc, argv)
                     49: int argc;
                     50: char *argv[];
                     51: {
                     52:        int ncomp, nexec, nsub;
                     53:        struct try one;
                     54:        char dummy[512];
                     55: 
                     56:        if (argc < 4) {
                     57:                ncomp = 1;
                     58:                nexec = 1;
                     59:                nsub = 1;
                     60:        } else {
                     61:                ncomp = atoi(argv[1]);
                     62:                nexec = atoi(argv[2]);
                     63:                nsub = atoi(argv[3]);
                     64:        }
                     65:        
                     66:        progname = argv[0];
                     67:        if (argc > 5) {
                     68:                one.re = argv[4];
                     69:                one.str = argv[5];
                     70:                if (argc > 6)
                     71:                        one.ans = argv[6];
                     72:                else
                     73:                        one.ans = "y";
                     74:                if (argc > 7) { 
                     75:                        one.src = argv[7];
                     76:                        one.dst = "xxx";
                     77:                } else {
                     78:                        one.src = "x";
                     79:                        one.dst = "x";
                     80:                }
                     81:                errreport = 1;
                     82:                try(one, ncomp, nexec, nsub);
                     83:        } else
                     84:                multiple(ncomp, nexec, nsub);
                     85:        exit(0);
                     86: }
                     87: 
                     88: void
                     89: regerror(s)
                     90: char *s;
                     91: {
                     92:        if (errreport)
                     93:                errseen = s;
                     94:        else
                     95:                error(s, "");
                     96: }
                     97: 
                     98: #ifndef ERRAVAIL
                     99: error(s1, s2)
                    100: char *s1;
                    101: char *s2;
                    102: {
                    103:        fprintf(stderr, "regexp: ");
                    104:        fprintf(stderr, s1, s2);
                    105:        fprintf(stderr, "\n");
                    106:        exit(1);
                    107: }
                    108: #endif
                    109: 
                    110: int lineno = 0;
                    111: 
                    112: multiple(ncomp, nexec, nsub)
                    113: int ncomp, nexec, nsub;
                    114: {
                    115:        register int i;
                    116:        extern char *strchr();
                    117: 
                    118:        errreport = 1;
                    119:        for (i = 0; tests[i].re != NULL; i++) {
                    120:                lineno++;
                    121:                try(tests[i], ncomp, nexec, nsub);
                    122:        }
                    123: }
                    124: 
                    125: try(fields, ncomp, nexec, nsub)
                    126: struct try fields;
                    127: int ncomp, nexec, nsub;
                    128: {
                    129:        regexp *r;
                    130:        char dbuf[BUFSIZ];
                    131:        register int i;
                    132: 
                    133:        errseen = NULL;
                    134:        r = regcomp(fields.re);
                    135:        if (r == NULL) {
                    136:                if (*fields.ans != 'c')
                    137:                        complain("regcomp failure in `%s'", fields.re);
                    138:                return;
                    139:        }
                    140:        if (*fields.ans == 'c') {
                    141:                complain("unexpected regcomp success in `%s'", fields.re);
                    142:                free((char *)r);
                    143:                return;
                    144:        }
                    145:        for (i = ncomp-1; i > 0; i--) {
                    146:                free((char *)r);
                    147:                r = regcomp(fields.re);
                    148:        }
                    149:        if (!regexec(r, fields.str)) {
                    150:                if (*fields.ans != 'n')
                    151:                        complain("regexec failure in `%s'", "");
                    152:                free((char *)r);
                    153:                return;
                    154:        }
                    155:        if (*fields.ans == 'n') {
                    156:                complain("unexpected regexec success", "");
                    157:                free((char *)r);
                    158:                return;
                    159:        }
                    160:        for (i = nexec-1; i > 0; i--)
                    161:                (void) regexec(r, fields.str);
                    162:        errseen = NULL;
                    163:        for (i = nsub; i > 0; i--)
                    164:                regsub(r, fields.src, dbuf);
                    165:        if (errseen != NULL) {  
                    166:                complain("regsub complaint", "");
                    167:                free((char *)r);
                    168:                return;
                    169:        }
                    170:        if (strcmp(dbuf, fields.dst) != 0)
                    171:                complain("regsub result `%s' wrong", dbuf);
                    172:        free((char *)r);
                    173: }
                    174: 
                    175: complain(s1, s2)
                    176: char *s1;
                    177: char *s2;
                    178: {
                    179:        fprintf(stderr, "try: %d: ", lineno);
                    180:        fprintf(stderr, s1, s2);
                    181:        fprintf(stderr, " (%s)\n", (errseen != NULL) ? errseen : "");
                    182: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.