# Encode the AllTypes message using pointers for all fields, and verify the
# output against the normal AllTypes test case.

Import("env", "malloc_env")

c = Copy("$TARGET", "$SOURCE")
env.Command("alltypes.proto", "#alltypes/alltypes.proto", c)

env.NanopbProto(["alltypes", "alltypes.options"])
enc = malloc_env.Program(["encode_alltypes_pointer.c",
                          "alltypes.pb.c",
                          "$COMMON/pb_encode_with_malloc.o",
                          "$COMMON/pb_common_with_malloc.o",
                          "$COMMON/malloc_wrappers.o"])
dec = malloc_env.Program(["decode_alltypes_pointer.c",
                          "alltypes.pb.c",
                          "$COMMON/pb_decode_with_malloc.o",
                          "$COMMON/pb_common_with_malloc.o",
                          "$COMMON/malloc_wrappers.o"])

# Encode and compare results to non-pointer alltypes test case
env.RunTest(enc)
env.Compare(["encode_alltypes_pointer.output", "$BUILD/alltypes/encode_alltypes.output"])

# Decode (under valgrind if available)
valgrind = env.WhereIs('valgrind')
kwargs = {}
if valgrind:
    kwargs['COMMAND'] = valgrind
    kwargs['ARGS'] = ["-q", "--error-exitcode=99", dec[0].abspath]

env.RunTest("decode_alltypes.output", [dec, "encode_alltypes_pointer.output"], **kwargs)

# Do the same thing with the optional fields present
env.RunTest("optionals.output", enc, ARGS = ['1'])
env.Compare(["optionals.output", "$BUILD/alltypes/optionals.output"])

kwargs['ARGS'] = kwargs.get('ARGS', []) + ['1']
env.RunTest("optionals.decout", [dec, "optionals.output"], **kwargs)

