1*c8d645caSAndroid Build Coastguard Worker #include "test.pb.h"
2*c8d645caSAndroid Build Coastguard Worker #include <unittests.h>
3*c8d645caSAndroid Build Coastguard Worker #include <pb_encode.h>
4*c8d645caSAndroid Build Coastguard Worker #include <pb_decode.h>
5*c8d645caSAndroid Build Coastguard Worker
write_array(pb_ostream_t * stream,const pb_field_t * field,void * const * arg)6*c8d645caSAndroid Build Coastguard Worker static bool write_array(pb_ostream_t *stream, const pb_field_t *field, void * const *arg)
7*c8d645caSAndroid Build Coastguard Worker {
8*c8d645caSAndroid Build Coastguard Worker int i;
9*c8d645caSAndroid Build Coastguard Worker for (i = 0; i < 5; i++)
10*c8d645caSAndroid Build Coastguard Worker {
11*c8d645caSAndroid Build Coastguard Worker if (!pb_encode_tag_for_field(stream, field))
12*c8d645caSAndroid Build Coastguard Worker return false;
13*c8d645caSAndroid Build Coastguard Worker if (!pb_encode_varint(stream, 1000 + i))
14*c8d645caSAndroid Build Coastguard Worker return false;
15*c8d645caSAndroid Build Coastguard Worker }
16*c8d645caSAndroid Build Coastguard Worker
17*c8d645caSAndroid Build Coastguard Worker return true;
18*c8d645caSAndroid Build Coastguard Worker }
19*c8d645caSAndroid Build Coastguard Worker
read_array(pb_istream_t * stream,const pb_field_t * field,void ** arg)20*c8d645caSAndroid Build Coastguard Worker static bool read_array(pb_istream_t *stream, const pb_field_t *field, void **arg)
21*c8d645caSAndroid Build Coastguard Worker {
22*c8d645caSAndroid Build Coastguard Worker uint32_t i;
23*c8d645caSAndroid Build Coastguard Worker int *sum = *arg;
24*c8d645caSAndroid Build Coastguard Worker
25*c8d645caSAndroid Build Coastguard Worker if (!pb_decode_varint32(stream, &i))
26*c8d645caSAndroid Build Coastguard Worker return false;
27*c8d645caSAndroid Build Coastguard Worker
28*c8d645caSAndroid Build Coastguard Worker *sum += i;
29*c8d645caSAndroid Build Coastguard Worker
30*c8d645caSAndroid Build Coastguard Worker return true;
31*c8d645caSAndroid Build Coastguard Worker }
32*c8d645caSAndroid Build Coastguard Worker
main()33*c8d645caSAndroid Build Coastguard Worker int main()
34*c8d645caSAndroid Build Coastguard Worker {
35*c8d645caSAndroid Build Coastguard Worker int status = 0;
36*c8d645caSAndroid Build Coastguard Worker pb_byte_t buf[128] = {0};
37*c8d645caSAndroid Build Coastguard Worker pb_size_t msglen;
38*c8d645caSAndroid Build Coastguard Worker
39*c8d645caSAndroid Build Coastguard Worker {
40*c8d645caSAndroid Build Coastguard Worker MainMessage msg = MainMessage_init_zero;
41*c8d645caSAndroid Build Coastguard Worker pb_ostream_t stream = pb_ostream_from_buffer(buf, sizeof(buf));
42*c8d645caSAndroid Build Coastguard Worker msg.submsg.foo.funcs.encode = &write_array;
43*c8d645caSAndroid Build Coastguard Worker TEST(pb_encode(&stream, MainMessage_fields, &msg));
44*c8d645caSAndroid Build Coastguard Worker msglen = stream.bytes_written;
45*c8d645caSAndroid Build Coastguard Worker }
46*c8d645caSAndroid Build Coastguard Worker
47*c8d645caSAndroid Build Coastguard Worker {
48*c8d645caSAndroid Build Coastguard Worker MainMessage msg = MainMessage_init_zero;
49*c8d645caSAndroid Build Coastguard Worker pb_istream_t stream = pb_istream_from_buffer(buf, msglen);
50*c8d645caSAndroid Build Coastguard Worker int sum = 0;
51*c8d645caSAndroid Build Coastguard Worker msg.submsg.foo.funcs.decode = &read_array;
52*c8d645caSAndroid Build Coastguard Worker msg.submsg.foo.arg = ∑
53*c8d645caSAndroid Build Coastguard Worker TEST(pb_decode(&stream, MainMessage_fields, &msg));
54*c8d645caSAndroid Build Coastguard Worker TEST(sum == 1000 + 1001 + 1002 + 1003 + 1004);
55*c8d645caSAndroid Build Coastguard Worker }
56*c8d645caSAndroid Build Coastguard Worker
57*c8d645caSAndroid Build Coastguard Worker return status;
58*c8d645caSAndroid Build Coastguard Worker }
59*c8d645caSAndroid Build Coastguard Worker
60