1*c8d645caSAndroid Build Coastguard Worker /* Attempts to test all the datatypes supported by ProtoBuf.
2*c8d645caSAndroid Build Coastguard Worker * This is a backwards-compatibility test, using alltypes_legacy.h.
3*c8d645caSAndroid Build Coastguard Worker * It is similar to encode_alltypes, but duplicated in order to allow
4*c8d645caSAndroid Build Coastguard Worker * encode_alltypes to test any new features introduced later.
5*c8d645caSAndroid Build Coastguard Worker */
6*c8d645caSAndroid Build Coastguard Worker
7*c8d645caSAndroid Build Coastguard Worker #include <stdio.h>
8*c8d645caSAndroid Build Coastguard Worker #include <stdlib.h>
9*c8d645caSAndroid Build Coastguard Worker #include <string.h>
10*c8d645caSAndroid Build Coastguard Worker #include <pb_encode.h>
11*c8d645caSAndroid Build Coastguard Worker #include "alltypes_legacy.h"
12*c8d645caSAndroid Build Coastguard Worker #include "test_helpers.h"
13*c8d645caSAndroid Build Coastguard Worker
main(int argc,char ** argv)14*c8d645caSAndroid Build Coastguard Worker int main(int argc, char **argv)
15*c8d645caSAndroid Build Coastguard Worker {
16*c8d645caSAndroid Build Coastguard Worker int mode = (argc > 1) ? atoi(argv[1]) : 0;
17*c8d645caSAndroid Build Coastguard Worker
18*c8d645caSAndroid Build Coastguard Worker /* Initialize the structure with constants */
19*c8d645caSAndroid Build Coastguard Worker AllTypes alltypes = {0};
20*c8d645caSAndroid Build Coastguard Worker
21*c8d645caSAndroid Build Coastguard Worker alltypes.req_int32 = -1001;
22*c8d645caSAndroid Build Coastguard Worker alltypes.req_int64 = -1002;
23*c8d645caSAndroid Build Coastguard Worker alltypes.req_uint32 = 1003;
24*c8d645caSAndroid Build Coastguard Worker alltypes.req_uint64 = 1004;
25*c8d645caSAndroid Build Coastguard Worker alltypes.req_sint32 = -1005;
26*c8d645caSAndroid Build Coastguard Worker alltypes.req_sint64 = -1006;
27*c8d645caSAndroid Build Coastguard Worker alltypes.req_bool = true;
28*c8d645caSAndroid Build Coastguard Worker
29*c8d645caSAndroid Build Coastguard Worker alltypes.req_fixed32 = 1008;
30*c8d645caSAndroid Build Coastguard Worker alltypes.req_sfixed32 = -1009;
31*c8d645caSAndroid Build Coastguard Worker alltypes.req_float = 1010.0f;
32*c8d645caSAndroid Build Coastguard Worker
33*c8d645caSAndroid Build Coastguard Worker alltypes.req_fixed64 = 1011;
34*c8d645caSAndroid Build Coastguard Worker alltypes.req_sfixed64 = -1012;
35*c8d645caSAndroid Build Coastguard Worker alltypes.req_double = 1013.0;
36*c8d645caSAndroid Build Coastguard Worker
37*c8d645caSAndroid Build Coastguard Worker strcpy(alltypes.req_string, "1014");
38*c8d645caSAndroid Build Coastguard Worker alltypes.req_bytes.size = 4;
39*c8d645caSAndroid Build Coastguard Worker memcpy(alltypes.req_bytes.bytes, "1015", 4);
40*c8d645caSAndroid Build Coastguard Worker strcpy(alltypes.req_submsg.substuff1, "1016");
41*c8d645caSAndroid Build Coastguard Worker alltypes.req_submsg.substuff2 = 1016;
42*c8d645caSAndroid Build Coastguard Worker alltypes.req_enum = MyEnum_Truth;
43*c8d645caSAndroid Build Coastguard Worker
44*c8d645caSAndroid Build Coastguard Worker alltypes.rep_int32_count = 5; alltypes.rep_int32[4] = -2001;
45*c8d645caSAndroid Build Coastguard Worker alltypes.rep_int64_count = 5; alltypes.rep_int64[4] = -2002;
46*c8d645caSAndroid Build Coastguard Worker alltypes.rep_uint32_count = 5; alltypes.rep_uint32[4] = 2003;
47*c8d645caSAndroid Build Coastguard Worker alltypes.rep_uint64_count = 5; alltypes.rep_uint64[4] = 2004;
48*c8d645caSAndroid Build Coastguard Worker alltypes.rep_sint32_count = 5; alltypes.rep_sint32[4] = -2005;
49*c8d645caSAndroid Build Coastguard Worker alltypes.rep_sint64_count = 5; alltypes.rep_sint64[4] = -2006;
50*c8d645caSAndroid Build Coastguard Worker alltypes.rep_bool_count = 5; alltypes.rep_bool[4] = true;
51*c8d645caSAndroid Build Coastguard Worker
52*c8d645caSAndroid Build Coastguard Worker alltypes.rep_fixed32_count = 5; alltypes.rep_fixed32[4] = 2008;
53*c8d645caSAndroid Build Coastguard Worker alltypes.rep_sfixed32_count = 5; alltypes.rep_sfixed32[4] = -2009;
54*c8d645caSAndroid Build Coastguard Worker alltypes.rep_float_count = 5; alltypes.rep_float[4] = 2010.0f;
55*c8d645caSAndroid Build Coastguard Worker
56*c8d645caSAndroid Build Coastguard Worker alltypes.rep_fixed64_count = 5; alltypes.rep_fixed64[4] = 2011;
57*c8d645caSAndroid Build Coastguard Worker alltypes.rep_sfixed64_count = 5; alltypes.rep_sfixed64[4] = -2012;
58*c8d645caSAndroid Build Coastguard Worker alltypes.rep_double_count = 5; alltypes.rep_double[4] = 2013.0;
59*c8d645caSAndroid Build Coastguard Worker
60*c8d645caSAndroid Build Coastguard Worker alltypes.rep_string_count = 5; strcpy(alltypes.rep_string[4], "2014");
61*c8d645caSAndroid Build Coastguard Worker alltypes.rep_bytes_count = 5; alltypes.rep_bytes[4].size = 4;
62*c8d645caSAndroid Build Coastguard Worker memcpy(alltypes.rep_bytes[4].bytes, "2015", 4);
63*c8d645caSAndroid Build Coastguard Worker
64*c8d645caSAndroid Build Coastguard Worker alltypes.rep_submsg_count = 5;
65*c8d645caSAndroid Build Coastguard Worker strcpy(alltypes.rep_submsg[4].substuff1, "2016");
66*c8d645caSAndroid Build Coastguard Worker alltypes.rep_submsg[4].substuff2 = 2016;
67*c8d645caSAndroid Build Coastguard Worker alltypes.rep_submsg[4].has_substuff3 = true;
68*c8d645caSAndroid Build Coastguard Worker alltypes.rep_submsg[4].substuff3 = 2016;
69*c8d645caSAndroid Build Coastguard Worker
70*c8d645caSAndroid Build Coastguard Worker alltypes.rep_enum_count = 5; alltypes.rep_enum[4] = MyEnum_Truth;
71*c8d645caSAndroid Build Coastguard Worker
72*c8d645caSAndroid Build Coastguard Worker if (mode != 0)
73*c8d645caSAndroid Build Coastguard Worker {
74*c8d645caSAndroid Build Coastguard Worker /* Fill in values for optional fields */
75*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_int32 = true;
76*c8d645caSAndroid Build Coastguard Worker alltypes.opt_int32 = 3041;
77*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_int64 = true;
78*c8d645caSAndroid Build Coastguard Worker alltypes.opt_int64 = 3042;
79*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_uint32 = true;
80*c8d645caSAndroid Build Coastguard Worker alltypes.opt_uint32 = 3043;
81*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_uint64 = true;
82*c8d645caSAndroid Build Coastguard Worker alltypes.opt_uint64 = 3044;
83*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_sint32 = true;
84*c8d645caSAndroid Build Coastguard Worker alltypes.opt_sint32 = 3045;
85*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_sint64 = true;
86*c8d645caSAndroid Build Coastguard Worker alltypes.opt_sint64 = 3046;
87*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_bool = true;
88*c8d645caSAndroid Build Coastguard Worker alltypes.opt_bool = true;
89*c8d645caSAndroid Build Coastguard Worker
90*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_fixed32 = true;
91*c8d645caSAndroid Build Coastguard Worker alltypes.opt_fixed32 = 3048;
92*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_sfixed32 = true;
93*c8d645caSAndroid Build Coastguard Worker alltypes.opt_sfixed32 = 3049;
94*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_float = true;
95*c8d645caSAndroid Build Coastguard Worker alltypes.opt_float = 3050.0f;
96*c8d645caSAndroid Build Coastguard Worker
97*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_fixed64 = true;
98*c8d645caSAndroid Build Coastguard Worker alltypes.opt_fixed64 = 3051;
99*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_sfixed64 = true;
100*c8d645caSAndroid Build Coastguard Worker alltypes.opt_sfixed64 = 3052;
101*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_double = true;
102*c8d645caSAndroid Build Coastguard Worker alltypes.opt_double = 3053.0;
103*c8d645caSAndroid Build Coastguard Worker
104*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_string = true;
105*c8d645caSAndroid Build Coastguard Worker strcpy(alltypes.opt_string, "3054");
106*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_bytes = true;
107*c8d645caSAndroid Build Coastguard Worker alltypes.opt_bytes.size = 4;
108*c8d645caSAndroid Build Coastguard Worker memcpy(alltypes.opt_bytes.bytes, "3055", 4);
109*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_submsg = true;
110*c8d645caSAndroid Build Coastguard Worker strcpy(alltypes.opt_submsg.substuff1, "3056");
111*c8d645caSAndroid Build Coastguard Worker alltypes.opt_submsg.substuff2 = 3056;
112*c8d645caSAndroid Build Coastguard Worker alltypes.has_opt_enum = true;
113*c8d645caSAndroid Build Coastguard Worker alltypes.opt_enum = MyEnum_Truth;
114*c8d645caSAndroid Build Coastguard Worker }
115*c8d645caSAndroid Build Coastguard Worker
116*c8d645caSAndroid Build Coastguard Worker alltypes.end = 1099;
117*c8d645caSAndroid Build Coastguard Worker
118*c8d645caSAndroid Build Coastguard Worker {
119*c8d645caSAndroid Build Coastguard Worker uint8_t buffer[1024];
120*c8d645caSAndroid Build Coastguard Worker pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
121*c8d645caSAndroid Build Coastguard Worker
122*c8d645caSAndroid Build Coastguard Worker /* Now encode it and check if we succeeded. */
123*c8d645caSAndroid Build Coastguard Worker if (pb_encode(&stream, AllTypes_fields, &alltypes))
124*c8d645caSAndroid Build Coastguard Worker {
125*c8d645caSAndroid Build Coastguard Worker SET_BINARY_MODE(stdout);
126*c8d645caSAndroid Build Coastguard Worker fwrite(buffer, 1, stream.bytes_written, stdout);
127*c8d645caSAndroid Build Coastguard Worker return 0; /* Success */
128*c8d645caSAndroid Build Coastguard Worker }
129*c8d645caSAndroid Build Coastguard Worker else
130*c8d645caSAndroid Build Coastguard Worker {
131*c8d645caSAndroid Build Coastguard Worker fprintf(stderr, "Encoding failed!\n");
132*c8d645caSAndroid Build Coastguard Worker return 1; /* Failure */
133*c8d645caSAndroid Build Coastguard Worker }
134*c8d645caSAndroid Build Coastguard Worker }
135*c8d645caSAndroid Build Coastguard Worker }
136