summaryrefslogtreecommitdiffstats
path: root/libs/nanopb/tests/regression/issue_242/zero_value.c
blob: b3d96b7a5dc5507a1e84f6d61b16ae3346afe9d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <unittests.h>
#include <pb_encode.h>
#include <pb_decode.h>
#include <string.h>
#include "zero_value.pb.h"

int main()
{
    int status = 0;
    
    COMMENT("Test extension fields with zero values");
    {
        uint8_t buffer[256] = {0};
        pb_ostream_t ostream;
        int32_t value = 0;
        Extendable source = {0};

        pb_extension_t source_ext = {0};
        source_ext.type = &opt_int32;
        source_ext.dest = &value;
        source.extensions = &source_ext;

        ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
        TEST(pb_encode(&ostream, Extendable_fields, &source));

        TEST(ostream.bytes_written == 2);
        TEST(memcmp(buffer, "\x58\x00", 2) == 0);
    }
    
    /* Note: There never was a bug here, but this check is included
     * in the regression test because the logic is closely related.
     */
    COMMENT("Test pointer fields with zero values");
    {
        uint8_t buffer[256] = {0};
        pb_ostream_t ostream;
        int32_t value = 0;
        PointerMessage source = {0};

        source.opt_int32 = &value;

        ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
        TEST(pb_encode(&ostream, PointerMessage_fields, &source));

        TEST(ostream.bytes_written == 2);
        TEST(memcmp(buffer, "\x58\x00", 2) == 0);
    }    
    
    return status;
}