blob: 061a3aaddbf53eeacedfa8c47df0cb066db9b090 [file] [log] [blame]
Lev Walkin906654e2004-09-10 15:49:15 +00001#undef NDEBUG
2#include <stdio.h>
3#include <stdlib.h>
4#include <sys/types.h>
5#include <string.h>
6#include <assert.h>
7
8#include <T.h>
9#include <T1.h>
10
11uint8_t buf1[] = {
12 32 | ((2 << 6) + 2), /* [2], constructed */
Lev Walkin906654e2004-09-10 15:49:15 +000013 6,
Lev Walkinbac01322004-09-14 14:19:53 +000014 32 | ((2 << 6) + 3), /* [3], constructed */
Lev Walkin906654e2004-09-10 15:49:15 +000015 4,
Lev Walkinbac01322004-09-14 14:19:53 +000016 32 | ((2 << 6) + 4), /* [4], constructed */
17 2,
Lev Walkin906654e2004-09-10 15:49:15 +000018 0 | ((2 << 6) + 6), /* [6], primitive */
Lev Walkin4b906022004-09-14 14:14:58 +000019 0
Lev Walkin906654e2004-09-10 15:49:15 +000020};
21
22uint8_t buf2[] = {
23
24 32 | ((2 << 6) + 0), /* [0], constructed */
Lev Walkinbac01322004-09-14 14:19:53 +000025 23,
Lev Walkin906654e2004-09-10 15:49:15 +000026
27 32 | ((2 << 6) + 1), /* [1], constructed */
28 6,
29 32 | ((2 << 6) + 4), /* [4], constructed */
30 4,
31 0 | ((2 << 6) + 6), /* [6], primitive */
32 2,
Lev Walkin4b906022004-09-14 14:14:58 +000033 0xC0,
34 0x00,
Lev Walkin906654e2004-09-10 15:49:15 +000035
36 32 | ((2 << 6) + 2), /* [2], constructed */
37 6,
38 32 | ((2 << 6) + 4), /* [4], constructed */
39 4,
40 0 | ((2 << 6) + 6), /* [6], primitive */
41 2,
Lev Walkin4b906022004-09-14 14:14:58 +000042 0x80,
43 0x00,
Lev Walkin906654e2004-09-10 15:49:15 +000044
45 32 | ((2 << 6) + 3), /* [3], constructed */
Lev Walkinbac01322004-09-14 14:19:53 +000046 5,
Lev Walkin906654e2004-09-10 15:49:15 +000047 0 | ((2 << 6) + 6), /* [6], primitive */
Lev Walkin4b906022004-09-14 14:14:58 +000048 3,
49 0x80,
50 0x01,
51 0x02,
Lev Walkin906654e2004-09-10 15:49:15 +000052};
53
54static void
Lev Walkin1715b322013-03-28 04:02:13 -070055check_1(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
Lev Walkinc7400c52004-09-29 13:14:36 +000056 asn_TYPE_descriptor_t *td = &asn_DEF_T1;
Lev Walkin90bf7ae2004-10-20 15:46:56 +000057 asn_dec_rval_t rval;
Lev Walkin906654e2004-09-10 15:49:15 +000058 T1_t t, *tp;
59
60 tp = memset(&t, 0, sizeof(t));
61
62 fprintf(stderr, "Buf %p\n", buf);
Lev Walkinc7400c52004-09-29 13:14:36 +000063 rval = ber_decode(0, td, (void **)&tp, buf, size);
Lev Walkin1715b322013-03-28 04:02:13 -070064 fprintf(stderr, "Returned code %d, consumed %zd\n",
65 (int)rval.code, rval.consumed);
Lev Walkin906654e2004-09-10 15:49:15 +000066
67 if(is_ok) {
68 assert(rval.code == RC_OK);
69 assert(rval.consumed == consumed);
70 } else {
71 if(rval.code == RC_OK) {
72 }
73 assert(rval.consumed <= consumed);
74 }
75}
76
77static void
Lev Walkin1715b322013-03-28 04:02:13 -070078check_2(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
Lev Walkinc7400c52004-09-29 13:14:36 +000079 asn_TYPE_descriptor_t *td = &asn_DEF_T;
Lev Walkin90bf7ae2004-10-20 15:46:56 +000080 asn_dec_rval_t rval;
Lev Walkin906654e2004-09-10 15:49:15 +000081 T_t t, *tp;
82
83 tp = memset(&t, 0, sizeof(t));
84
85 fprintf(stderr, "Buf %p\n", buf);
Lev Walkinc7400c52004-09-29 13:14:36 +000086 rval = ber_decode(0, td, (void **)&tp, buf, size);
Lev Walkin1715b322013-03-28 04:02:13 -070087 fprintf(stderr, "Returned code %d, consumed %zd\n",
88 (int)rval.code, rval.consumed);
Lev Walkin906654e2004-09-10 15:49:15 +000089
90 if(is_ok) {
91 assert(rval.code == RC_OK);
92 assert(rval.consumed == consumed);
93 } else {
94 if(rval.code == RC_OK) {
95 }
96 assert(rval.consumed <= consumed);
97 }
98}
99
100int
101main(int ac, char **av) {
102
103 (void)ac; /* Unused argument */
104 (void)av; /* Unused argument */
105
106 check_1(1, buf1, sizeof(buf1), sizeof(buf1));
107 check_1(0, buf1, sizeof(buf1) - 1, sizeof(buf1) - 1);
108
109 check_2(1, buf2, sizeof(buf2), sizeof(buf2));
110 check_2(0, buf2, sizeof(buf2) - 1, sizeof(buf2) - 1);
111
112 return 0;
113}