2 #include <oer_support.c>
4 static char buffer[128];
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);
14 #define CHECK(a, b) check_round_trip(__LINE__, a, b)
17 check_round_trip(int lineno, int ok, size_t length) {
18 fprintf(stderr, "%03d: Round-trip for %zu\n", lineno, length);
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);
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. */
32 ssize_t dec_len = oer_fetch_length(buffer, enc_len, &recovered_length);
35 assert((size_t)dec_len == enc_len);
36 if(recovered_length != length) {
38 "Round-trip failed %zu->%zu (encoded %zd, decoded %zd)\n",
39 length, recovered_length, enc_len, dec_len);
40 assert(recovered_length == length);
43 assert(dec_len == -1);
48 int bits64 = sizeof(size_t) > 4;
63 CHECK(bits64, 2147483648);
64 CHECK(bits64, 4294967295UL);