NativeEnumerated.c vars NULL init and check
[com/asn1c.git] / tests / tests-skeletons / check-OER-support.c
1 #include <assert.h>
2 #include <oer_support.c>
3
4 static char buffer[128];
5
6 static int fill_buffer(const void *data, size_t size, void *app_key) {
7     size_t *offset = (size_t *)app_key;
8     assert(*offset + size < sizeof(buffer));
9     memcpy(&buffer[*offset], data, size);
10     *offset += size;
11     return 0;
12 }
13
14 #define CHECK(a, b) check_round_trip(__LINE__, a, b)
15
16 static void
17 check_round_trip(int lineno, int ok, size_t length) {
18     fprintf(stderr, "%03d: Round-trip for %zu\n", lineno, length);
19
20     /* Serialize */
21     size_t enc_len = 0;
22     ssize_t enc_len_len = oer_serialize_length(length, fill_buffer, &enc_len);
23     assert(enc_len_len > 0);
24     assert(enc_len == (size_t)enc_len_len);
25
26     /* Deserialize */
27     size_t recovered_length = 0;
28     for(size_t part = 0; part < enc_len; part++) {
29         size_t ret = oer_fetch_length(buffer, part, &recovered_length);
30         assert(ret == 0);   /* More data expected. */
31     }
32     ssize_t dec_len = oer_fetch_length(buffer, enc_len, &recovered_length);
33     if(ok) {
34         assert(dec_len > 0);
35         assert((size_t)dec_len == enc_len);
36         if(recovered_length != length) {
37             fprintf(stderr,
38                     "Round-trip failed %zu->%zu (encoded %zd, decoded %zd)\n",
39                     length, recovered_length, enc_len, dec_len);
40             assert(recovered_length == length);
41         }
42     } else {
43         assert(dec_len == -1);
44     }
45 }
46
47 int main() {
48     int bits64 = sizeof(size_t) > 4;
49
50     CHECK(1, 0);
51     CHECK(1, 1);
52     CHECK(1, 127);
53     CHECK(1, 128);
54     CHECK(1, 129);
55     CHECK(1, 255);
56     CHECK(1, 256);
57     CHECK(1, 65534);
58     CHECK(1, 65535);
59     CHECK(1, 65536);
60     CHECK(1, 65538);
61     CHECK(1, 16000000);
62     CHECK(1, 16777216);
63     CHECK(bits64, 2147483648);
64     CHECK(bits64, 4294967295UL);
65
66 }
67