5396cfe712fdfe4de0c560cdde48b66058d23c27
[com/asn1c.git] / tests / tests-c-compiler / check-src / check64-134.-gen-PER.c
1 /*
2  * Verify INTEGER values with greater than 32 bits range.
3  */
4 #undef  NDEBUG
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <sys/types.h>
8 #include <string.h>
9 #include <assert.h>
10 #include <ctype.h>
11 #include <errno.h>
12
13 #include <T.h>
14
15 static unsigned long i2ul(const INTEGER_t *i) {
16     unsigned long l;
17     int ret = asn_INTEGER2ulong(i, &l);
18     assert(ret == 0);
19     return l;
20 }
21
22 static long i2l(const INTEGER_t *i) {
23     long l;
24     int ret = asn_INTEGER2long(i, &l);
25     assert(ret == 0);
26     return l;
27 }
28
29 static void ul2i(INTEGER_t *i, unsigned long l) {
30     int ret = asn_ulong2INTEGER(i, l);
31     assert(ret == 0);
32 }
33
34 static void l2i(INTEGER_t *i, long l) {
35     int ret = asn_long2INTEGER(i, l);
36     assert(ret == 0);
37 }
38
39 static void
40 verify(int testNo, T_t *ti) {
41         asn_enc_rval_t er;
42         asn_dec_rval_t rv;
43         unsigned char buf[20];
44         T_t *to = 0;
45
46         fprintf(stderr, "%d IN: { %lu, %lu, %ld, %ld }\n", testNo,
47                 i2ul(&ti->unsigned33), i2ul(&ti->unsigned42),
48                 i2l(&ti->signed33), i2l(&ti->signed33ext)
49     );
50
51         er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
52         assert(er.encoded >= 33 + 42 + 33 + 1 + 33);
53
54         rv = uper_decode(0, &asn_DEF_T, (void *)&to, buf, sizeof buf, 0, 0);
55         assert(rv.code == RC_OK);
56
57         fprintf(stderr, "%d ENC: %2x%2x%2x%2x %2x%2x%2x%2x\n", testNo,
58                 buf[0], buf[1], buf[2], buf[3],
59                 buf[4], buf[5], buf[6], buf[7]);
60         fprintf(stderr, "%d OUT: { %lu, %lu, %ld, %ld } vs { %lu, %lu, %ld, %ld }\n",
61                 testNo,
62                 i2ul(&ti->unsigned33), i2ul(&ti->unsigned42),
63                 i2l(&ti->signed33), i2l(&ti->signed33ext),
64                 i2ul(&to->unsigned33), i2ul(&to->unsigned42),
65                 i2l(&to->signed33), i2l(&to->signed33ext));
66         assert(i2ul(&ti->unsigned33) == i2ul(&to->unsigned33));
67         assert(i2ul(&ti->unsigned42) == i2ul(&to->unsigned42));
68         assert(i2l(&ti->signed33) == i2l(&to->signed33));
69         assert(i2l(&ti->signed33ext) == i2l(&to->signed33ext));
70
71         xer_fprint(stderr, &asn_DEF_T, ti);
72         xer_fprint(stderr, &asn_DEF_T, to);
73         ASN_STRUCT_FREE(asn_DEF_T, to);
74 }
75
76 static void
77 NO_encode(int testNo, T_t *ti) {
78         asn_enc_rval_t er;
79         unsigned char buf[16];
80
81         fprintf(stderr, "%d IN: { %lu, %lu, %ld, %ld }\n", testNo,
82                 i2ul(&ti->unsigned33), i2ul(&ti->unsigned42),
83                 i2l(&ti->signed33), i2l(&ti->signed33ext)
84     );
85
86         er = uper_encode_to_buffer(&asn_DEF_T, 0, ti, buf, sizeof buf);
87         assert(er.encoded == -1);
88 }
89
90 int main() {
91         T_t ti;
92
93     memset(&ti, 0, sizeof(ti));
94     ul2i(&ti.unsigned33,  0);
95     ul2i(&ti.unsigned42,  0);
96     l2i(&ti.signed33,    0);
97     l2i(&ti.signed33ext, 0);
98         verify(1, &ti);
99         ASN_STRUCT_RESET(asn_DEF_T, &ti);
100
101     ul2i(&ti.unsigned33,  1);
102     ul2i(&ti.unsigned42,  1);
103     l2i(&ti.signed33,    1);
104     l2i(&ti.signed33ext, 1);
105         verify(2, &ti);
106         ASN_STRUCT_RESET(asn_DEF_T, &ti);
107
108     ul2i(&ti.unsigned33,  5000000000);
109     ul2i(&ti.unsigned42,  3153600000000);
110     l2i(&ti.signed33,    4000000000);
111     l2i(&ti.signed33ext, 4000000000);
112         verify(3, &ti);
113         ASN_STRUCT_RESET(asn_DEF_T, &ti);
114
115     ul2i(&ti.unsigned33, -1);
116     ul2i(&ti.unsigned42,  0);
117     l2i(&ti.signed33,    0);
118     l2i(&ti.signed33ext, 0);
119         NO_encode(4, &ti);
120         ASN_STRUCT_RESET(asn_DEF_T, &ti);
121
122     ul2i(&ti.unsigned33,  0);
123     ul2i(&ti.unsigned42, -1);
124     l2i(&ti.signed33,    0);
125     l2i(&ti.signed33ext, 0);
126         NO_encode(5, &ti);
127         ASN_STRUCT_RESET(asn_DEF_T, &ti);
128
129     ul2i(&ti.unsigned33,  0);
130     ul2i(&ti.unsigned42,  0);
131     l2i(&ti.signed33,    -4000000000-1);
132     l2i(&ti.signed33ext, 0);
133         NO_encode(6, &ti);
134         ASN_STRUCT_RESET(asn_DEF_T, &ti);
135
136     ul2i(&ti.unsigned33,  0);
137     ul2i(&ti.unsigned42,  0);
138     l2i(&ti.signed33,    0);
139     l2i(&ti.signed33ext, -4000000000-1);
140     assert(ti.signed33ext.size == 5);
141         verify(7, &ti); /* signed33ext is extensible */
142         ASN_STRUCT_RESET(asn_DEF_T, &ti);
143
144     ul2i(&ti.unsigned33,  5000000000 + 1);
145     ul2i(&ti.unsigned42,  0);
146     l2i(&ti.signed33,    0);
147     l2i(&ti.signed33ext, 0);
148         NO_encode(8, &ti);
149         ASN_STRUCT_RESET(asn_DEF_T, &ti);
150
151     ul2i(&ti.unsigned33,  0);
152     ul2i(&ti.unsigned42,  3153600000000 + 1);
153     l2i(&ti.signed33,    0);
154     l2i(&ti.signed33ext, 0);
155         NO_encode(9, &ti);
156         ASN_STRUCT_RESET(asn_DEF_T, &ti);
157
158     ul2i(&ti.unsigned33,  5000000000 - 1);
159     ul2i(&ti.unsigned42,  3153600000000 - 1);
160     l2i(&ti.signed33,    4000000000 - 1);
161     l2i(&ti.signed33ext, 4000000000 - 1);
162         verify(10, &ti);
163         ASN_STRUCT_RESET(asn_DEF_T, &ti);
164
165     ul2i(&ti.unsigned33,  0);
166     ul2i(&ti.unsigned42,  0);
167     l2i(&ti.signed33,    0);
168     l2i(&ti.signed33ext, 4000000000 + 1);
169         verify(11, &ti);
170         ASN_STRUCT_RESET(asn_DEF_T, &ti);
171
172         return 0;
173 }
174