blob: ce62bdae6119e38aff4e651da49a8a077d782445 [file] [log] [blame]
Lev Walkin4eceeba2007-07-23 06:48:26 +00001#include <stdio.h>
2#include <assert.h>
Lev Walkin29a044b2004-06-14 07:24:36 +00003#include <sys/time.h>
Lev Walkinf15320b2004-06-03 03:38:44 +00004
Lev Walkin4eceeba2007-07-23 06:48:26 +00005#include <OBJECT_IDENTIFIER.h>
6#include <RELATIVE-OID.h>
7
Lev Walkinf15320b2004-06-03 03:38:44 +00008static int
9_print(const void *buffer, size_t size, void *app_key) {
Lev Walkin46bf9352004-06-14 07:40:17 +000010 (void)app_key;
Lev Walkinf15320b2004-06-03 03:38:44 +000011 fwrite(buffer, size, 1, stdout);
12 return 0;
13}
14
15static void
16check_OID(uint8_t *buf, size_t len, int *ck_buf, int ck_len) {
17 OBJECT_IDENTIFIER_t *oid;
Lev Walkindc06f6b2004-10-20 15:50:55 +000018 asn_dec_rval_t rval;
Lev Walkinf15320b2004-06-03 03:38:44 +000019 unsigned long arcs[10];
20 int alen;
21 int i;
22
23 printf("Checking {");
Lev Walkin46bf9352004-06-14 07:40:17 +000024 for(i = 0; i < (int)len; i++) { printf("%s%02x", i?" ":"", buf[i]); }
Lev Walkinf15320b2004-06-03 03:38:44 +000025 printf("} against {");
26 for(i = 0; i < ck_len; i++) { printf("%s%d", i?" ":"", ck_buf[i]); }
27 printf("}\n");
28
29 oid = NULL;
Lev Walkin5e033762004-09-29 13:26:15 +000030 rval = ber_decode(0, &asn_DEF_OBJECT_IDENTIFIER, (void *)&oid, buf, len);
Lev Walkinf15320b2004-06-03 03:38:44 +000031 assert(rval.code == RC_OK);
32
Lev Walkin46bf9352004-06-14 07:40:17 +000033 assert(oid->size == (ssize_t)len - 2);
Lev Walkinf15320b2004-06-03 03:38:44 +000034
35 /*
36 * Print the contents for visual debugging.
37 */
38 printf("OBJECT_IDENTIFIER_print() => ");
Lev Walkin5e033762004-09-29 13:26:15 +000039 OBJECT_IDENTIFIER_print(&asn_DEF_OBJECT_IDENTIFIER, oid, 0, _print, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +000040 printf("\n");
41
Lev Walkin0787ff02004-06-17 23:43:39 +000042 memset(arcs, 'A', sizeof(arcs));
Lev Walkin29a044b2004-06-14 07:24:36 +000043 alen = OBJECT_IDENTIFIER_get_arcs(oid,
44 arcs, sizeof(arcs[0]), sizeof(arcs)/sizeof(arcs[0]));
Lev Walkinf15320b2004-06-03 03:38:44 +000045 assert(alen > 0);
Lev Walkinf15320b2004-06-03 03:38:44 +000046
Lev Walkin6c9e0712004-08-22 03:01:37 +000047 printf("OBJECT_IDENTIFIER_get_arcs() => {");
Lev Walkinf15320b2004-06-03 03:38:44 +000048 /*
49 * Make sure they are equivalent.
50 */
Lev Walkinf15320b2004-06-03 03:38:44 +000051 for(i = 0; i < alen; i++) {
52 printf(" %lu", arcs[i]);
Lev Walkin6c9e0712004-08-22 03:01:37 +000053 if(alen == ck_len) {
54 assert(arcs[i] == (unsigned long)ck_buf[i]);
55 }
Lev Walkinf15320b2004-06-03 03:38:44 +000056 }
57 printf(" }\n");
Lev Walkin6c9e0712004-08-22 03:01:37 +000058 assert(alen == ck_len);
59
Lev Walkinf15320b2004-06-03 03:38:44 +000060}
61
62static void
63check_ROID(uint8_t *buf, size_t len, int *ck_buf, int ck_len) {
64 RELATIVE_OID_t *oid;
Lev Walkindc06f6b2004-10-20 15:50:55 +000065 asn_dec_rval_t rval;
Lev Walkinf15320b2004-06-03 03:38:44 +000066 unsigned long arcs[10];
67 int alen;
68 int i;
69
70 printf("Checking {");
Lev Walkin46bf9352004-06-14 07:40:17 +000071 for(i = 0; i < (ssize_t)len; i++) { printf("%s%02x", i?" ":"", buf[i]); }
Lev Walkinf15320b2004-06-03 03:38:44 +000072 printf("} against {");
73 for(i = 0; i < ck_len; i++) { printf("%s%d", i?" ":"", ck_buf[i]); }
74 printf("}\n");
75
76 oid = NULL;
Lev Walkin5e033762004-09-29 13:26:15 +000077 rval = ber_decode(0, &asn_DEF_RELATIVE_OID, (void *)&oid, buf, len);
Lev Walkinf15320b2004-06-03 03:38:44 +000078 assert(rval.code == RC_OK);
79
Lev Walkin46bf9352004-06-14 07:40:17 +000080 assert(oid->size == (ssize_t)len - 2);
Lev Walkinf15320b2004-06-03 03:38:44 +000081
82 /*
83 * Print the contents for visual debugging.
84 */
85 printf("RELATIVE_OID_print() => ");
Lev Walkin5e033762004-09-29 13:26:15 +000086 RELATIVE_OID_print(&asn_DEF_RELATIVE_OID, oid, 0, _print, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +000087 printf("\n");
88
Lev Walkin0787ff02004-06-17 23:43:39 +000089 memset(arcs, 'A', sizeof(arcs));
Lev Walkin29a044b2004-06-14 07:24:36 +000090 alen = RELATIVE_OID_get_arcs(oid,
91 arcs, sizeof(arcs[0]), sizeof(arcs)/sizeof(arcs[0]));
Lev Walkinf15320b2004-06-03 03:38:44 +000092 assert(alen > 0);
93 assert(alen == ck_len);
94
95 /*
96 * Make sure they are equivalent.
97 */
98 printf("RELATIVE_OID_get_arcs() => {");
99 for(i = 0; i < alen; i++) {
100 printf(" %lu", (unsigned long)arcs[i]);
Lev Walkin46bf9352004-06-14 07:40:17 +0000101 assert(arcs[i] == (unsigned long)ck_buf[i]);
Lev Walkinf15320b2004-06-03 03:38:44 +0000102 }
103 printf(" }\n");
104}
105
106/*
107 * Encode the specified array of arcs as RELATIVE-OID, decode it and compare.
108 */
109static void
110check_REGEN(int *arcs, int acount) {
111 static RELATIVE_OID_t oid;
112 unsigned long tmp_arcs[10];
113 int tmp_alen = 10;
114 int alen;
115 int ret;
116 int i;
117
Lev Walkin8db9fab2006-07-13 09:22:34 +0000118 if(0) {
119 fprintf(stderr, "Encoding (R) {");
120 for(i = 0; i < acount; i++) {
121 fprintf(stderr, " %u", arcs[i]);
122 }
123 fprintf(stderr, " }\n");
Lev Walkinf15320b2004-06-03 03:38:44 +0000124 }
Lev Walkinf15320b2004-06-03 03:38:44 +0000125
Lev Walkin0787ff02004-06-17 23:43:39 +0000126 ret = RELATIVE_OID_set_arcs(&oid, arcs, sizeof(arcs[0]), acount);
Lev Walkinf15320b2004-06-03 03:38:44 +0000127 assert(ret == 0);
128
Lev Walkin0787ff02004-06-17 23:43:39 +0000129 memset(tmp_arcs, 'A', sizeof(tmp_arcs));
Lev Walkin29a044b2004-06-14 07:24:36 +0000130 alen = RELATIVE_OID_get_arcs(&oid, tmp_arcs,
131 sizeof(tmp_arcs[0]), tmp_alen);
Lev Walkinf15320b2004-06-03 03:38:44 +0000132 assert(alen >= 0);
Lev Walkin0787ff02004-06-17 23:43:39 +0000133 assert(alen <= tmp_alen);
134 assert(alen == acount);
Lev Walkinf15320b2004-06-03 03:38:44 +0000135
Lev Walkin8db9fab2006-07-13 09:22:34 +0000136 if(0) {
137 fprintf(stderr, "Encoded (R) { ");
138 for(i = 0; i < alen; i++) {
139 fprintf(stderr, "%lu ", tmp_arcs[i]); fflush(stdout);
140 assert(arcs[i] == (int)tmp_arcs[i]);
141 }
142 fprintf(stderr, "}\n");
Lev Walkinf15320b2004-06-03 03:38:44 +0000143 }
Lev Walkin8db9fab2006-07-13 09:22:34 +0000144
Lev Walkinf15320b2004-06-03 03:38:44 +0000145}
146
147/*
148 * Encode the specified array of arcs as OBJECT IDENTIFIER,
149 * decode it and compare.
150 */
151static void
152check_REGEN_OID(int *arcs, int acount) {
153 static OBJECT_IDENTIFIER_t oid;
154 unsigned long tmp_arcs[10];
155 int tmp_alen = 10;
156 int alen;
157 int ret;
158 int i;
159
Lev Walkin8db9fab2006-07-13 09:22:34 +0000160 if(0) {
161 fprintf(stderr, "Encoding (O) {");
162 for(i = 0; i < acount; i++) {
163 fprintf(stderr, " %u", arcs[i]);
164 }
165 fprintf(stderr, " }\n");
Lev Walkinf15320b2004-06-03 03:38:44 +0000166 }
Lev Walkinf15320b2004-06-03 03:38:44 +0000167
Lev Walkin0787ff02004-06-17 23:43:39 +0000168 ret = OBJECT_IDENTIFIER_set_arcs(&oid, arcs, sizeof(arcs[0]), acount);
Lev Walkinf15320b2004-06-03 03:38:44 +0000169 assert(ret == 0);
170
Lev Walkin0787ff02004-06-17 23:43:39 +0000171 memset(tmp_arcs, 'A', sizeof(tmp_arcs));
Lev Walkin29a044b2004-06-14 07:24:36 +0000172 alen = OBJECT_IDENTIFIER_get_arcs(&oid,
173 tmp_arcs, sizeof(tmp_arcs[0]), tmp_alen);
Lev Walkinf15320b2004-06-03 03:38:44 +0000174 assert(alen >= 0);
Lev Walkin0787ff02004-06-17 23:43:39 +0000175 assert(alen <= tmp_alen);
176 assert(alen == acount);
Lev Walkinf15320b2004-06-03 03:38:44 +0000177
Lev Walkin8db9fab2006-07-13 09:22:34 +0000178 if(0) {
179 fprintf(stderr, "Encoded (O) { ");
180 for(i = 0; i < alen; i++) {
181 fprintf(stderr, "%lu ", tmp_arcs[i]); fflush(stdout);
182 assert(arcs[i] == (int)tmp_arcs[i]);
183 }
184 fprintf(stderr, "}\n");
Lev Walkinf15320b2004-06-03 03:38:44 +0000185 }
Lev Walkinf15320b2004-06-03 03:38:44 +0000186}
Lev Walkin29a044b2004-06-14 07:24:36 +0000187static int
188check_speed() {
189 uint8_t buf[] = { 0x80 | 7, 0x80 | 2, 0x80 | 3, 0x80 | 4, 13 };
190 int ret = 0;
191 int cycles = 100000000;
192 double a, b, c;
193 struct timeval tv;
194 unsigned long value;
195 int i;
196
Lev Walkin46bf9352004-06-14 07:40:17 +0000197 ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), 0, &value, sizeof(value));
Lev Walkin29a044b2004-06-14 07:24:36 +0000198 assert(ret == 0);
199 assert(value == 0x7040c20d);
200
201 gettimeofday(&tv, 0);
202 a = tv.tv_sec + tv.tv_usec / 1000000.0;
203 for(i = 0; i < cycles; i++) {
204 ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), 0,
205 &value, sizeof(value));
206 }
207 assert(ret == 0);
208 assert(value == 0x7040c20d);
209 gettimeofday(&tv, 0);
210 b = tv.tv_sec + tv.tv_usec / 1000000.0;
211 for(i = 0; i < cycles; i++) {
212 ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), 0,
213 &value, sizeof(value));
214 }
215 assert(ret == 0);
216 assert(value == 0x7040c20d);
217 gettimeofday(&tv, 0);
218 c = tv.tv_sec + tv.tv_usec / 1000000.0;
219
220 a = b - a;
221 b = c - b;
222 printf("Time for single_arc(): %f\n", a);
223 printf("Time for get_arc_l(): %f\n", b);
224
225 return 0;
226}
227
Lev Walkin92302252004-10-23 10:16:51 +0000228static void check_parse(const char *oid_txt, int retval) {
229 int ret;
230 long l[2];
Lev Walkin2c34aad2005-03-10 11:50:24 +0000231 const char *p;
Lev Walkin92302252004-10-23 10:16:51 +0000232
233 ret = OBJECT_IDENTIFIER_parse_arcs(oid_txt, -1, l, 2, &p);
234 printf("[%s] => %d == %d\n", oid_txt, ret, retval);
235 assert(ret == retval);
236 assert(p >= oid_txt);
237}
238
239static void check_xer(int expect_arcs, char *xer) {
240 asn_dec_rval_t rc;
241 RELATIVE_OID_t *st = 0;
Lev Walkinb1919382006-07-27 11:46:25 +0000242 RELATIVE_OID_t **stp = &st;
Lev Walkin92302252004-10-23 10:16:51 +0000243 long arcs[10];
244 int ret;
245 int i;
246
247 printf("[%s] => ", xer); fflush(stdout);
248 rc = asn_DEF_RELATIVE_OID.xer_decoder(0,
Lev Walkinb1919382006-07-27 11:46:25 +0000249 &asn_DEF_RELATIVE_OID, (void **)stp, "t",
Lev Walkin92302252004-10-23 10:16:51 +0000250 xer, strlen(xer));
251 if(expect_arcs == -1) {
Lev Walkinf5927112012-09-03 00:48:45 -0700252 if(rc.code != RC_OK) {
253 printf("-1\n");
Lev Walkin92302252004-10-23 10:16:51 +0000254 return;
Lev Walkinf5927112012-09-03 00:48:45 -0700255 }
Lev Walkin92302252004-10-23 10:16:51 +0000256 }
257 assert(rc.code == RC_OK);
258
259 ret = RELATIVE_OID_get_arcs(st, arcs, sizeof(arcs[0]),
260 sizeof(arcs)/sizeof(arcs[0]));
261 assert(ret < 10);
262 if(expect_arcs == -1) {
263 assert(ret == -1);
264 return;
265 }
266 for(i = 0; i < ret; i++) {
267 if(i) printf(".");
268 printf("%ld", arcs[i]);
269 assert(arcs[i] == i + 1);
270 }
271 printf(": %d == %d\n", ret, expect_arcs);
272 assert(ret == expect_arcs);
273}
274
Lev Walkinf15320b2004-06-03 03:38:44 +0000275#define CHECK_OID(n) check_OID(buf ## n, sizeof(buf ## n), \
276 buf ## n ## _check, \
277 sizeof(buf ## n ## _check)/sizeof(buf ## n ## _check[0]))
278#define CHECK_ROID(n) check_ROID(buf ## n, sizeof(buf ## n), \
279 buf ## n ## _check, \
280 sizeof(buf ## n ## _check)/sizeof(buf ## n ## _check[0]))
281#define CHECK_REGEN(n) check_REGEN(buf ## n ## _check, \
282 sizeof(buf ## n ## _check)/sizeof(buf ## n ## _check[0]))
283#define CHECK_REGEN_OID(n) check_REGEN_OID(buf ## n ## _check, \
284 sizeof(buf ## n ## _check)/sizeof(buf ## n ## _check[0]))
285
286int
Lev Walkin46bf9352004-06-14 07:40:17 +0000287main() {
Lev Walkin0787ff02004-06-17 23:43:39 +0000288 int i;
289
Lev Walkin29a044b2004-06-14 07:24:36 +0000290 /* {joint-iso-itu-t 230 3} */
Lev Walkinf15320b2004-06-03 03:38:44 +0000291 uint8_t buf1[] = {
292 0x06, /* OBJECT IDENTIFIER */
293 0x03, /* Length */
Lev Walkin29a044b2004-06-14 07:24:36 +0000294 0x82, 0x36, 0x03
Lev Walkinf15320b2004-06-03 03:38:44 +0000295 };
Lev Walkin29a044b2004-06-14 07:24:36 +0000296 int buf1_check[] = { 2, 230, 3 };
Lev Walkinf15320b2004-06-03 03:38:44 +0000297
298 /* {8571 3 2} */
299 uint8_t buf2[] = {
300 0x0D, /* RELATIVE-OID */
301 0x04, /* Length */
302 0xC2, 0x7B, 0x03, 0x02
303 };
304 int buf2_check[] = { 8571, 3, 2 };
305
Lev Walkin0787ff02004-06-17 23:43:39 +0000306 /* {joint-iso-itu-t 42 } */
307 uint8_t buf3[] = {
308 0x06, /* OBJECT IDENTIFIER */
309 0x01, /* Length */
310 0x7A
311 };
312 int buf3_check[] = { 2, 42 };
313
314 /* {joint-iso-itu-t 25957 } */
315 uint8_t buf4[] = {
316 0x06, /* OBJECT IDENTIFIER */
317 0x03, /* Length */
318 0x81, 0x80 + 0x4B, 0x35
319 };
320 int buf4_check[] = { 2, 25957 };
321
322 int buf5_check[] = { 0 };
323 int buf6_check[] = { 1 };
324 int buf7_check[] = { 80, 40 };
325 int buf8_check[] = { 127 };
326 int buf9_check[] = { 128 };
327 int buf10_check[] = { 65535, 65536 };
328 int buf11_check[] = { 100000, 0x20000, 1234, 256, 127, 128 };
329 int buf12_check[] = { 0, 0xffffffff, 0xff00ff00, 0 };
330 int buf13_check[] = { 0, 1, 2 };
331 int buf14_check[] = { 1, 38, 3 };
332 int buf15_check[] = { 0, 0, 0xf000 };
333 int buf16_check[] = { 0, 0, 0, 1, 0 };
334 int buf17_check[] = { 2, 0xffffffAf, 0xff00ff00, 0 };
Lev Walkin6c9e0712004-08-22 03:01:37 +0000335 int buf18_check[] = { 2, 2, 1, 1 };
336
337 /* { joint-iso-itu-t 2 1 1 } */
338 uint8_t buf19[] = {
339 0x06, /* OBJECT IDENTIFIER */
340 0x03, /* Length */
341 0x52, 0x01, 0x01
342 };
343 int buf19_check[] = { 2, 2, 1, 1 };
Lev Walkinf15320b2004-06-03 03:38:44 +0000344
Lev Walkin3251b8e2004-08-23 09:23:02 +0000345 /* { joint-iso-itu-t 2 1 0 1 } */
346 uint8_t buf20[] = {
347 0x06, /* OBJECT IDENTIFIER */
348 0x04, /* Length */
349 0x52, 0x01, 0x00, 0x01
350 };
351 int buf20_check[] = { 2, 2, 1, 0, 1 };
352
Lev Walkinf15320b2004-06-03 03:38:44 +0000353
354 CHECK_OID(1); /* buf1, buf1_check */
355 CHECK_ROID(2); /* buf2, buf2_check */
Lev Walkin0787ff02004-06-17 23:43:39 +0000356 CHECK_OID(3); /* buf3, buf3_check */
357 CHECK_OID(4); /* buf4, buf4_check */
Lev Walkin6c9e0712004-08-22 03:01:37 +0000358 CHECK_OID(19); /* buf19, buf19_check */
Lev Walkin3251b8e2004-08-23 09:23:02 +0000359 CHECK_OID(20); /* buf20, buf20_check */
Lev Walkinf15320b2004-06-03 03:38:44 +0000360
Lev Walkin0787ff02004-06-17 23:43:39 +0000361 CHECK_REGEN(5); /* Regenerate RELATIVE-OID */
Lev Walkinf15320b2004-06-03 03:38:44 +0000362 CHECK_REGEN(6);
363 CHECK_REGEN(7);
364 CHECK_REGEN(8);
365 CHECK_REGEN(9);
366 CHECK_REGEN(10);
Lev Walkin0787ff02004-06-17 23:43:39 +0000367 CHECK_REGEN(11);
368 CHECK_REGEN(12);
369 CHECK_REGEN(13);
370 CHECK_REGEN(14);
371 CHECK_REGEN(15);
372 CHECK_REGEN(16);
373 CHECK_REGEN(17);
Lev Walkinf15320b2004-06-03 03:38:44 +0000374 CHECK_REGEN_OID(1); /* Regenerate OBJECT IDENTIFIER */
Lev Walkin0787ff02004-06-17 23:43:39 +0000375 CHECK_REGEN_OID(3); /* Regenerate OBJECT IDENTIFIER */
376 CHECK_REGEN_OID(4); /* Regenerate OBJECT IDENTIFIER */
Lev Walkinf15320b2004-06-03 03:38:44 +0000377 CHECK_REGEN_OID(13);
Lev Walkin0787ff02004-06-17 23:43:39 +0000378 CHECK_REGEN_OID(14);
379 CHECK_REGEN_OID(15);
380 CHECK_REGEN_OID(16);
381 CHECK_REGEN_OID(17);
Lev Walkin6c9e0712004-08-22 03:01:37 +0000382 CHECK_REGEN_OID(18);
Lev Walkin3251b8e2004-08-23 09:23:02 +0000383 CHECK_REGEN_OID(19);
384 CHECK_REGEN_OID(20);
Lev Walkin0787ff02004-06-17 23:43:39 +0000385
Lev Walkinf5927112012-09-03 00:48:45 -0700386 check_parse("", -1);
387 check_parse(" ", -1);
388 check_parse(" ", -1);
Lev Walkin92302252004-10-23 10:16:51 +0000389 check_parse(".", -1);
390 check_parse(" .", -1);
Lev Walkinf5927112012-09-03 00:48:45 -0700391 check_parse(".1", -1);
392 check_parse("1.", -1);
393 check_parse("1. ", -1);
394 check_parse(".1. ", -1);
395 check_parse(" .1. ", -1);
Lev Walkin92302252004-10-23 10:16:51 +0000396 check_parse(" 1", 1);
397 check_parse(" 1.2", 2);
398 check_parse(" 1.", -1);
399 check_parse(" 1. ", -1);
400 check_parse("1. ", -1);
401 check_parse("1.2", 2);
Lev Walkinf5927112012-09-03 00:48:45 -0700402 check_parse("1.2 ", 2);
403 check_parse("1.2 ", 2);
404 check_parse(" 1.2 ", 2);
405 check_parse("1. 2", -1);
406 check_parse("1 .2", -1);
Lev Walkin92302252004-10-23 10:16:51 +0000407 check_parse("10.30.234.234", 4);
408 check_parse("10.30.234.234 ", 4);
409 check_parse("10.30.234. 234 ", -1);
410 check_parse("10.30.234.234.", -1);
411 check_parse("1.2000000000.3", 3);
412 check_parse("1.2147483647.3", 3);
413 if(sizeof(long) == 4) {
414 check_parse("1.2147483648.3", -1); /* overflow on ILP32 */
Lev Walkina7d1fb32012-01-23 01:21:55 +0000415 check_parse("1.2147483649.3", -1); /* overflow on ILP32 */
Lev Walkin92302252004-10-23 10:16:51 +0000416 check_parse("1.3000000000.3", -1);
417 check_parse("1.4000000000.3", -1);
418 check_parse("1.5000000000.3", -1);
419 check_parse("1.6000000000.3", -1);
420 check_parse("1.9000000000.3", -1);
Lev Walkina7d1fb32012-01-23 01:21:55 +0000421 } else if(sizeof(long) == 8) {
Lev Walkin92302252004-10-23 10:16:51 +0000422 check_parse("1.2147483648.3", 3);
Lev Walkina7d1fb32012-01-23 01:21:55 +0000423 check_parse("1.9223372036854775807.3", 3);
424 check_parse("1.9223372036854775808.3", -1);
Lev Walkin92302252004-10-23 10:16:51 +0000425 }
426 check_parse("1.900a0000000.3", -1);
427 check_parse("1.900a.3", -1);
428
Lev Walkinf5927112012-09-03 00:48:45 -0700429 check_xer(-1, "<t></t>");
Lev Walkin92302252004-10-23 10:16:51 +0000430 check_xer(2, "<t>1.2</t>");
431 check_xer(3, "<t>1.2.3</t>");
432 check_xer(3, "<t> 1.2.3 </t>");
433 check_xer(-1, "<t>1.2.3 1</t>");
434
Lev Walkin0787ff02004-06-17 23:43:39 +0000435 for(i = 0; i < 100000; i++) {
436 int bufA_check[3] = { 2, i, rand() };
437 int bufB_check[2] = { rand(), i * 121 };
438 CHECK_REGEN(A);
439 CHECK_REGEN_OID(A);
440 CHECK_REGEN(B);
441 if(i > 100) i++;
442 if(i > 500) i++;
443 if(i > 1000) i += 3;
444 if(i > 5000) i += 151;
445 }
Lev Walkinf15320b2004-06-03 03:38:44 +0000446
Lev Walkinc4c61962004-06-14 08:17:27 +0000447 if(getenv("CHECK_SPEED")) {
448 /* Useful for developers only */
449 check_speed();
450 }
Lev Walkin29a044b2004-06-14 07:24:36 +0000451
Lev Walkinf15320b2004-06-03 03:38:44 +0000452 return 0;
453}
Lev Walkin725883b2006-10-09 12:07:58 +0000454