123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365 |
- #include "msgpack.h"
- #include <math.h>
- #include <vector>
- #include <limits>
- #include <gtest/gtest.h>
- #if defined(_MSC_VER) || defined(__MINGW32__)
- #define msgpack_rand() ((double)rand() / RAND_MAX)
- #else // _MSC_VER || __MINGW32__
- #define msgpack_rand() drand48()
- #endif // _MSC_VER || __MINGW32__
- using namespace std;
- const unsigned int kLoop = 10000;
- const double kEPS = 1e-10;
- #define GEN_TEST_SIGNED(test_type, func_type) \
- do { \
- vector<test_type> v; \
- v.push_back(0); \
- v.push_back(1); \
- v.push_back(-1); \
- v.push_back(numeric_limits<test_type>::min()); \
- v.push_back(numeric_limits<test_type>::max()); \
- for (unsigned int i = 0; i < kLoop; i++) \
- v.push_back(rand()); \
- for (unsigned int i = 0; i < v.size() ; i++) { \
- test_type val = v[i]; \
- msgpack_sbuffer sbuf; \
- msgpack_sbuffer_init(&sbuf); \
- msgpack_packer pk; \
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); \
- msgpack_pack_##func_type(&pk, val); \
- msgpack_zone z; \
- msgpack_zone_init(&z, 2048); \
- msgpack_object obj; \
- msgpack_unpack_return ret = \
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj); \
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret); \
- if (val < 0) { \
- EXPECT_EQ(MSGPACK_OBJECT_NEGATIVE_INTEGER, obj.type); \
- EXPECT_EQ(val, obj.via.i64); \
- } else { \
- EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type); \
- EXPECT_EQ(static_cast<uint64_t>(val), obj.via.u64); \
- } \
- msgpack_zone_destroy(&z); \
- msgpack_sbuffer_destroy(&sbuf); \
- } \
- } while(0)
- #define GEN_TEST_UNSIGNED(test_type, func_type) \
- do { \
- vector<test_type> v; \
- v.push_back(0); \
- v.push_back(1); \
- v.push_back(2); \
- v.push_back(numeric_limits<test_type>::min()); \
- v.push_back(numeric_limits<test_type>::max()); \
- for (unsigned int i = 0; i < kLoop; i++) \
- v.push_back(rand()); \
- for (unsigned int i = 0; i < v.size() ; i++) { \
- test_type val = v[i]; \
- msgpack_sbuffer sbuf; \
- msgpack_sbuffer_init(&sbuf); \
- msgpack_packer pk; \
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write); \
- msgpack_pack_##func_type(&pk, val); \
- msgpack_zone z; \
- msgpack_zone_init(&z, 2048); \
- msgpack_object obj; \
- msgpack_unpack_return ret = \
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj); \
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret); \
- EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.type); \
- EXPECT_EQ(val, obj.via.u64); \
- msgpack_zone_destroy(&z); \
- msgpack_sbuffer_destroy(&sbuf); \
- } \
- } while(0)
- TEST(MSGPACKC, simple_buffer_char)
- {
- #if defined(CHAR_MIN)
- #if CHAR_MIN < 0
- GEN_TEST_SIGNED(char, char);
- #else
- GEN_TEST_UNSIGNED(char, char);
- #endif
- #else
- #error CHAR_MIN is not defined
- #endif
- }
- TEST(MSGPACKC, simple_buffer_singed_char)
- {
- GEN_TEST_SIGNED(signed char, signed_char);
- }
- TEST(MSGPACKC, simple_buffer_short)
- {
- GEN_TEST_SIGNED(short, short);
- }
- TEST(MSGPACKC, simple_buffer_int)
- {
- GEN_TEST_SIGNED(int, int);
- }
- TEST(MSGPACKC, simple_buffer_long)
- {
- GEN_TEST_SIGNED(long, long);
- }
- TEST(MSGPACKC, simple_buffer_long_long)
- {
- GEN_TEST_SIGNED(long long, long_long);
- }
- TEST(MSGPACKC, simple_buffer_unsigned_char)
- {
- GEN_TEST_UNSIGNED(unsigned char, unsigned_char);
- }
- TEST(MSGPACKC, simple_buffer_unsigned_short)
- {
- GEN_TEST_UNSIGNED(unsigned short, unsigned_short);
- }
- TEST(MSGPACKC, simple_buffer_unsigned_int)
- {
- GEN_TEST_UNSIGNED(unsigned int, unsigned_int);
- }
- TEST(MSGPACKC, simple_buffer_unsigned_long)
- {
- GEN_TEST_UNSIGNED(unsigned long, unsigned_long);
- }
- TEST(MSGPACKC, simple_buffer_unsigned_long_long)
- {
- GEN_TEST_UNSIGNED(unsigned long long, unsigned_long_long);
- }
- TEST(MSGPACKC, simple_buffer_uint8)
- {
- GEN_TEST_UNSIGNED(uint8_t, uint8);
- }
- TEST(MSGPACKC, simple_buffer_uint16)
- {
- GEN_TEST_UNSIGNED(uint16_t, uint16);
- }
- TEST(MSGPACKC, simple_buffer_uint32)
- {
- GEN_TEST_UNSIGNED(uint32_t, uint32);
- }
- TEST(MSGPACKC, simple_buffer_uint64)
- {
- GEN_TEST_UNSIGNED(uint64_t, uint64);
- }
- TEST(MSGPACKC, simple_buffer_int8)
- {
- GEN_TEST_SIGNED(int8_t, int8);
- }
- TEST(MSGPACKC, simple_buffer_int16)
- {
- GEN_TEST_SIGNED(int16_t, int16);
- }
- TEST(MSGPACKC, simple_buffer_int32)
- {
- GEN_TEST_SIGNED(int32_t, int32);
- }
- TEST(MSGPACKC, simple_buffer_int64)
- {
- GEN_TEST_SIGNED(int64_t, int64);
- }
- #if !defined(_MSC_VER) || _MSC_VER >=1800
- TEST(MSGPACKC, simple_buffer_float)
- {
- vector<float> v;
- v.push_back(0.0);
- v.push_back(1.0);
- v.push_back(-1.0);
- v.push_back(numeric_limits<float>::min());
- v.push_back(numeric_limits<float>::max());
- v.push_back(nanf("tag"));
- if (numeric_limits<float>::has_infinity) {
- v.push_back(numeric_limits<float>::infinity());
- v.push_back(-numeric_limits<float>::infinity());
- }
- if (numeric_limits<float>::has_quiet_NaN) {
- v.push_back(numeric_limits<float>::quiet_NaN());
- }
- if (numeric_limits<float>::has_signaling_NaN) {
- v.push_back(numeric_limits<float>::signaling_NaN());
- }
- for (unsigned int i = 0; i < kLoop; i++) {
- v.push_back(static_cast<float>(msgpack_rand()));
- v.push_back(static_cast<float>(-msgpack_rand()));
- }
- for (unsigned int i = 0; i < v.size() ; i++) {
- float val = v[i];
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_float(&pk, val);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_FLOAT32, obj.type);
- if (isnan(val)) {
- EXPECT_TRUE(isnan(obj.via.f64));
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_TRUE(isnan(obj.via.dec));
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- }
- else if (isinf(val)) {
- EXPECT_TRUE(isinf(obj.via.f64));
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_TRUE(isinf(obj.via.dec));
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- }
- else {
- EXPECT_TRUE(fabs(obj.via.f64 - val) <= kEPS);
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_TRUE(fabs(obj.via.dec - val) <= kEPS);
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- }
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- }
- TEST(MSGPACKC, simple_buffer_double)
- {
- vector<double> v;
- v.push_back(0.0);
- v.push_back(-0.0);
- v.push_back(1.0);
- v.push_back(-1.0);
- v.push_back(numeric_limits<double>::min());
- v.push_back(numeric_limits<double>::max());
- v.push_back(nan("tag"));
- if (numeric_limits<double>::has_infinity) {
- v.push_back(numeric_limits<double>::infinity());
- v.push_back(-numeric_limits<double>::infinity());
- }
- if (numeric_limits<double>::has_quiet_NaN) {
- v.push_back(numeric_limits<double>::quiet_NaN());
- }
- if (numeric_limits<double>::has_signaling_NaN) {
- v.push_back(numeric_limits<double>::signaling_NaN());
- }
- for (unsigned int i = 0; i < kLoop; i++) {
- v.push_back(msgpack_rand());
- v.push_back(-msgpack_rand());
- }
- for (unsigned int i = 0; i < v.size() ; i++) {
- double val = v[i];
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_double(&pk, val);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_FLOAT64, obj.type);
- EXPECT_EQ(MSGPACK_OBJECT_FLOAT, obj.type);
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_EQ(MSGPACK_OBJECT_DOUBLE, obj.type);
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- if (isnan(val)) {
- EXPECT_TRUE(isnan(obj.via.f64));
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_TRUE(isnan(obj.via.dec));
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- }
- else if (isinf(val)) {
- EXPECT_TRUE(isinf(obj.via.f64));
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_TRUE(isinf(obj.via.dec));
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- }
- else {
- EXPECT_TRUE(fabs(obj.via.f64 - val) <= kEPS);
- #if defined(MSGPACK_USE_LEGACY_NAME_AS_FLOAT)
- EXPECT_TRUE(fabs(obj.via.dec - val) <= kEPS);
- #endif // MSGPACK_USE_LEGACY_NAME_AS_FLOAT
- }
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- }
- #endif // !defined(_MSC_VER) || _MSC_VER >=1800
- TEST(MSGPACKC, simple_buffer_nil)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_nil(&pk);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_NIL, obj.type);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_true)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_true(&pk);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, obj.type);
- EXPECT_EQ(true, obj.via.boolean);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_false)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_false(&pk);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, obj.type);
- EXPECT_FALSE(obj.via.boolean);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext1)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- char const buf[] = { 2 };
- msgpack_pack_ext(&pk, sizeof(buf), 1);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(1u, obj.via.ext.size);
- EXPECT_EQ(1, obj.via.ext.type);
- EXPECT_EQ(2, obj.via.ext.ptr[0]);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext2)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- char const buf[] = { 2, 3 };
- msgpack_pack_ext(&pk, sizeof(buf), 0);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(2u, obj.via.ext.size);
- EXPECT_EQ(0, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext4)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- char const buf[] = { 2, 3, 4, 5 };
- msgpack_pack_ext(&pk, sizeof(buf), 1);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(4u, obj.via.ext.size);
- EXPECT_EQ(1, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext8)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- char const buf [] = { 2, 3, 4, 5, 6, 7, 8, 9 };
- msgpack_pack_ext(&pk, sizeof(buf), 1);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(8u, obj.via.ext.size);
- EXPECT_EQ(1, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext16)
- {
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- char const buf [] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
- msgpack_pack_ext(&pk, sizeof(buf), 1);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(16u, obj.via.ext.size);
- EXPECT_EQ(1, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext_1byte_0)
- {
- const size_t size = 0;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_ext(&pk, size, 77);
- // fprintf(stderr, "size: %u, data: \"", sbuf.size);
- // for (size_t i = 0; i < sbuf.size; i++)
- // fprintf(stderr, "%02x ", (uint8_t)sbuf.data[i]);
- // fprintf(stderr, "\"\n");
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(size, obj.via.ext.size);
- EXPECT_EQ(77, obj.via.ext.type);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext_1byte_255)
- {
- const size_t size = 255;
- char buf[size];
- for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_ext(&pk, size, 78);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(size, obj.via.ext.size);
- EXPECT_EQ(78, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext_2byte_256)
- {
- const size_t size = 256;
- char buf[size];
- for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_ext(&pk, size, 79);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(size, obj.via.ext.size);
- EXPECT_EQ(79, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext_2byte_65535)
- {
- const size_t size = 65535;
- char buf[size];
- for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_ext(&pk, size, 80);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(size, obj.via.ext.size);
- EXPECT_EQ(80, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_fixext_4byte_65536)
- {
- const size_t size = 65536;
- char buf[size];
- for (size_t i = 0; i != size; ++i) buf[i] = (char)i;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_ext(&pk, size, 81);
- msgpack_pack_ext_body(&pk, buf, sizeof(buf));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(size, obj.via.ext.size);
- EXPECT_EQ(81, obj.via.ext.type);
- EXPECT_EQ(0, memcmp(buf, obj.via.ext.ptr, sizeof(buf)));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_timestamp_32)
- {
- msgpack_timestamp ts = {
- 0xffffffff,
- 0
- };
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_timestamp(&pk, &ts);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(4u, obj.via.ext.size);
- EXPECT_EQ(-1, obj.via.ext.type);
- msgpack_timestamp ts2;
- bool r = msgpack_object_to_timestamp(&obj, &ts2);
- EXPECT_TRUE(r);
- EXPECT_EQ(ts.tv_sec, ts2.tv_sec);
- EXPECT_EQ(ts.tv_nsec, ts2.tv_nsec);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_timestamp_64)
- {
- msgpack_timestamp ts = {
- 0x3ffffffffL,
- 999999999
- };
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_timestamp(&pk, &ts);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(8u, obj.via.ext.size);
- EXPECT_EQ(-1, obj.via.ext.type);
- msgpack_timestamp ts2;
- bool r = msgpack_object_to_timestamp(&obj, &ts2);
- EXPECT_TRUE(r);
- EXPECT_EQ(ts.tv_sec, ts2.tv_sec);
- EXPECT_EQ(ts.tv_nsec, ts2.tv_nsec);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_timestamp_96)
- {
- msgpack_timestamp ts = {
- 0x7fffffffffffffffLL,
- 999999999
- };
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_timestamp(&pk, &ts);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret =
- msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_EXT, obj.type);
- EXPECT_EQ(12u, obj.via.ext.size);
- EXPECT_EQ(-1, obj.via.ext.type);
- msgpack_timestamp ts2;
- bool r = msgpack_object_to_timestamp(&obj, &ts2);
- EXPECT_TRUE(r);
- EXPECT_EQ(ts.tv_sec, ts2.tv_sec);
- EXPECT_EQ(ts.tv_nsec, ts2.tv_nsec);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_array)
- {
- unsigned int array_size = 5;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_array(&pk, array_size);
- msgpack_pack_nil(&pk);
- msgpack_pack_true(&pk);
- msgpack_pack_false(&pk);
- msgpack_pack_int(&pk, 10);
- msgpack_pack_int(&pk, -10);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type);
- EXPECT_EQ(array_size, obj.via.array.size);
- for (unsigned int i = 0; i < obj.via.array.size; i++) {
- msgpack_object o = obj.via.array.ptr[i];
- switch (i) {
- case 0:
- EXPECT_EQ(MSGPACK_OBJECT_NIL, o.type);
- break;
- case 1:
- EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, o.type);
- EXPECT_EQ(true, o.via.boolean);
- break;
- case 2:
- EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, o.type);
- EXPECT_FALSE(o.via.boolean);
- break;
- case 3:
- EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, o.type);
- EXPECT_EQ(10u, o.via.u64);
- break;
- case 4:
- EXPECT_EQ(MSGPACK_OBJECT_NEGATIVE_INTEGER, o.type);
- EXPECT_EQ(-10, o.via.i64);
- break;
- }
- }
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_map)
- {
- unsigned int map_size = 2;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_map(&pk, map_size);
- msgpack_pack_true(&pk);
- msgpack_pack_false(&pk);
- msgpack_pack_int(&pk, 10);
- msgpack_pack_int(&pk, -10);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_MAP, obj.type);
- EXPECT_EQ(map_size, obj.via.map.size);
- for (unsigned int i = 0; i < map_size; i++) {
- msgpack_object key = obj.via.map.ptr[i].key;
- msgpack_object val = obj.via.map.ptr[i].val;
- switch (i) {
- case 0:
- EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, key.type);
- EXPECT_EQ(true, key.via.boolean);
- EXPECT_EQ(MSGPACK_OBJECT_BOOLEAN, val.type);
- EXPECT_FALSE(val.via.boolean);
- break;
- case 1:
- EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, key.type);
- EXPECT_EQ(10u, key.via.u64);
- EXPECT_EQ(MSGPACK_OBJECT_NEGATIVE_INTEGER, val.type);
- EXPECT_EQ(-10, val.via.i64);
- break;
- }
- }
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str)
- {
- unsigned int str_size = 7;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, "fr", 2);
- msgpack_pack_str_body(&pk, "syuki", 5);
- // invalid data
- msgpack_pack_str_body(&pk, "", 0);
- msgpack_pack_str_body(&pk, "kzk", 0);
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_fix_l)
- {
- char const* str = NULL;
- unsigned int str_size = 0;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0x01u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xa0u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_fix_h)
- {
- char str[0x1f] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0x1f+1u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xbfu));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_8_l)
- {
- char str[0x1f+1] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0x1f+1+2u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xd9u));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0x20u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_8_h)
- {
- char str[0xff] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0xff+2u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xd9u));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0xffu));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_16_l)
- {
- char str[0xff+1] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0xff+1+3u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xdau));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0x01u));
- EXPECT_EQ(sbuf.data[2], static_cast<char>(0x00u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_16_h)
- {
- char str[0xffff] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0xffff+3u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xdau));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0xffu));
- EXPECT_EQ(sbuf.data[2], static_cast<char>(0xffu));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_str_32_l)
- {
- char str[0xffff+1] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_str(&pk, str_size);
- msgpack_pack_str_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0xffff+1+5u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xdbu));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0x00u));
- EXPECT_EQ(sbuf.data[2], static_cast<char>(0x01u));
- EXPECT_EQ(sbuf.data[3], static_cast<char>(0x00u));
- EXPECT_EQ(sbuf.data[4], static_cast<char>(0x00u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_v4raw_fix_l)
- {
- char const* str = NULL;
- unsigned int str_size = 0;
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_v4raw(&pk, str_size);
- msgpack_pack_v4raw_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0x01u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xa0u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_v4raw_fix_h)
- {
- char str[0x1f] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_v4raw(&pk, str_size);
- msgpack_pack_v4raw_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0x1f+1u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xbfu));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_v4raw_16_l)
- {
- char str[0x1f+1] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_v4raw(&pk, str_size);
- msgpack_pack_v4raw_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0x1f+1+3u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xdau));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0x00u));
- EXPECT_EQ(sbuf.data[2], static_cast<char>(0x20u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_v4raw_16_h)
- {
- char str[0xffff] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_v4raw(&pk, str_size);
- msgpack_pack_v4raw_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0xffff+3u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xdau));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0xffu));
- EXPECT_EQ(sbuf.data[2], static_cast<char>(0xffu));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, simple_buffer_v4raw_32_l)
- {
- char str[0xffff+1] = {'0'};
- unsigned int str_size = sizeof(str);
- msgpack_sbuffer sbuf;
- msgpack_sbuffer_init(&sbuf);
- msgpack_packer pk;
- msgpack_packer_init(&pk, &sbuf, msgpack_sbuffer_write);
- msgpack_pack_v4raw(&pk, str_size);
- msgpack_pack_v4raw_body(&pk, str, str_size);
- EXPECT_EQ(sbuf.size, 0xffff+1+5u);
- EXPECT_EQ(sbuf.data[0], static_cast<char>(0xdbu));
- EXPECT_EQ(sbuf.data[1], static_cast<char>(0x00u));
- EXPECT_EQ(sbuf.data[2], static_cast<char>(0x01u));
- EXPECT_EQ(sbuf.data[3], static_cast<char>(0x00u));
- EXPECT_EQ(sbuf.data[4], static_cast<char>(0x00u));
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(sbuf.data, sbuf.size, NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp(str, obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- msgpack_sbuffer_destroy(&sbuf);
- }
- TEST(MSGPACKC, unpack_fixstr)
- {
- size_t str_size = 7;
- const char buf[] = {
- (char)0xa7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_str8)
- {
- size_t str_size = 7;
- const char buf[] = {
- (char)0xd9, 7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_str16)
- {
- size_t str_size = 7;
- const char buf[] = {
- (char)0xda, 0, 7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_str32)
- {
- size_t str_size = 7;
- const char buf[] = {
- (char)0xdb, 0, 0, 0, 7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
- EXPECT_EQ(str_size, obj.via.str.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.str.ptr, str_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_bin8)
- {
- size_t bin_size = 7;
- const char buf[] = {
- (char)0xc4, 7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_BIN, obj.type);
- EXPECT_EQ(bin_size, obj.via.bin.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.bin.ptr, bin_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_bin16)
- {
- size_t bin_size = 7;
- const char buf[] = {
- (char)0xc5, 0, 7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_BIN, obj.type);
- EXPECT_EQ(bin_size, obj.via.bin.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.bin.ptr, bin_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_bin32)
- {
- size_t bin_size = 7;
- const char buf[] = {
- (char)0xc6, 0, 0, 0, 7, 'f', 'r', 's', 'y', 'u', 'k', 'i'
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_BIN, obj.type);
- EXPECT_EQ(bin_size, obj.via.bin.size);
- EXPECT_EQ(0, memcmp("frsyuki", obj.via.bin.ptr, bin_size));
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, unpack_array_uint64)
- {
- const char buf[] = {
- (char)0x91, (char)0xcf, (char)0xff, (char)0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
- };
- msgpack_zone z;
- msgpack_zone_init(&z, 2048);
- msgpack_object obj;
- msgpack_unpack_return ret;
- ret = msgpack_unpack(buf, sizeof(buf), NULL, &z, &obj);
- EXPECT_EQ(MSGPACK_UNPACK_SUCCESS, ret);
- EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type);
- EXPECT_EQ(1u, obj.via.array.size);
- EXPECT_EQ(MSGPACK_OBJECT_POSITIVE_INTEGER, obj.via.array.ptr[0].type);
- EXPECT_EQ(0xFFF0000000000001LL, obj.via.array.ptr[0].via.u64);
- msgpack_zone_destroy(&z);
- }
- TEST(MSGPACKC, vref_buffer_overflow)
- {
- msgpack_vrefbuffer vbuf;
- msgpack_vrefbuffer to;
- size_t ref_size = 0;
- size_t chunk_size = std::numeric_limits<size_t>::max();
- EXPECT_FALSE(msgpack_vrefbuffer_init(&vbuf, ref_size, chunk_size));
- EXPECT_EQ(-1, msgpack_vrefbuffer_migrate(&vbuf, &to));
- }
|