blob: ab244b1e5e72dbf668a2bf7c0e69690d74483b7d [file] [log] [blame]
Lev Walkind17cf882017-10-01 22:46:23 -07001#include <assert.h>
2#include <oer_support.c>
3
4static char buffer[128];
5
6static 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
Lev Walkin6cbed3d2017-10-07 16:42:41 -070014#define CHECK(a, b) check_round_trip(__LINE__, a, b)
15
Lev Walkind17cf882017-10-01 22:46:23 -070016static void
Lev Walkin6cbed3d2017-10-07 16:42:41 -070017check_round_trip(int lineno, int ok, size_t length) {
18 fprintf(stderr, "%03d: Round-trip for %zu\n", lineno, length);
Lev Walkind17cf882017-10-01 22:46:23 -070019
20 /* Serialize */
21 size_t enc_len = 0;
Lev Walkin6cbed3d2017-10-07 16:42:41 -070022 ssize_t enc_len_len = oer_serialize_length(length, fill_buffer, &enc_len);
23 assert(enc_len_len > 0);
Lev Walkind17cf882017-10-01 22:46:23 -070024 assert(enc_len == 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 }
Lev Walkin6cbed3d2017-10-07 16:42:41 -070032 ssize_t dec_len = oer_fetch_length(buffer, enc_len, &recovered_length);
33 if(ok) {
34 assert(dec_len == enc_len);
35 if(recovered_length != length) {
36 fprintf(stderr,
37 "Round-trip failed %zu->%zu (encoded %zd, decoded %zd)\n",
38 length, recovered_length, enc_len, dec_len);
39 assert(recovered_length == length);
40 }
41 } else {
42 assert(dec_len == -1);
Lev Walkind17cf882017-10-01 22:46:23 -070043 }
44}
45
46int main() {
Lev Walkin6cbed3d2017-10-07 16:42:41 -070047 int bits64 = sizeof(size_t) > 4;
Lev Walkind17cf882017-10-01 22:46:23 -070048
Lev Walkin6cbed3d2017-10-07 16:42:41 -070049 CHECK(1, 0);
50 CHECK(1, 1);
51 CHECK(1, 127);
52 CHECK(1, 128);
53 CHECK(1, 129);
54 CHECK(1, 255);
55 CHECK(1, 256);
56 CHECK(1, 65534);
57 CHECK(1, 65535);
58 CHECK(1, 65536);
59 CHECK(1, 65538);
60 CHECK(1, 16000000);
61 CHECK(1, 16777216);
62 CHECK(bits64, 2147483648);
63 CHECK(bits64, 4294967295UL);
Lev Walkind17cf882017-10-01 22:46:23 -070064
65}
66