2008-08-23 19:59:17 +00:00
|
|
|
/* generate byte arrays that match the constructs in test-generated-code2.c.
|
|
|
|
* these are tested against eachother to make sure the c and c++ agree. */
|
|
|
|
|
2008-08-24 03:00:21 +00:00
|
|
|
#define __STDC_LIMIT_MACROS
|
2008-08-23 19:59:17 +00:00
|
|
|
#include "generated-code/test-full.pb.h"
|
2008-08-24 03:00:21 +00:00
|
|
|
#include <inttypes.h>
|
2008-08-23 19:59:17 +00:00
|
|
|
|
|
|
|
using namespace foo;
|
|
|
|
|
2008-08-24 03:00:21 +00:00
|
|
|
#define protobuf_c_boolean bool
|
|
|
|
#include "common-test-arrays.h"
|
|
|
|
#define N_ELEMENTS(arr) (sizeof(arr)/sizeof((arr)[0]))
|
|
|
|
|
2008-08-23 19:59:17 +00:00
|
|
|
static void
|
|
|
|
dump_message_bytes(google::protobuf::Message *message,
|
|
|
|
const char *label)
|
|
|
|
{
|
|
|
|
std::string rv;
|
|
|
|
unsigned char *bytes;
|
|
|
|
unsigned len;
|
|
|
|
if (!message->SerializeToString(&rv))
|
|
|
|
assert(0);
|
|
|
|
bytes = (unsigned char *) rv.data();
|
|
|
|
len = rv.size();
|
|
|
|
printf ("static const uint8_t %s[%u] = { ", label, len);
|
|
|
|
for (unsigned i = 0; i < len; i++) {
|
|
|
|
if (i)
|
|
|
|
printf (", ");
|
|
|
|
printf ("0x%02x", bytes[i]);
|
|
|
|
}
|
|
|
|
printf (" };\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
dump_test_enum_small (void)
|
|
|
|
{
|
|
|
|
TestMessRequiredEnumSmall es;
|
|
|
|
es.set_test(VALUE);
|
|
|
|
dump_message_bytes(&es, "test_enum_small_VALUE");
|
|
|
|
es.set_test(OTHER_VALUE);
|
|
|
|
dump_message_bytes(&es, "test_enum_small_OTHER_VALUE");
|
|
|
|
}
|
|
|
|
static void
|
|
|
|
dump_test_enum_big (void)
|
|
|
|
{
|
|
|
|
TestMessRequiredEnum eb;
|
|
|
|
eb.set_test(VALUE0); dump_message_bytes(&eb, "test_enum_big_VALUE0");
|
|
|
|
eb.set_test(VALUE127); dump_message_bytes(&eb, "test_enum_big_VALUE127");
|
|
|
|
eb.set_test(VALUE128); dump_message_bytes(&eb, "test_enum_big_VALUE128");
|
|
|
|
eb.set_test(VALUE16383); dump_message_bytes(&eb, "test_enum_big_VALUE16383");
|
|
|
|
eb.set_test(VALUE16384); dump_message_bytes(&eb, "test_enum_big_VALUE16384");
|
|
|
|
eb.set_test(VALUE2097151); dump_message_bytes(&eb, "test_enum_big_VALUE2097151");
|
|
|
|
eb.set_test(VALUE2097152); dump_message_bytes(&eb, "test_enum_big_VALUE2097152");
|
|
|
|
eb.set_test(VALUE268435455); dump_message_bytes(&eb, "test_enum_big_VALUE268435455");
|
|
|
|
eb.set_test(VALUE268435456); dump_message_bytes(&eb, "test_enum_big_VALUE268435456");
|
2008-08-23 20:44:49 +00:00
|
|
|
}
|
2008-08-23 19:59:17 +00:00
|
|
|
|
2008-08-23 20:44:49 +00:00
|
|
|
static void
|
|
|
|
dump_test_field_numbers (void)
|
|
|
|
{
|
|
|
|
#define DUMP_ONE(num) \
|
|
|
|
{ TestFieldNo##num f; \
|
|
|
|
f.set_test("tst"); \
|
|
|
|
dump_message_bytes(&f, "test_field_number_" #num); }
|
|
|
|
DUMP_ONE (15)
|
|
|
|
DUMP_ONE (16)
|
|
|
|
DUMP_ONE (2047)
|
|
|
|
DUMP_ONE (2048)
|
|
|
|
DUMP_ONE (262143)
|
|
|
|
DUMP_ONE (262144)
|
|
|
|
DUMP_ONE (33554431)
|
|
|
|
DUMP_ONE (33554432)
|
|
|
|
#undef DUMP_ONE
|
|
|
|
}
|
2008-08-24 03:00:21 +00:00
|
|
|
static void dump_test_repeated_int32 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
|
|
|
|
mess.clear_test_int32 ();
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32__empty");
|
|
|
|
mess.add_test_int32(-1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32_m1");
|
|
|
|
mess.add_test_int32(1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32_m1_1");
|
|
|
|
mess.clear_test_int32 ();
|
|
|
|
mess.add_test_int32(1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32_1");
|
|
|
|
mess.clear_test_int32 ();
|
|
|
|
mess.add_test_int32(42);
|
|
|
|
mess.add_test_int32(666);
|
|
|
|
mess.add_test_int32(-1123123);
|
|
|
|
mess.add_test_int32(0);
|
|
|
|
mess.add_test_int32(47);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32_42_666_m1123123_0_47");
|
|
|
|
mess.clear_test_int32 ();
|
|
|
|
mess.add_test_int32(INT32_MIN);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32_min");
|
|
|
|
mess.clear_test_int32 ();
|
|
|
|
mess.add_test_int32(INT32_MAX);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int32_max");
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_sint32 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
|
|
|
|
mess.clear_test_sint32 ();
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32__empty");
|
|
|
|
mess.add_test_sint32(-1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32_m1");
|
|
|
|
mess.add_test_sint32(1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32_m1_1");
|
|
|
|
mess.clear_test_sint32 ();
|
|
|
|
mess.add_test_sint32(1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32_1");
|
|
|
|
mess.clear_test_sint32 ();
|
|
|
|
mess.add_test_sint32(42);
|
|
|
|
mess.add_test_sint32(666);
|
|
|
|
mess.add_test_sint32(-1123123);
|
|
|
|
mess.add_test_sint32(0);
|
|
|
|
mess.add_test_sint32(47);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32_42_666_m1123123_0_47");
|
|
|
|
mess.clear_test_sint32 ();
|
|
|
|
mess.add_test_sint32(INT32_MIN);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32_min");
|
|
|
|
mess.clear_test_sint32 ();
|
|
|
|
mess.add_test_sint32(INT32_MAX);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint32_max");
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_uint32 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
mess.add_test_uint32(BILLION);
|
|
|
|
mess.add_test_uint32(MILLION);
|
|
|
|
mess.add_test_uint32(1);
|
|
|
|
mess.add_test_uint32(0);
|
|
|
|
dump_message_bytes (&mess, "test_repeated_uint32_bil_mil_1_0");
|
|
|
|
mess.clear_test_uint32();
|
|
|
|
mess.add_test_uint32(0);
|
|
|
|
dump_message_bytes (&mess, "test_repeated_uint32_0");
|
|
|
|
mess.clear_test_uint32();
|
|
|
|
mess.add_test_uint32(UINT32_MAX);
|
|
|
|
dump_message_bytes (&mess, "test_repeated_uint32_max");
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_sfixed32 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
|
|
|
|
mess.clear_test_sfixed32 ();
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32__empty");
|
|
|
|
mess.add_test_sfixed32(-1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32_m1");
|
|
|
|
mess.add_test_sfixed32(1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32_m1_1");
|
|
|
|
mess.clear_test_sfixed32 ();
|
|
|
|
mess.add_test_sfixed32(1);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32_1");
|
|
|
|
mess.clear_test_sfixed32 ();
|
|
|
|
mess.add_test_sfixed32(42);
|
|
|
|
mess.add_test_sfixed32(666);
|
|
|
|
mess.add_test_sfixed32(-1123123);
|
|
|
|
mess.add_test_sfixed32(0);
|
|
|
|
mess.add_test_sfixed32(47);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32_42_666_m1123123_0_47");
|
|
|
|
mess.clear_test_sfixed32 ();
|
|
|
|
mess.add_test_sfixed32(INT32_MIN);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32_min");
|
|
|
|
mess.clear_test_sfixed32 ();
|
|
|
|
mess.add_test_sfixed32(INT32_MAX);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed32_max");
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_fixed32 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
mess.add_test_fixed32(BILLION);
|
|
|
|
mess.add_test_fixed32(MILLION);
|
|
|
|
mess.add_test_fixed32(1);
|
|
|
|
mess.add_test_fixed32(0);
|
|
|
|
dump_message_bytes (&mess, "test_repeated_fixed32_bil_mil_1_0");
|
|
|
|
mess.clear_test_fixed32();
|
|
|
|
mess.add_test_fixed32(0);
|
|
|
|
dump_message_bytes (&mess, "test_repeated_fixed32_0");
|
|
|
|
mess.clear_test_fixed32();
|
|
|
|
mess.add_test_fixed32(UINT32_MAX);
|
|
|
|
dump_message_bytes (&mess, "test_repeated_fixed32_max");
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_int64 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (int64_roundnumbers); i++)
|
|
|
|
mess.add_test_int64(int64_roundnumbers[i]);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int64_roundnumbers");
|
|
|
|
mess.clear_test_int64();
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (int64_min_max); i++)
|
|
|
|
mess.add_test_int64(int64_min_max[i]);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_int64_min_max");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void dump_test_repeated_sint64 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (int64_roundnumbers); i++)
|
|
|
|
mess.add_test_sint64(int64_roundnumbers[i]);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint64_roundnumbers");
|
|
|
|
mess.clear_test_sint64();
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (int64_min_max); i++)
|
|
|
|
mess.add_test_sint64(int64_min_max[i]);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sint64_min_max");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void dump_test_repeated_sfixed64 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (int64_roundnumbers); i++)
|
|
|
|
mess.add_test_sfixed64(int64_roundnumbers[i]);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed64_roundnumbers");
|
|
|
|
mess.clear_test_sfixed64();
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (int64_min_max); i++)
|
|
|
|
mess.add_test_sfixed64(int64_min_max[i]);
|
|
|
|
dump_message_bytes(&mess, "test_repeated_sfixed64_min_max");
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_uint64 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
#define DUMP_STATIC_ARRAY(static_array, output_array_name) \
|
|
|
|
do{ \
|
|
|
|
mess.clear_test_uint64(); \
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (static_array); i++) \
|
|
|
|
mess.add_test_uint64(static_array[i]); \
|
|
|
|
dump_message_bytes(&mess, output_array_name); \
|
|
|
|
}while(0)
|
|
|
|
|
|
|
|
DUMP_STATIC_ARRAY(uint64_roundnumbers, "test_repeated_uint64_roundnumbers");
|
|
|
|
DUMP_STATIC_ARRAY(uint64_0_1_max, "test_repeated_uint64_0_1_max");
|
|
|
|
DUMP_STATIC_ARRAY(uint64_random, "test_repeated_uint64_random");
|
|
|
|
|
|
|
|
#undef DUMP_STATIC_ARRAY
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_fixed64 (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
#define DUMP_STATIC_ARRAY(static_array, output_array_name) \
|
|
|
|
do{ \
|
|
|
|
mess.clear_test_fixed64(); \
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (static_array); i++) \
|
|
|
|
mess.add_test_fixed64(static_array[i]); \
|
|
|
|
dump_message_bytes(&mess, output_array_name); \
|
|
|
|
}while(0)
|
|
|
|
|
|
|
|
DUMP_STATIC_ARRAY(uint64_roundnumbers, "test_repeated_fixed64_roundnumbers");
|
|
|
|
DUMP_STATIC_ARRAY(uint64_0_1_max, "test_repeated_fixed64_0_1_max");
|
|
|
|
DUMP_STATIC_ARRAY(uint64_random, "test_repeated_fixed64_random");
|
|
|
|
|
|
|
|
#undef DUMP_STATIC_ARRAY
|
|
|
|
}
|
|
|
|
|
|
|
|
static void dump_test_repeated_float (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
#define DUMP_STATIC_ARRAY(static_array, output_array_name) \
|
|
|
|
do{ \
|
|
|
|
mess.clear_test_float(); \
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (static_array); i++) \
|
|
|
|
mess.add_test_float(static_array[i]); \
|
|
|
|
dump_message_bytes(&mess, output_array_name); \
|
|
|
|
}while(0)
|
|
|
|
|
|
|
|
DUMP_STATIC_ARRAY(float_random, "test_repeated_float_random");
|
|
|
|
|
|
|
|
#undef DUMP_STATIC_ARRAY
|
|
|
|
}
|
|
|
|
|
|
|
|
static void dump_test_repeated_double (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
#define DUMP_STATIC_ARRAY(static_array, output_array_name) \
|
|
|
|
do{ \
|
|
|
|
mess.clear_test_double(); \
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (static_array); i++) \
|
|
|
|
mess.add_test_double(static_array[i]); \
|
|
|
|
dump_message_bytes(&mess, output_array_name); \
|
|
|
|
}while(0)
|
|
|
|
|
|
|
|
DUMP_STATIC_ARRAY(double_random, "test_repeated_double_random");
|
|
|
|
|
|
|
|
#undef DUMP_STATIC_ARRAY
|
|
|
|
}
|
|
|
|
static void dump_test_repeated_boolean (void)
|
|
|
|
{
|
|
|
|
TestMess mess;
|
|
|
|
#define DUMP_STATIC_ARRAY(static_array, output_array_name) \
|
|
|
|
do{ \
|
|
|
|
mess.clear_test_boolean(); \
|
|
|
|
for (unsigned i = 0; i < N_ELEMENTS (static_array); i++) \
|
|
|
|
mess.add_test_boolean(static_array[i]); \
|
|
|
|
dump_message_bytes(&mess, output_array_name); \
|
|
|
|
}while(0)
|
|
|
|
|
|
|
|
DUMP_STATIC_ARRAY(boolean_0, "test_repeated_boolean_0");
|
|
|
|
DUMP_STATIC_ARRAY(boolean_1, "test_repeated_boolean_1");
|
|
|
|
DUMP_STATIC_ARRAY(boolean_random, "test_repeated_boolean_random");
|
|
|
|
|
|
|
|
#undef DUMP_STATIC_ARRAY
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-08-23 19:59:17 +00:00
|
|
|
int main(int argc, char **argv)
|
|
|
|
{
|
|
|
|
dump_test_enum_small ();
|
|
|
|
dump_test_enum_big ();
|
2008-08-23 20:44:49 +00:00
|
|
|
dump_test_field_numbers ();
|
2008-08-24 03:00:21 +00:00
|
|
|
dump_test_repeated_int32 ();
|
|
|
|
dump_test_repeated_sint32 ();
|
|
|
|
dump_test_repeated_uint32 ();
|
|
|
|
dump_test_repeated_sfixed32 ();
|
|
|
|
dump_test_repeated_fixed32 ();
|
|
|
|
dump_test_repeated_int64 ();
|
|
|
|
dump_test_repeated_sint64 ();
|
|
|
|
dump_test_repeated_sfixed64 ();
|
|
|
|
dump_test_repeated_uint64 ();
|
|
|
|
dump_test_repeated_fixed64 ();
|
|
|
|
dump_test_repeated_float ();
|
|
|
|
dump_test_repeated_double ();
|
|
|
|
dump_test_repeated_boolean ();
|
2008-08-23 19:59:17 +00:00
|
|
|
return 0;
|
|
|
|
}
|