c292063ba8a56439ef6eaa68752dc5d25bdecdaf
[com/asn1c.git] / tests / tests-c-compiler / check-src / check-65.c
1 #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
11 uint8_t buf1[] = {
12         32 | ((2 << 6) + 2),    /* [2], constructed */
13         6,
14         32 | ((2 << 6) + 3),    /* [3], constructed */
15         4,
16         32 | ((2 << 6) + 4),    /* [4], constructed */
17         2,
18         0  | ((2 << 6) + 6),    /* [6], primitive */
19         0
20 };
21
22 uint8_t buf2[] = {
23
24         32 | ((2 << 6) + 0),    /* [0], constructed */
25         23,
26
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,
33   0xC0,
34   0x00,
35
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,
42   0x80,
43   0x00,
44
45         32 | ((2 << 6) + 3),    /* [3], constructed */
46         5,
47         0  | ((2 << 6) + 6),    /* [6], primitive */
48         3,
49   0x80,
50   0x01,
51   0x02,
52 };
53
54 static void
55 check_1(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
56         asn_TYPE_descriptor_t *td = &asn_DEF_T1;
57         asn_dec_rval_t rval;
58         T1_t t, *tp;
59
60         tp = memset(&t, 0, sizeof(t));
61
62         fprintf(stderr, "Buf %p\n", buf);
63         rval = ber_decode(0, td, (void **)&tp, buf, size);
64         fprintf(stderr, "Returned code %d, consumed %zd\n",
65                 (int)rval.code, rval.consumed);
66
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
77 static void
78 check_2(int is_ok, uint8_t *buf, size_t size, size_t consumed) {
79         asn_TYPE_descriptor_t *td = &asn_DEF_T;
80         asn_dec_rval_t rval;
81         T_t t, *tp;
82
83         tp = memset(&t, 0, sizeof(t));
84
85         fprintf(stderr, "Buf %p\n", buf);
86         rval = ber_decode(0, td, (void **)&tp, buf, size);
87         fprintf(stderr, "Returned code %d, consumed %zd\n",
88                 (int)rval.code, rval.consumed);
89
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         ASN_STRUCT_RESET(*td, tp);
99 }
100
101 int
102 main(int ac, char **av) {
103
104         (void)ac;       /* Unused argument */
105         (void)av;       /* Unused argument */
106
107         check_1(1, buf1, sizeof(buf1), sizeof(buf1));
108         check_1(0, buf1, sizeof(buf1) - 1, sizeof(buf1) - 1);
109
110         check_2(1, buf2, sizeof(buf2), sizeof(buf2));
111         check_2(0, buf2, sizeof(buf2) - 1, sizeof(buf2) - 1);
112
113         return 0;
114 }