|
|
1.1 root 1: -- bigpepytest.py - test out most of the pepy constructs
2:
3: -- $Header: /f/osi/pepy/RCS/bigpepytest.py,v 7.0 89/11/23 22:11:37 mrose Rel $
4: --
5: --
6: -- $Log: bigpepytest.py,v $
7: -- Revision 7.0 89/11/23 22:11:37 mrose
8: -- Release 6.0
9: --
10:
11: --
12: -- NOTICE
13: --
14: -- Acquisition, use, and distribution of this module and related
15: -- materials are subject to the restrictions of a license agreement.
16: -- Consult the Preface in the User's Manual for the full terms of
17: -- this agreement.
18: --
19: --
20:
21:
22: BigTest DEFINITIONS ::=
23:
24: %{
25: #ifndef lint
26: static char *rcsid = "$Header: /f/osi/pepy/RCS/bigpepytest.py,v 7.0 89/11/23 22:11:37 mrose Rel $";
27: #endif
28:
29: #include <stdio.h>
30:
31:
32: static int count;
33:
34: static char *myname = "bigpepytest";
35:
36:
37: void adios ();
38:
39: /* */
40:
41: /* ARGSUSED */
42:
43: main (argc, argv, envp)
44: int argc;
45: char **argv,
46: **envp;
47: {
48: PE pe;
49:
50: myname = argv[0];
51:
52: if (encoder_BigTest_Test1 (&pe, 1, NULL, NULLCP, NULLCP) == NOTOK)
53: adios (NULLCP, "encoder fails");
54:
55: if (printer_BigTest_Test1 (pe, 1, NULLIP, NULLVP, NULLCP) == NOTOK)
56: adios (NULLCP, "printer fails");
57:
58: if (decoder_BigTest_Test1 (pe, 1, NULLIP, NULLVP, NULLCP) == NOTOK)
59: adios (NULLCP, "decoder fails");
60:
61: exit (0); /* NOTREACHED */
62: }
63: %}
64:
65: BEGIN
66:
67:
68: ENCODER encoder
69:
70: Test1 %{ int fd = rnd (2); %} ::=
71: SEQUENCE {
72: boolean
73: BOOLEAN
74: [[b rnd(2)]],
75:
76: taggedBoolean
77: [0] BOOLEAN
78: [[b rnd (2)]],
79:
80: implicitTaggedBoolean
81: [PRIVATE 0] IMPLICIT BOOLEAN
82: [[b rnd(2)]],
83:
84: integer
85: INTEGER
86: [[i rnd(10000)]],
87:
88: taggedInteger
89: [APPLICATION 1] INTEGER
90: [[i rnd(10000)]],
91:
92: implicitTaggedInteger
93: [UNIVERSAL 1] IMPLICIT INTEGER
94: [[i rnd(10000)]],
95:
96: integerOneValue
97: INTEGER
98: [[i 1]] { nn(1) },
99:
100: taggedIntegerOneValue
101: [PRIVATE 2] INTEGER
102: [[i 1]] { nn(1) },
103:
104: integerManyValues
105: INTEGER
106: [[i rnd(3) + 1]]
107: { nn1(1), nn2(2), nn3(3) },
108:
109: implicitTaggedIntegerManyValues
110: [2] IMPLICIT INTEGER
111: [[i rnd(3) + 1]]
112: { nn1(1), nn2(2), nn3(3) },
113:
114: bitstring
115: %{
116: int i;
117: $$ = pe_alloc(PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_BITS);
118: $$ = prim2bit($$);
119: for(i = 0; i < 32; i++)
120: if( rnd(2) )
121: (void) bit_on($$, i);
122: %}
123: BITSTRING,
124:
125: taggedBitstring [UNIVERSAL 3]
126: %{
127: int i;
128: $$ = pe_alloc(PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_BITS);
129: $$ = prim2bit($$);
130: for(i = 0; i < 32; i++)
131: if( rnd(2) && rnd(3) )
132: (void) bit_on($$, i);
133: %}
134: BITSTRING,
135:
136: bitstring2
137: BIT STRING
138: [[x int2strb(0177, 8) $ 8]],
139:
140: taggedBitstring2
141: [4] BIT STRING
142: [[x int2strb(0177, 8) $ 8]],
143:
144: implicitTaggedBitstring2
145: [PRIVATE 4] IMPLICIT BIT STRING
146: [[x int2strb(0xffff, 16) $ 16]],
147:
148: bitstringValue
149: BIT STRING
150: [[x int2strb(1, 1) $ 1]]
151: { nn1(1) },
152:
153: taggedBitstringValue
154: [APPLICATION 5] BIT STRING
155: [[x int2strb(1, 1) $ 1]]
156: { nn1(1) },
157:
158: bitstringValues
159: BIT STRING
160: [[x int2strb(03, 3) $ 3]]
161: { nn1(1), nn2(2), nn3(3) },
162:
163: taggedBitstringValues
164: [PRIVATE 6] BIT STRING
165: [[x int2strb(03, 3) $ 3]]
166: { nn1(1), nn2(2), nn3(3) },
167:
168: implicitTaggedBitstringValues
169: [APPLICATION 6] IMPLICIT BIT STRING
170: [[x int2strb(03, 3) $ 3]]
171: { nn1(1), nn2(2), nn3(3) },
172:
173: octetstring
174: OCTET STRING
175: [[s "hello world"]],
176:
177: taggedOctetstring
178: [UNIVERSAL 7] OCTET STRING
179: [[s "hello world"]],
180:
181: octetstring2
182: OCTETSTRING
183: [[s "goodbye world"]],
184:
185: implicitTaggedOctetstring2
186: [PRIVATE 7] IMPLICIT OCTETSTRING
187: [[o "goodbye world" $ 8]],
188:
189: null
190: NULL,
191:
192: taggedNull
193: [8] NULL,
194:
195: implicitTaggedNull
196: [PRIVATE 8] IMPLICIT NULL,
197:
198: sequence
199: SEQUENCE,
200:
201: taggedSequence
202: [APPLICATION 9] SEQUENCE,
203:
204: implicitTaggedSequence
205: [PRIVATE 9] SEQUENCE,
206:
207: sequenceOf
208: SEQUENCE OF
209: <<count = rnd(10); count >= 0; count-->>
210: SequenceA,
211:
212: taggedSequenceOf
213: [PRIVATE 10] SEQUENCE OF
214: <<count = rnd(10); count >= 0; count-->>
215: SequenceA,
216:
217: sequenceOf2
218: SEQUENCEOF
219: <<count = rnd(3); count >= 0; count-->>
220: SequenceB,
221:
222: implicitTaggedSequenceOf2
223: [10] IMPLICIT SEQUENCEOF
224: <<count = rnd(3); count >= 0; count-->>
225: SequenceA,
226:
227: set
228: SET,
229:
230: taggedSet
231: [UNIVERSAL 11] SET,
232:
233: implicitTaggedSet
234: [PRIVATE 11] IMPLICIT SET,
235:
236: setOf
237: SET OF
238: <<count = rnd(10); count >= 0; count -->>
239: SetA,
240:
241: taggedSetOf
242: [12] SET OF
243: <<count = rnd(10); count >= 0; count -->>
244: SetA,
245:
246: setOf2
247: SETOF
248: <<count = rnd(4); count >= 0; count -->>
249: SetB,
250:
251: implicitTaggedSetOf2
252: [PRIVATE 12] IMPLICIT SETOF
253: <<count = rnd(4); count >= 0; count -->>
254: SetA,
255:
256: setValues
257: SET { SequenceA, SequenceB, SetA, SetB },
258:
259: taggedSetValues
260: [APPLICATION 13] SET { SequenceA, SequenceB, SetA, SetB },
261:
262: implicitTaggedSetValues
263: [13] IMPLICIT SET { SequenceA, SequenceB, SetA, SetB },
264:
265: choice
266: CHOICE << rnd(2) + 1 >> {
267: [1]
268: SequenceA,
269:
270: [2]
271: SequenceB,
272:
273: [3]
274: SetA,
275:
276: [4]
277: SetB
278: },
279:
280: taggedChoice
281: [PRIVATE 14] CHOICE << rnd(2) + 1 >> {
282: [1]
283: SequenceA,
284:
285: [2]
286: SequenceB,
287:
288: [3]
289: SetA,
290:
291: [4]
292: SetB
293: },
294:
295: bounded
296: objectname < ObjectA,
297:
298: taggedBounded
299: [UNIVERSAL 15] objectname < ObjectA,
300:
301: any
302: ANY
303: [[a pe_alloc (PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_NULL)]],
304:
305: taggedAny [PRIVATE 15]
306: ANY
307: [[a pe_alloc (PE_CLASS_UNIV, PE_FORM_PRIM, PE_PRIM_NULL)]],
308:
309: oid
310: %{
311: OID oid;
312: register int i;
313:
314: oid = (OID) calloc (1, sizeof(OIDentifier));
315: oid->oid_nelem = rnd(6)+2;
316: oid->oid_elements = (unsigned int *)
317: calloc((unsigned) oid->oid_nelem,
318: sizeof(unsigned int));
319: for(i = 0; i < oid->oid_nelem; i++)
320: oid->oid_elements[i] = rnd(10);
321: $$ = oid;
322: %}
323: OBJECT IDENTIFIER,
324:
325: taggedOid [16]
326: %{
327: OID oid;
328: register int i;
329:
330: oid = (OID) calloc (1, sizeof(OIDentifier));
331: oid->oid_nelem = rnd(6)+2;
332: oid->oid_elements = (unsigned int *)
333: calloc((unsigned) oid->oid_nelem,
334: sizeof(unsigned int));
335: for(i = 0; i < oid->oid_nelem; i++)
336: oid->oid_elements[i] = rnd(10);
337: $$ = oid;
338: %}
339: OBJECT IDENTIFIER,
340:
341: oid2
342: OBJECT IDENTIFIER
343: [[O str2oid ("1.2.3.4.5.6.7.8.9")]],
344:
345: implicitTaggedOid2
346: [APPLICATION 17] IMPLICIT OBJECT IDENTIFIER
347: [[O str2oid ("1.2.3.4.5.6.7.8.9")]],
348:
349: funnyDefault
350: [18] IMPLICIT INTEGER
351: [[i fd]]
352: DEFAULT 0 << fd != 0 >>
353: }
354:
355: SequenceA ::=
356: SEQUENCE {
357: seqAinteger
358: INTEGER
359: [[i rnd(50)]],
360:
361: seqAbool
362: BOOLEAN
363: [[b rnd(2)]]
364: }
365:
366: SequenceB ::=
367: [PRIVATE 100] SEQUENCE {
368: seqBinteger
369: INTEGER
370: [[i rnd(75)]]
371: }
372:
373: SetA ::=
374: SET {
375: setAinteger
376: INTEGER
377: [[i rnd(20000)]],
378:
379: setAbool
380: BOOLEAN
381: [[b rnd(2)]]
382: }
383:
384: SetB ::=
385: [PRIVATE 101] SET {
386: setBinteger
387: INTEGER
388: [[i rnd(3000)]]
389: }
390:
391: ObjectA ::=
392: BOOLEAN
393: [[b rnd(2)]]
394:
395:
396: SECTIONS none decoder printer
397:
398: Test1 ::=
399: SEQUENCE {
400: boolean
401: BOOLEAN,
402:
403: taggedBoolean
404: [0] BOOLEAN,
405:
406: implicitTaggedBoolean
407: [PRIVATE 0] IMPLICIT BOOLEAN,
408:
409: integer
410: INTEGER,
411:
412: taggedInteger
413: [APPLICATION 1] INTEGER,
414:
415: implicitTaggedInteger
416: [UNIVERSAL 1] IMPLICIT INTEGER,
417:
418: integerOneValue
419: INTEGER { nn(1) },
420:
421: taggedIntegerOneValue
422: [PRIVATE 2] INTEGER { nn(1) },
423:
424: integerManyValues
425: INTEGER { nn1(1), nn2(2), nn3(3) },
426:
427: implicitTaggedIntegerManyValues
428: [2] IMPLICIT INTEGER { nn1(1), nn2(2), nn3(3) },
429:
430: bitstring
431: BITSTRING,
432:
433: taggedBitString
434: [UNIVERSAL 3] BITSTRING,
435:
436: bitstring2
437: BIT STRING,
438:
439: taggedBitstring2
440: [4] BIT STRING,
441:
442: implictTaggedBitstring2
443: [PRIVATE 4] IMPLICIT BIT STRING,
444:
445: bitstringValue
446: BIT STRING { nn1(1) },
447:
448: taggedBitstringValue
449: [APPLICATION 5] BIT STRING { nn1(1) },
450:
451: bitstringValues
452: BIT STRING { nn1(1), nn2(2), nn3(3) },
453:
454: taggedBitstringValues
455: [PRIVATE 6] BIT STRING { nn1(1), nn2(2), nn3(3) },
456:
457: implicitTaggedBitstringValues
458: [APPLICATION 6] IMPLICIT BIT STRING
459: { nn1(1), nn2(2), nn3(3) },
460:
461: octetstring
462: OCTET STRING,
463:
464: taggedOctetstring
465: [UNIVERSAL 7] OCTET STRING,
466:
467: octetstring2
468: OCTETSTRING,
469:
470: implicitTaggedOctetstring2
471: [PRIVATE 7] IMPLICIT OCTETSTRING,
472:
473: null
474: NULL,
475:
476: taggedNull
477: [8] NULL,
478:
479: implicitTaggedNull
480: [PRIVATE 8] IMPLICIT NULL,
481:
482: sequence
483: SEQUENCE,
484:
485: taggedSequence
486: [APPLICATION 9] SEQUENCE,
487:
488: implicitTaggedSequence
489: [PRIVATE 9] IMPLICIT SEQUENCE,
490:
491: sequenceOf
492: SEQUENCE OF
493: SequenceA,
494:
495: taggedSequenceOf
496: [PRIVATE 10] SEQUENCE OF
497: SequenceA,
498:
499: sequenceOf2
500: SEQUENCEOF
501: SequenceB,
502:
503: implicitTaggedSequenceOf2
504: [10] IMPLICIT SEQUENCEOF
505: SequenceA,
506:
507: set
508: SET,
509:
510: taggedSet
511: [UNIVERSAL 11] SET,
512:
513: implicitTaggedSet
514: [PRIVATE 11] IMPLICIT SET,
515:
516: setOf
517: SET OF
518: SetA,
519:
520: taggedSetOf
521: [12] SET OF
522: SetA,
523:
524: setOf2
525: SETOF
526: SetB,
527:
528: implicitTaggedSetOf2
529: [PRIVATE 12] IMPLICIT SETOF
530: SetA,
531:
532: setValues
533: SET { SequenceA, SequenceB, SetA, SetB },
534:
535: taggedSetValues
536: [APPLICATION 13] SET { SequenceA, SequenceB, SetA, SetB },
537:
538: implicitTaggedSetValues
539: [13] IMPLICIT SET { SequenceA, SequenceB, SetA, SetB },
540:
541: choice
542: CHOICE {
543: [1]
544: SequenceA,
545:
546: [2]
547: SequenceB,
548:
549: [3]
550: SetA,
551:
552: [4]
553: SetB
554: },
555:
556: taggedChoice
557: [PRIVATE 14] CHOICE {
558: [1]
559: SequenceA,
560:
561: [2]
562: SequenceB,
563:
564: [3]
565: SetA,
566:
567: [4]
568: SetB
569: },
570:
571: bounded
572: objectname < ObjectA,
573:
574: taggedBounded
575: [UNIVERSAL 15] objectname < ObjectA,
576:
577: any
578: ANY,
579:
580: taggedAny
581: [PRIVATE 15] ANY,
582:
583: oid
584: OBJECT IDENTIFIER,
585:
586: taggedOid
587: [16] OBJECT IDENTIFIER,
588:
589: oid2
590: OBJECT IDENTIFIER,
591:
592: implicitTaggedOid2
593: [APPLICATION 17] IMPLICIT OBJECT IDENTIFIER,
594:
595: funnyDefault
596: [18] IMPLICIT INTEGER
597: %{ if ($$ == 0) advise (NULLCP, "funny default!"); %}
598: DEFAULT 0
599: }
600:
601: SequenceA ::=
602: SEQUENCE {
603: seqAinteger
604: INTEGER,
605:
606: seqAbool
607: BOOLEAN
608: }
609:
610: SequenceB ::=
611: [PRIVATE 100] SEQUENCE {
612: seqBinteger
613: INTEGER
614: }
615:
616: SetA ::=
617: SET {
618: setAinteger
619: INTEGER,
620:
621: setAbool
622: BOOLEAN
623: }
624:
625: SetB ::=
626: [PRIVATE 101] SET {
627: setBinteger
628: INTEGER
629: }
630:
631: ObjectA ::=
632: BOOLEAN
633:
634:
635: END
636:
637: %{
638:
639: /* MISC */
640:
641: #ifdef BSD42
642: #define SRAND(s) srandom ((int) (s))
643: #define RAND random
644:
645: long random ();
646: #else
647: #define SRAND srand
648: #define RAND rand
649:
650: int rand ();
651: #endif
652:
653: long time ();
654:
655:
656: static int rnd(n)
657: int n;
658: {
659: static int init = 0;
660:
661: if (!init) {
662: SRAND (time ((long *) 0));
663: init = 1;
664: }
665: return (RAND () % n);
666: }
667:
668: /* ERRORS */
669:
670: #include <varargs.h>
671:
672:
673: #ifndef lint
674: void _advise ();
675:
676:
677: static void adios (va_alist)
678: va_dcl
679: {
680: va_list ap;
681:
682: va_start (ap);
683:
684: _advise (ap);
685:
686: va_end (ap);
687:
688: _exit (1);
689: }
690: #else
691: /* VARARGS */
692:
693: static void adios (what, fmt)
694: char *what,
695: *fmt;
696: {
697: adios (what, fmt);
698: }
699: #endif
700:
701:
702: #ifndef lint
703: static void advise (va_alist)
704: va_dcl
705: {
706: va_list ap;
707:
708: va_start (ap);
709:
710: _advise (ap);
711:
712: va_end (ap);
713: }
714:
715:
716: static void _advise (ap)
717: va_list ap;
718: {
719: char buffer[BUFSIZ];
720:
721: asprintf (buffer, ap);
722:
723: (void) fflush (stdout);
724:
725: fprintf (stderr, "%s: ", myname);
726: (void) fputs (buffer, stderr);
727: (void) fputc ('\n', stderr);
728:
729: (void) fflush (stderr);
730: }
731: #else
732: /* VARARGS */
733:
734: static void advise (what, fmt)
735: char *what,
736: *fmt;
737: {
738: advise (what, fmt);
739: }
740: #endif
741:
742: %}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.