xref: /aosp_15_r20/external/nanopb-c/tests/inline/inline_unittests.c (revision c8d645cafcee3f91213d30caa0fe303887010b9b)
1*c8d645caSAndroid Build Coastguard Worker #include <stdio.h>
2*c8d645caSAndroid Build Coastguard Worker #include <string.h>
3*c8d645caSAndroid Build Coastguard Worker #include <pb_decode.h>
4*c8d645caSAndroid Build Coastguard Worker #include <pb_encode.h>
5*c8d645caSAndroid Build Coastguard Worker #include "unittests.h"
6*c8d645caSAndroid Build Coastguard Worker #include "inline.pb.h"
7*c8d645caSAndroid Build Coastguard Worker 
main()8*c8d645caSAndroid Build Coastguard Worker int main()
9*c8d645caSAndroid Build Coastguard Worker {
10*c8d645caSAndroid Build Coastguard Worker     int status = 0;
11*c8d645caSAndroid Build Coastguard Worker     int i = 0;
12*c8d645caSAndroid Build Coastguard Worker     COMMENT("Test inline byte fields");
13*c8d645caSAndroid Build Coastguard Worker 
14*c8d645caSAndroid Build Coastguard Worker     {
15*c8d645caSAndroid Build Coastguard Worker       Message1 msg1 = Message1_init_zero;
16*c8d645caSAndroid Build Coastguard Worker       TEST(sizeof(msg1.data) == 32);
17*c8d645caSAndroid Build Coastguard Worker     }
18*c8d645caSAndroid Build Coastguard Worker 
19*c8d645caSAndroid Build Coastguard Worker     {
20*c8d645caSAndroid Build Coastguard Worker       Message1 msg1 = Message1_init_zero;
21*c8d645caSAndroid Build Coastguard Worker       pb_byte_t msg1_buffer[Message1_size];
22*c8d645caSAndroid Build Coastguard Worker       pb_ostream_t ostream = pb_ostream_from_buffer(msg1_buffer, Message1_size);
23*c8d645caSAndroid Build Coastguard Worker       Message1 msg1_deserialized = Message1_init_zero;
24*c8d645caSAndroid Build Coastguard Worker       pb_istream_t istream = pb_istream_from_buffer(msg1_buffer, Message1_size);
25*c8d645caSAndroid Build Coastguard Worker 
26*c8d645caSAndroid Build Coastguard Worker       for (i = 0; i < 32; i++) {
27*c8d645caSAndroid Build Coastguard Worker         msg1.data[i] = i;
28*c8d645caSAndroid Build Coastguard Worker       }
29*c8d645caSAndroid Build Coastguard Worker 
30*c8d645caSAndroid Build Coastguard Worker       TEST(pb_encode(&ostream, Message1_fields, &msg1));
31*c8d645caSAndroid Build Coastguard Worker       TEST(ostream.bytes_written == Message1_size);
32*c8d645caSAndroid Build Coastguard Worker 
33*c8d645caSAndroid Build Coastguard Worker       TEST(pb_decode(&istream, Message1_fields, &msg1_deserialized));
34*c8d645caSAndroid Build Coastguard Worker 
35*c8d645caSAndroid Build Coastguard Worker       TEST(istream.bytes_left == 0);
36*c8d645caSAndroid Build Coastguard Worker       TEST(memcmp(&msg1_deserialized, &msg1, sizeof(msg1)) == 0);
37*c8d645caSAndroid Build Coastguard Worker     }
38*c8d645caSAndroid Build Coastguard Worker 
39*c8d645caSAndroid Build Coastguard Worker     {
40*c8d645caSAndroid Build Coastguard Worker       Message2 msg2 = {true, {0}};
41*c8d645caSAndroid Build Coastguard Worker       Message2 msg2_no_data = {false, {1}};
42*c8d645caSAndroid Build Coastguard Worker       pb_byte_t msg2_buffer[Message2_size];
43*c8d645caSAndroid Build Coastguard Worker       pb_ostream_t ostream = pb_ostream_from_buffer(msg2_buffer, Message2_size);
44*c8d645caSAndroid Build Coastguard Worker       Message2 msg2_deserialized = Message2_init_zero;
45*c8d645caSAndroid Build Coastguard Worker       pb_istream_t istream = pb_istream_from_buffer(msg2_buffer, Message2_size);
46*c8d645caSAndroid Build Coastguard Worker 
47*c8d645caSAndroid Build Coastguard Worker       for (i = 0; i < 64; i++) {
48*c8d645caSAndroid Build Coastguard Worker         msg2.data[i] = i;
49*c8d645caSAndroid Build Coastguard Worker       }
50*c8d645caSAndroid Build Coastguard Worker 
51*c8d645caSAndroid Build Coastguard Worker       TEST(pb_encode(&ostream, Message2_fields, &msg2));
52*c8d645caSAndroid Build Coastguard Worker       TEST(ostream.bytes_written == Message2_size);
53*c8d645caSAndroid Build Coastguard Worker 
54*c8d645caSAndroid Build Coastguard Worker       TEST(pb_decode(&istream, Message2_fields, &msg2_deserialized));
55*c8d645caSAndroid Build Coastguard Worker 
56*c8d645caSAndroid Build Coastguard Worker       TEST(istream.bytes_left == 0);
57*c8d645caSAndroid Build Coastguard Worker       TEST(memcmp(&msg2_deserialized, &msg2, sizeof(msg2)) == 0);
58*c8d645caSAndroid Build Coastguard Worker       TEST(msg2_deserialized.has_data);
59*c8d645caSAndroid Build Coastguard Worker 
60*c8d645caSAndroid Build Coastguard Worker       memset(msg2_buffer, 0, sizeof(msg2_buffer));
61*c8d645caSAndroid Build Coastguard Worker       ostream = pb_ostream_from_buffer(msg2_buffer, Message2_size);
62*c8d645caSAndroid Build Coastguard Worker       TEST(pb_encode(&ostream, Message2_fields, &msg2_no_data));
63*c8d645caSAndroid Build Coastguard Worker       istream = pb_istream_from_buffer(msg2_buffer, Message2_size);
64*c8d645caSAndroid Build Coastguard Worker       TEST(pb_decode(&istream, Message2_fields, &msg2_deserialized));
65*c8d645caSAndroid Build Coastguard Worker       TEST(!msg2_deserialized.has_data);
66*c8d645caSAndroid Build Coastguard Worker       TEST(memcmp(&msg2_deserialized, &msg2, sizeof(msg2)) != 0);
67*c8d645caSAndroid Build Coastguard Worker     }
68*c8d645caSAndroid Build Coastguard Worker 
69*c8d645caSAndroid Build Coastguard Worker     if (status != 0)
70*c8d645caSAndroid Build Coastguard Worker         fprintf(stdout, "\n\nSome tests FAILED!\n");
71*c8d645caSAndroid Build Coastguard Worker 
72*c8d645caSAndroid Build Coastguard Worker     return status;
73*c8d645caSAndroid Build Coastguard Worker }
74