1 /* Attempts to test all the datatypes supported by ProtoBuf.
8 #include "alltypes.pb.h"
9 #include "test_helpers.h"
11 int main(int argc, char **argv)
13 int mode = (argc > 1) ? atoi(argv[1]) : 0;
15 /* Initialize values to encode */
16 int32_t value_int32 = -1000;
17 int64_t value_int64 = -10000000000;
19 uint32_t value_uint32 = 1000;
20 uint64_t value_uint64 = 10000000000;
22 bool value_bool = true;
23 float value_float = 1000.0f;
24 double value_double = 1000.0f;
26 char *value_string = "1000";
28 pb_bytes_ptr_t value_bytes = {4, (uint8_t*)"1000"};
30 SubMessage value_submessage = {0};
31 MyEnum value_enum = MyEnum_Truth;
32 EmptyMessage value_empty_message = {0};
34 /* Initialize the structure with constants */
35 AllTypes alltypes = {0};
37 alltypes.req_int32 = &value_int32;
38 alltypes.req_int64 = &value_int64;
39 alltypes.req_uint32 = &value_uint32;
40 alltypes.req_uint64 = &value_uint64;
41 alltypes.req_sint32 = &value_int32;
42 alltypes.req_sint64 = &value_int64;
43 alltypes.req_bool = &value_bool;
45 alltypes.req_fixed32 = &value_uint32;
46 alltypes.req_sfixed32 = &value_int32;
47 alltypes.req_float = &value_float;
49 alltypes.req_fixed64 = &value_uint64;
50 alltypes.req_sfixed64 = &value_int64;
51 alltypes.req_double = &value_double;
53 alltypes.req_string = value_string;
55 alltypes.req_bytes = &value_bytes;
57 value_submessage.substuff1 = value_string;
58 value_submessage.substuff2 = &value_int32;
60 alltypes.req_submsg = &value_submessage;
61 alltypes.req_enum = &value_enum;
62 alltypes.req_emptymsg = &value_empty_message;
64 alltypes.rep_int32_count = 1; alltypes.rep_int32 = &value_int32;
65 alltypes.rep_int64_count = 1; alltypes.rep_int64 = &value_int64;
66 alltypes.rep_uint32_count = 1; alltypes.rep_uint32 = &value_uint32;
67 alltypes.rep_uint64_count = 1; alltypes.rep_uint64 = &value_uint64;
68 alltypes.rep_sint32_count = 1; alltypes.rep_sint32 = &value_int32;
69 alltypes.rep_sint64_count = 1; alltypes.rep_sint64 = &value_int64;
70 alltypes.rep_bool_count = 1; alltypes.rep_bool = &value_bool;
72 alltypes.rep_fixed32_count = 1; alltypes.rep_fixed32 = &value_uint32;
73 alltypes.rep_sfixed32_count = 1; alltypes.rep_sfixed32 = &value_int32;
74 alltypes.rep_float_count = 1; alltypes.rep_float = &value_float;
76 alltypes.rep_fixed64_count = 1; alltypes.rep_fixed64 = &value_uint64;
77 alltypes.rep_sfixed64_count = 1; alltypes.rep_sfixed64 = &value_int64;
78 alltypes.rep_double_count = 1; alltypes.rep_double = &value_double;
80 alltypes.rep_string_count = 1; alltypes.rep_string = (char **)&value_string;
81 alltypes.rep_bytes_count = 1; alltypes.rep_bytes = &value_bytes;
83 alltypes.rep_submsg_count = 1; alltypes.rep_submsg = &value_submessage;
84 alltypes.rep_enum_count = 1; alltypes.rep_enum = &value_enum;
85 alltypes.rep_emptymsg_count = 1; alltypes.rep_emptymsg = &value_empty_message;
89 /* Fill in values for optional fields */
90 alltypes.opt_int32 = &value_int32;
91 alltypes.opt_int64 = &value_int64;
92 alltypes.opt_uint32 = &value_uint32;
93 alltypes.opt_uint64 = &value_uint64;
94 alltypes.opt_sint32 = &value_int32;
95 alltypes.opt_sint64 = &value_int64;
96 alltypes.opt_bool = &value_bool;
98 alltypes.opt_fixed32 = &value_uint32;
99 alltypes.opt_sfixed32 = &value_int32;
100 alltypes.opt_float = &value_float;
102 alltypes.opt_fixed64 = &value_uint64;
103 alltypes.opt_sfixed64 = &value_int64;
104 alltypes.opt_double = &value_double;
106 alltypes.opt_string = value_string;
108 alltypes.opt_bytes = &value_bytes;
110 alltypes.opt_submsg = &value_submessage;
111 alltypes.opt_enum = &value_enum;
112 alltypes.opt_emptymsg = &value_empty_message;
115 alltypes.end = &value_int32;
118 uint8_t buffer[4096];
119 pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
121 /* Now encode it and check if we succeeded. */
122 if (pb_encode(&stream, AllTypes_fields, &alltypes))
124 /*SET_BINARY_MODE(stdout);
125 fwrite(buffer, 1, stream.bytes_written, stdout);*/ /* TODO: use this to validate decoding, when implemented */
126 return 0; /* Success */
130 fprintf(stderr, "Encoding failed: %s\n", PB_GET_ERROR(&stream));
131 return 1; /* Failure */