OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [regexp/] [timer.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/*
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
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.