blob: eb0a0147923b458bf35d04edc88e7d673be8f641 [file] [log] [blame]
Lev Walkin4eceeba2007-07-23 06:48:26 +00001#include <stdio.h>
2#include <assert.h>
Lev Walkin6cbed3d2017-10-07 16:42:41 -07003#include <errno.h>
Lev Walkin29a044b2004-06-14 07:24:36 +00004#include <sys/time.h>
Lev Walkinf15320b2004-06-03 03:38:44 +00005
Lev Walkin4eceeba2007-07-23 06:48:26 +00006#include <OBJECT_IDENTIFIER.h>
7#include <RELATIVE-OID.h>
8
Lev Walkinf15320b2004-06-03 03:38:44 +00009static int
10_print(const void *buffer, size_t size, void *app_key) {
Lev Walkin46bf9352004-06-14 07:40:17 +000011 (void)app_key;
Lev Walkinf15320b2004-06-03 03:38:44 +000012 fwrite(buffer, size, 1, stdout);
13 return 0;
14}
15
16static void
Lev Walkin6cbed3d2017-10-07 16:42:41 -070017check_OID(int lineno, uint8_t *buf, size_t len, unsigned *ck_buf, int ck_len) {
Lev Walkinf15320b2004-06-03 03:38:44 +000018 OBJECT_IDENTIFIER_t *oid;
Lev Walkindc06f6b2004-10-20 15:50:55 +000019 asn_dec_rval_t rval;
Lev Walkin588bf0f2017-10-13 23:51:16 -070020 uint32_t arcs[10];
Lev Walkinf15320b2004-06-03 03:38:44 +000021 int alen;
22 int i;
23
Lev Walkin0995f352017-09-17 23:16:38 -070024 printf("%03d: Checking {", lineno);
Lev Walkin46bf9352004-06-14 07:40:17 +000025 for(i = 0; i < (int)len; i++) { printf("%s%02x", i?" ":"", buf[i]); }
Lev Walkinf15320b2004-06-03 03:38:44 +000026 printf("} against {");
Lev Walkin6cbed3d2017-10-07 16:42:41 -070027 for(i = 0; i < ck_len; i++) { printf("%s%u", i?" ":"", ck_buf[i]); }
Lev Walkinf15320b2004-06-03 03:38:44 +000028 printf("}\n");
29
30 oid = NULL;
Lev Walkin5e033762004-09-29 13:26:15 +000031 rval = ber_decode(0, &asn_DEF_OBJECT_IDENTIFIER, (void *)&oid, buf, len);
Lev Walkinf15320b2004-06-03 03:38:44 +000032 assert(rval.code == RC_OK);
33
Lev Walkin494fb702017-08-07 20:07:00 -070034 assert((ssize_t)oid->size == (ssize_t)len - 2);
Lev Walkinf15320b2004-06-03 03:38:44 +000035
36 /*
37 * Print the contents for visual debugging.
38 */
39 printf("OBJECT_IDENTIFIER_print() => ");
Lev Walkin5e033762004-09-29 13:26:15 +000040 OBJECT_IDENTIFIER_print(&asn_DEF_OBJECT_IDENTIFIER, oid, 0, _print, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +000041 printf("\n");
42
Lev Walkin0787ff02004-06-17 23:43:39 +000043 memset(arcs, 'A', sizeof(arcs));
Lev Walkin588bf0f2017-10-13 23:51:16 -070044 alen =
45 OBJECT_IDENTIFIER_get_arcs(oid, arcs, sizeof(arcs) / sizeof(arcs[0]));
46 assert(alen > 0);
Lev Walkinf15320b2004-06-03 03:38:44 +000047
Lev Walkin6c9e0712004-08-22 03:01:37 +000048 printf("OBJECT_IDENTIFIER_get_arcs() => {");
Lev Walkinf15320b2004-06-03 03:38:44 +000049 /*
50 * Make sure they are equivalent.
51 */
Lev Walkinf15320b2004-06-03 03:38:44 +000052 for(i = 0; i < alen; i++) {
Lev Walkin588bf0f2017-10-13 23:51:16 -070053 printf(" %" PRIu32, arcs[i]);
54 if(alen == ck_len) {
Lev Walkin6cbed3d2017-10-07 16:42:41 -070055 assert(arcs[i] == ck_buf[i]);
Lev Walkin6c9e0712004-08-22 03:01:37 +000056 }
Lev Walkinf15320b2004-06-03 03:38:44 +000057 }
58 printf(" }\n");
Lev Walkin6c9e0712004-08-22 03:01:37 +000059 assert(alen == ck_len);
60
Lev Walkin229ad002017-09-18 20:13:49 -070061 ASN_STRUCT_FREE(asn_DEF_OBJECT_IDENTIFIER, oid);
Lev Walkinf15320b2004-06-03 03:38:44 +000062}
63
64static void
Lev Walkin588bf0f2017-10-13 23:51:16 -070065check_ROID(int lineno, uint8_t *buf, size_t len, unsigned *ck_buf,
66 size_t ck_len) {
67 RELATIVE_OID_t *oid;
Lev Walkindc06f6b2004-10-20 15:50:55 +000068 asn_dec_rval_t rval;
Lev Walkin588bf0f2017-10-13 23:51:16 -070069 uint32_t arcs[10];
Lev Walkinf15320b2004-06-03 03:38:44 +000070 int alen;
Lev Walkin588bf0f2017-10-13 23:51:16 -070071 size_t i;
Lev Walkinf15320b2004-06-03 03:38:44 +000072
Lev Walkin0995f352017-09-17 23:16:38 -070073 printf("%03d: Checking {", lineno);
Lev Walkin588bf0f2017-10-13 23:51:16 -070074 for(i = 0; i < len; i++) { printf("%s%02x", i?" ":"", buf[i]); }
Lev Walkinf15320b2004-06-03 03:38:44 +000075 printf("} against {");
Lev Walkin6cbed3d2017-10-07 16:42:41 -070076 for(i = 0; i < ck_len; i++) { printf("%s%u", i?" ":"", ck_buf[i]); }
Lev Walkinf15320b2004-06-03 03:38:44 +000077 printf("}\n");
78
79 oid = NULL;
Lev Walkin5e033762004-09-29 13:26:15 +000080 rval = ber_decode(0, &asn_DEF_RELATIVE_OID, (void *)&oid, buf, len);
Lev Walkinf15320b2004-06-03 03:38:44 +000081 assert(rval.code == RC_OK);
82
Lev Walkin494fb702017-08-07 20:07:00 -070083 assert((ssize_t)oid->size == (ssize_t)len - 2);
Lev Walkinf15320b2004-06-03 03:38:44 +000084
85 /*
86 * Print the contents for visual debugging.
87 */
88 printf("RELATIVE_OID_print() => ");
Lev Walkin5e033762004-09-29 13:26:15 +000089 RELATIVE_OID_print(&asn_DEF_RELATIVE_OID, oid, 0, _print, 0);
Lev Walkinf15320b2004-06-03 03:38:44 +000090 printf("\n");
91
Lev Walkin0787ff02004-06-17 23:43:39 +000092 memset(arcs, 'A', sizeof(arcs));
Lev Walkin588bf0f2017-10-13 23:51:16 -070093 alen = RELATIVE_OID_get_arcs(oid, arcs, sizeof(arcs) / sizeof(arcs[0]));
94 assert(alen > 0);
Vasil Velichkov72b10442017-10-19 04:38:38 +030095 assert((size_t)alen == ck_len);
Lev Walkinf15320b2004-06-03 03:38:44 +000096
97 /*
98 * Make sure they are equivalent.
99 */
100 printf("RELATIVE_OID_get_arcs() => {");
Vasil Velichkov72b10442017-10-19 04:38:38 +0300101 for(i = 0; i < (size_t)alen; i++) {
Lev Walkin588bf0f2017-10-13 23:51:16 -0700102 printf(" %" PRIu32, arcs[i]);
103 assert(arcs[i] == ck_buf[i]);
Lev Walkinf15320b2004-06-03 03:38:44 +0000104 }
105 printf(" }\n");
Lev Walkin229ad002017-09-18 20:13:49 -0700106 ASN_STRUCT_FREE(asn_DEF_RELATIVE_OID, oid);
Lev Walkinf15320b2004-06-03 03:38:44 +0000107}
108
Lev Walkin29a044b2004-06-14 07:24:36 +0000109static int
110check_speed() {
111 uint8_t buf[] = { 0x80 | 7, 0x80 | 2, 0x80 | 3, 0x80 | 4, 13 };
112 int ret = 0;
113 int cycles = 100000000;
114 double a, b, c;
115 struct timeval tv;
Lev Walkin588bf0f2017-10-13 23:51:16 -0700116 uint32_t value;
Lev Walkin29a044b2004-06-14 07:24:36 +0000117 int i;
118
Lev Walkin588bf0f2017-10-13 23:51:16 -0700119 ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), &value);
120 assert(ret == 0);
Lev Walkin29a044b2004-06-14 07:24:36 +0000121 assert(value == 0x7040c20d);
122
123 gettimeofday(&tv, 0);
124 a = tv.tv_sec + tv.tv_usec / 1000000.0;
125 for(i = 0; i < cycles; i++) {
Lev Walkin588bf0f2017-10-13 23:51:16 -0700126 ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), &value);
Lev Walkin29a044b2004-06-14 07:24:36 +0000127 }
128 assert(ret == 0);
129 assert(value == 0x7040c20d);
130 gettimeofday(&tv, 0);
131 b = tv.tv_sec + tv.tv_usec / 1000000.0;
132 for(i = 0; i < cycles; i++) {
Lev Walkin588bf0f2017-10-13 23:51:16 -0700133 ret = OBJECT_IDENTIFIER_get_single_arc(buf, sizeof(buf), &value);
134 }
Lev Walkin29a044b2004-06-14 07:24:36 +0000135 assert(ret == 0);
136 assert(value == 0x7040c20d);
137 gettimeofday(&tv, 0);
138 c = tv.tv_sec + tv.tv_usec / 1000000.0;
139
140 a = b - a;
141 b = c - b;
142 printf("Time for single_arc(): %f\n", a);
143 printf("Time for get_arc_l(): %f\n", b);
144
145 return 0;
146}
147
Lev Walkin588bf0f2017-10-13 23:51:16 -0700148#define CHECK_PARSE(a, b) check_parse(__LINE__, a, b)
149static void check_parse(int lineno, const char *oid_txt, int retval) {
Lev Walkin92302252004-10-23 10:16:51 +0000150 int ret;
Lev Walkin588bf0f2017-10-13 23:51:16 -0700151 uint32_t arcs[2];
Lev Walkincad560a2013-03-16 07:00:58 -0700152 const char *p = oid_txt - 13;
153 assert(p < oid_txt);
Lev Walkin92302252004-10-23 10:16:51 +0000154
Lev Walkin588bf0f2017-10-13 23:51:16 -0700155 ret = OBJECT_IDENTIFIER_parse_arcs(oid_txt, -1, arcs, 2, &p);
156 printf("%03d: [%s] => %d == %d\n", lineno, oid_txt, ret, retval);
Lev Walkin92302252004-10-23 10:16:51 +0000157 assert(ret == retval);
158 assert(p >= oid_txt);
159}
160
Lev Walkin588bf0f2017-10-13 23:51:16 -0700161static void
162check_xer(int lineno, asn_TYPE_descriptor_t *td, ssize_t expect_arcs, char *xer,
163 const asn_oid_arc_t *expected_arcs) {
164 asn_dec_rval_t rc;
165 void *st = 0;
166 uint32_t arcs[10];
167 ssize_t got_arcs;
168 ssize_t i;
Lev Walkin92302252004-10-23 10:16:51 +0000169
Lev Walkin588bf0f2017-10-13 23:51:16 -0700170 printf("%03d: [%s] => ", lineno, xer);
171 fflush(stdout);
172 rc = td->op->xer_decoder(0, td, (void **)&st, "t", xer, strlen(xer));
173 if(expect_arcs == -1) {
Lev Walkinf5927112012-09-03 00:48:45 -0700174 if(rc.code != RC_OK) {
175 printf("-1\n");
Lev Walkin588bf0f2017-10-13 23:51:16 -0700176 ASN_STRUCT_FREE(*td, st);
Lev Walkin92302252004-10-23 10:16:51 +0000177 return;
Lev Walkinf5927112012-09-03 00:48:45 -0700178 }
Lev Walkin92302252004-10-23 10:16:51 +0000179 }
180 assert(rc.code == RC_OK);
181
Lev Walkin588bf0f2017-10-13 23:51:16 -0700182 if(td == &asn_DEF_OBJECT_IDENTIFIER) {
183 got_arcs = OBJECT_IDENTIFIER_get_arcs(st, arcs,
184 sizeof(arcs) / sizeof(arcs[0]));
185 } else if(td == &asn_DEF_RELATIVE_OID) {
186 got_arcs =
187 RELATIVE_OID_get_arcs(st, arcs, sizeof(arcs) / sizeof(arcs[0]));
188 } else {
189 assert(!"Unreachable");
190 }
191 assert(got_arcs < 10);
Lev Walkin92302252004-10-23 10:16:51 +0000192 if(expect_arcs == -1) {
Lev Walkin588bf0f2017-10-13 23:51:16 -0700193 assert(got_arcs == -1);
194 ASN_STRUCT_FREE(*td, st);
Lev Walkin92302252004-10-23 10:16:51 +0000195 return;
196 }
Lev Walkin588bf0f2017-10-13 23:51:16 -0700197 for(i = 0; i < got_arcs; i++) {
Lev Walkin92302252004-10-23 10:16:51 +0000198 if(i) printf(".");
Lev Walkin588bf0f2017-10-13 23:51:16 -0700199 printf("%" PRIu32, arcs[i]);
200 if(arcs[i] != expected_arcs[i]) {
201 printf(" != %" PRIu32 "\n", expected_arcs[i]);
202 }
203 assert(arcs[i] == expected_arcs[i]);
Lev Walkin92302252004-10-23 10:16:51 +0000204 }
Lev Walkin588bf0f2017-10-13 23:51:16 -0700205 printf(": %zd == %zd\n", got_arcs, expect_arcs);
206 assert(got_arcs == expect_arcs);
207 ASN_STRUCT_FREE(*td, st);
Lev Walkin92302252004-10-23 10:16:51 +0000208}
209
Lev Walkin0995f352017-09-17 23:16:38 -0700210#define CHECK_OID(n) \
211 check_OID(__LINE__, buf##n, sizeof(buf##n), buf##n##_check, \
212 sizeof(buf##n##_check) / sizeof(buf##n##_check[0]))
213#define CHECK_ROID(n) \
214 check_ROID(__LINE__, buf##n, sizeof(buf##n), buf##n##_check, \
215 sizeof(buf##n##_check) / sizeof(buf##n##_check[0]))
Lev Walkinf15320b2004-06-03 03:38:44 +0000216
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700217static void
218check_binary_parsing() {
Lev Walkin0787ff02004-06-17 23:43:39 +0000219
Lev Walkin588bf0f2017-10-13 23:51:16 -0700220 /* {0 0} */
221 uint8_t buf0[] = {
222 0x06, /* OBJECT IDENTIFIER */
223 0x01, /* Length */
224 0x00
225 };
226 uint32_t buf0_check[] = { 0, 0 };
227
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700228 /* {joint-iso-itu-t 230 3} */
Lev Walkinf15320b2004-06-03 03:38:44 +0000229 uint8_t buf1[] = {
230 0x06, /* OBJECT IDENTIFIER */
231 0x03, /* Length */
Lev Walkin29a044b2004-06-14 07:24:36 +0000232 0x82, 0x36, 0x03
Lev Walkinf15320b2004-06-03 03:38:44 +0000233 };
Lev Walkin588bf0f2017-10-13 23:51:16 -0700234 uint32_t buf1_check[] = { 2, 230, 3 };
Lev Walkinf15320b2004-06-03 03:38:44 +0000235
Lev Walkin0787ff02004-06-17 23:43:39 +0000236 /* {joint-iso-itu-t 42 } */
Lev Walkin588bf0f2017-10-13 23:51:16 -0700237 uint8_t buf2[] = {
Lev Walkin0787ff02004-06-17 23:43:39 +0000238 0x06, /* OBJECT IDENTIFIER */
239 0x01, /* Length */
240 0x7A
241 };
Lev Walkin588bf0f2017-10-13 23:51:16 -0700242 uint32_t buf2_check[] = { 2, 42 };
Lev Walkin0787ff02004-06-17 23:43:39 +0000243
244 /* {joint-iso-itu-t 25957 } */
Lev Walkin588bf0f2017-10-13 23:51:16 -0700245 uint8_t buf3[] = {
Lev Walkin0787ff02004-06-17 23:43:39 +0000246 0x06, /* OBJECT IDENTIFIER */
247 0x03, /* Length */
248 0x81, 0x80 + 0x4B, 0x35
249 };
Lev Walkin588bf0f2017-10-13 23:51:16 -0700250 uint32_t buf3_check[] = { 2, 25957 };
Lev Walkin0787ff02004-06-17 23:43:39 +0000251
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700252 /* { jounsigned-iso-itu-t 2 1 1 } */
Lev Walkin588bf0f2017-10-13 23:51:16 -0700253 uint8_t buf4[] = {
Lev Walkin6c9e0712004-08-22 03:01:37 +0000254 0x06, /* OBJECT IDENTIFIER */
255 0x03, /* Length */
256 0x52, 0x01, 0x01
257 };
Lev Walkin588bf0f2017-10-13 23:51:16 -0700258 uint32_t buf4_check[] = { 2, 2, 1, 1 };
Lev Walkinf15320b2004-06-03 03:38:44 +0000259
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700260 /* { jounsigned-iso-itu-t 2 1 0 1 } */
Lev Walkin588bf0f2017-10-13 23:51:16 -0700261 uint8_t buf5[] = {
Lev Walkin3251b8e2004-08-23 09:23:02 +0000262 0x06, /* OBJECT IDENTIFIER */
263 0x04, /* Length */
264 0x52, 0x01, 0x00, 0x01
265 };
Lev Walkin588bf0f2017-10-13 23:51:16 -0700266 uint32_t buf5_check[] = { 2, 2, 1, 0, 1 };
Lev Walkin3251b8e2004-08-23 09:23:02 +0000267
Lev Walkin588bf0f2017-10-13 23:51:16 -0700268 /* {0 0} */
269 uint8_t buf10[] = {
270 0x0D, /* RELATIVE-OID */
271 0x01, /* Length */
272 0x00
273 };
274 uint32_t buf10_check[] = { 0 };
275
276 /* {0 0} */
277 uint8_t buf11[] = {
278 0x0D, /* RELATIVE-OID */
279 0x02, /* Length */
280 0x00, 0x00
281 };
282 uint32_t buf11_check[] = { 0, 0 };
283
284 /* {8571 3 2} */
285 uint8_t buf12[] = {
286 0x0D, /* RELATIVE-OID */
287 0x04, /* Length */
288 0xC2, 0x7B, 0x03, 0x02
289 };
290 uint32_t buf12_check[] = { 8571, 3, 2 };
291
292 CHECK_OID(0);
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700293 CHECK_OID(1);
Lev Walkin588bf0f2017-10-13 23:51:16 -0700294 CHECK_OID(2);
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700295 CHECK_OID(3);
296 CHECK_OID(4);
297 CHECK_OID(5);
Lev Walkin588bf0f2017-10-13 23:51:16 -0700298
299 CHECK_ROID(10);
300 CHECK_ROID(11);
301 CHECK_ROID(12);
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700302}
Lev Walkinf15320b2004-06-03 03:38:44 +0000303
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700304static void
305check_text_parsing() {
Lev Walkin588bf0f2017-10-13 23:51:16 -0700306 CHECK_PARSE("", 0);
307 CHECK_PARSE(" ", 0);
308 CHECK_PARSE(".", -1);
309 CHECK_PARSE(" .", -1);
310 CHECK_PARSE(".1", -1);
311 CHECK_PARSE("1.", -1);
312 CHECK_PARSE("1. ", -1);
313 CHECK_PARSE(".1. ", -1);
314 CHECK_PARSE(" .1. ", -1);
315 CHECK_PARSE(" 1", 1);
316 CHECK_PARSE(" 1.2", 2);
317 CHECK_PARSE(" 1.", -1);
318 CHECK_PARSE(" 1. ", -1);
319 CHECK_PARSE("1. ", -1);
320 CHECK_PARSE("1.2", 2);
321 CHECK_PARSE("1.2 ", 2);
322 CHECK_PARSE("1.2 ", 2);
323 CHECK_PARSE(" 1.2 ", 2);
324 CHECK_PARSE("1. 2", -1);
325 CHECK_PARSE("1 .2", -1);
326 CHECK_PARSE(" 1 .2", -1);
327 CHECK_PARSE(" 1 .2 ", -1);
328 CHECK_PARSE("1 .2 ", -1);
329 CHECK_PARSE("1.+1", -1);
330 CHECK_PARSE("2.0", 2);
331 CHECK_PARSE("2.1", 2);
332 CHECK_PARSE("10.30.234.234", 4);
333 CHECK_PARSE("10.30.234.234 ", 4);
334 CHECK_PARSE("10.30.234. 234 ", -1);
335 CHECK_PARSE("10.30.234.234.", -1);
336 CHECK_PARSE("1.2000000000.3", 3);
337 CHECK_PARSE("1.2147483647.3", 3);
338 CHECK_PARSE("1.4294967295.3", 3);
339 CHECK_PARSE("1.4294967296.3", -1); /* overflow on ILP32 */
340 CHECK_PARSE("1.3000000000.3", 3);
341 CHECK_PARSE("1.4000000000.3", 3);
342 CHECK_PARSE("1.5000000000.3", -1);
343 CHECK_PARSE("1.6000000000.3", -1);
344 CHECK_PARSE("1.9000000000.3", -1);
345 CHECK_PARSE("1.900a0000000.3", -1);
346 CHECK_PARSE("1.900a.3", -1);
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700347}
Lev Walkin92302252004-10-23 10:16:51 +0000348
Lev Walkin588bf0f2017-10-13 23:51:16 -0700349#define CHECK_XER(a, b, c, data) check_xer(__LINE__, &asn_DEF_##a, b, c, data)
350
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700351static void
352check_xer_parsing() {
Lev Walkin588bf0f2017-10-13 23:51:16 -0700353 asn_oid_arc_t zero_zero[] = {0, 0};
354 asn_oid_arc_t zero_one[] = {0, 1};
355 asn_oid_arc_t one_zero[] = {1, 0};
356 asn_oid_arc_t one_one[] = {1, 1};
357 asn_oid_arc_t one_two[] = {1, 2};
358 asn_oid_arc_t two_one[] = {2, 1};
359 asn_oid_arc_t one_two_three[] = {1, 2,3};
360
361 CHECK_XER(RELATIVE_OID, -1, "<t></t>", 0);
362 CHECK_XER(RELATIVE_OID, -1, "<t>1.</t>", 0);
363 CHECK_XER(RELATIVE_OID, -1, "<t>2.1.</t>", 0);
364 CHECK_XER(RELATIVE_OID, 2, "<t>0.0</t>", zero_zero);
365 CHECK_XER(RELATIVE_OID, 2, "<t>0.1</t>", zero_one);
366 CHECK_XER(RELATIVE_OID, 2, "<t>1.0</t>", one_zero);
367 CHECK_XER(RELATIVE_OID, 2, "<t>1.2</t>", one_two);
368 CHECK_XER(RELATIVE_OID, -1, "<t>1.-2</t>", 0);
369 CHECK_XER(RELATIVE_OID, -1, "<t>1.+2</t>", 0);
370 CHECK_XER(RELATIVE_OID, 3, "<t>1.2.3</t>", one_two_three);
371 CHECK_XER(RELATIVE_OID, 3, "<t> 1.2.3 </t>", one_two_three);
372 CHECK_XER(RELATIVE_OID, -1, "<t>1.2.3 1</t>", 0);
373 CHECK_XER(RELATIVE_OID, 2, "<t>2.1</t>", two_one);
374
375 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t></t>", 0);
376 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1</t>", 0);
377 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.</t>", 0);
378 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>2.1.</t>", 0);
379 CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>0.0</t>", zero_zero);
380 CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>0.1</t>", zero_one);
381 CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>1.0</t>", one_zero);
382 CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>1.1</t>", one_one);
383 CHECK_XER(OBJECT_IDENTIFIER, 2, "<t>1.2</t>", one_two);
384 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.-2</t>", 0);
385 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.+2</t>", 0);
386 CHECK_XER(OBJECT_IDENTIFIER, 3, "<t>1.2.3</t>", one_two_three);
387 CHECK_XER(OBJECT_IDENTIFIER, 3, "<t> 1.2.3 </t>", one_two_three);
388 CHECK_XER(OBJECT_IDENTIFIER, -1, "<t>1.2.3 1</t>", 0);
389 CHECK_XER(OBJECT_IDENTIFIER, 2, "<t> 2.1 </t>", two_one);
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700390}
Lev Walkin92302252004-10-23 10:16:51 +0000391
Lev Walkin6cbed3d2017-10-07 16:42:41 -0700392int
393main() {
394 check_binary_parsing();
395 check_text_parsing();
396 check_xer_parsing();
Lev Walkinf15320b2004-06-03 03:38:44 +0000397
Lev Walkinc4c61962004-06-14 08:17:27 +0000398 if(getenv("CHECK_SPEED")) {
399 /* Useful for developers only */
400 check_speed();
401 }
Lev Walkin29a044b2004-06-14 07:24:36 +0000402
Lev Walkinf15320b2004-06-03 03:38:44 +0000403 return 0;
404}
Lev Walkin725883b2006-10-09 12:07:58 +0000405