mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-11-02 05:46:23 +01:00
Fixed #465
Added C-Style array support.
Existing mapping:
convert:
pack:
char[N] => STR
const char[N] => STR
object:
char[N] => STR (v1 only)
const char[N] => STR (v1 only)
object_with_zone:
char[N] => STR
const char[N] => STR
Additional mapping:
convert:
STR => char[N]
ARRAY => T[N]
pack:
T[N] => ARRAY
const T[N] => ARRAY
object:
object_with_zone:
T[N] => ARRAY
const T[N] => ARRAY
This commit is contained in:
@@ -10,6 +10,7 @@ INCLUDE_DIRECTORIES (
|
||||
LIST (APPEND check_PROGRAMS
|
||||
array_ref.cpp
|
||||
buffer.cpp
|
||||
carray.cpp
|
||||
cases.cpp
|
||||
convert.cpp
|
||||
fixint.cpp
|
||||
|
||||
@@ -5,6 +5,7 @@ AM_LDFLAGS = $(top_builddir)/src/libmsgpackc.la -lgtest_main -lgtest -lpthread
|
||||
check_PROGRAMS = \
|
||||
array_ref \
|
||||
buffer \
|
||||
carray \
|
||||
cases \
|
||||
convert \
|
||||
fixint \
|
||||
@@ -50,6 +51,7 @@ TESTS = $(check_PROGRAMS)
|
||||
|
||||
array_ref_SOURCES = array_ref.cpp
|
||||
buffer_SOURCES = buffer.cpp
|
||||
carray_SOURCES = carray.cpp
|
||||
cases_SOURCES = cases.cpp
|
||||
convert_SOURCES = convert.cpp
|
||||
fixint_SOURCES = fixint.cpp
|
||||
|
||||
264
test/carray.cpp
Normal file
264
test/carray.cpp
Normal file
@@ -0,0 +1,264 @@
|
||||
#include <msgpack.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <sstream>
|
||||
|
||||
TEST(carray, pack_unpack_int)
|
||||
{
|
||||
std::stringstream ss;
|
||||
int v1[] = { 0, 1 };
|
||||
|
||||
msgpack::pack(ss, v1);
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||
|
||||
int v2[2];
|
||||
oh.get().convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_int)
|
||||
{
|
||||
int v1[] = { 0, 1 };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(v1, z);
|
||||
EXPECT_EQ(o.type, msgpack::type::ARRAY);
|
||||
|
||||
int v2[2];
|
||||
o.convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_const_int)
|
||||
{
|
||||
std::stringstream ss;
|
||||
const int v1[] = { 0, 1 };
|
||||
|
||||
msgpack::pack(ss, v1);
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||
|
||||
int v2[2];
|
||||
oh.get().convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_const_int)
|
||||
{
|
||||
const int v1[] = { 0, 1 };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(v1, z);
|
||||
EXPECT_EQ(o.type, msgpack::type::ARRAY);
|
||||
|
||||
int v2[2];
|
||||
o.convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_string)
|
||||
{
|
||||
std::stringstream ss;
|
||||
std::string v1[] = { "ABC", "DEFG" };
|
||||
|
||||
msgpack::pack(ss, v1);
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||
|
||||
std::string v2[2];
|
||||
oh.get().convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_string)
|
||||
{
|
||||
std::string v1[] = { "ABC", "DEFG" };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(v1, z);
|
||||
EXPECT_EQ(o.type, msgpack::type::ARRAY);
|
||||
|
||||
std::string v2[2];
|
||||
o.convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_char)
|
||||
{
|
||||
std::stringstream ss;
|
||||
char v1[] = { 0, 1 };
|
||||
|
||||
msgpack::pack(ss, msgpack::type::make_array_ref(v1));
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||
|
||||
char v2[2];
|
||||
msgpack::type::array_ref<char[2]> ar = msgpack::type::make_array_ref(v2);
|
||||
oh.get().convert(ar);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_char_as_str)
|
||||
{
|
||||
std::stringstream ss;
|
||||
char v1[2] = { 1, '\0' };
|
||||
|
||||
msgpack::pack(ss, v1);
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::STR);
|
||||
EXPECT_EQ(oh.get().via.str.size, 1);
|
||||
|
||||
char v2[2] = { 2, 3 };
|
||||
oh.get().convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_char)
|
||||
{
|
||||
char v1[] = { 0, 1 };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(msgpack::type::make_array_ref(v1), z);
|
||||
EXPECT_EQ(o.type, msgpack::type::ARRAY);
|
||||
|
||||
char v2[2];
|
||||
msgpack::type::array_ref<char[2]> ar = msgpack::type::make_array_ref(v2);
|
||||
o.convert(ar);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_char_as_str)
|
||||
{
|
||||
char v1[] = { 1, '\0' };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(v1, z);
|
||||
EXPECT_EQ(o.type, msgpack::type::STR);
|
||||
EXPECT_EQ(o.via.str.size, 1);
|
||||
|
||||
char v2[2];
|
||||
o.convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_unsigned_char)
|
||||
{
|
||||
std::stringstream ss;
|
||||
unsigned char v1[] = { 0, 1 };
|
||||
|
||||
msgpack::pack(ss, msgpack::type::make_array_ref(v1));
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||
|
||||
unsigned char v2[2];
|
||||
msgpack::type::array_ref<unsigned char[2]> ar = msgpack::type::make_array_ref(v2);
|
||||
oh.get().convert(ar);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_unsigned_char_as_bin)
|
||||
{
|
||||
std::stringstream ss;
|
||||
unsigned char v1[] = { 0, 1 };
|
||||
|
||||
msgpack::pack(ss, v1);
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::BIN);
|
||||
EXPECT_EQ(oh.get().via.bin.size, 2);
|
||||
|
||||
unsigned char v2[2];
|
||||
oh.get().convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_unsigned_char)
|
||||
{
|
||||
unsigned char v1[] = { 0, 1 };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(msgpack::type::make_array_ref(v1), z);
|
||||
EXPECT_EQ(o.type, msgpack::type::ARRAY);
|
||||
|
||||
unsigned char v2[2];
|
||||
msgpack::type::array_ref<unsigned char[2]> ar = msgpack::type::make_array_ref(v2);
|
||||
o.convert(ar);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_unsigned_char_as_bin)
|
||||
{
|
||||
unsigned char v1[] = { 0, 1 };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(v1, z);
|
||||
EXPECT_EQ(o.type, msgpack::type::BIN);
|
||||
EXPECT_EQ(o.via.bin.size, 2);
|
||||
|
||||
unsigned char v2[2];
|
||||
o.convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, pack_unpack_signed_char)
|
||||
{
|
||||
std::stringstream ss;
|
||||
signed char v1[] = { 0, 1 };
|
||||
|
||||
msgpack::pack(ss, v1);
|
||||
msgpack::object_handle oh = msgpack::unpack(ss.str().data(), ss.str().size());
|
||||
EXPECT_EQ(oh.get().type, msgpack::type::ARRAY);
|
||||
|
||||
signed char v2[2];
|
||||
oh.get().convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
TEST(carray, obj_with_zone_signed_char)
|
||||
{
|
||||
signed char v1[] = { 0, 1 };
|
||||
msgpack::zone z;
|
||||
|
||||
msgpack::object o(v1, z);
|
||||
EXPECT_EQ(o.type, msgpack::type::ARRAY);
|
||||
|
||||
signed char v2[2];
|
||||
o.convert(v2);
|
||||
EXPECT_EQ(v1[0], v2[0]);
|
||||
EXPECT_EQ(v1[1], v2[1]);
|
||||
}
|
||||
|
||||
#if MSGPACK_DEFAULT_API_VERSION == 1
|
||||
|
||||
TEST(carray, object_as_str)
|
||||
{
|
||||
char v1[] = { 1, '\0' };
|
||||
|
||||
msgpack::zone z;
|
||||
msgpack::object o(v1);
|
||||
EXPECT_EQ(o.type, msgpack::type::STR);
|
||||
}
|
||||
TEST(carray, object_as_str_const)
|
||||
{
|
||||
const char v1[] = { 1, '\0' };
|
||||
|
||||
msgpack::zone z;
|
||||
msgpack::object o(v1);
|
||||
EXPECT_EQ(o.type, msgpack::type::STR);
|
||||
}
|
||||
|
||||
#endif // MSGPACK_DEFAULT_API_VERSION == 1
|
||||
@@ -341,6 +341,8 @@ TEST(object_with_zone, char_ptr)
|
||||
EXPECT_EQ(obj.as<string>()[0], 'a');
|
||||
}
|
||||
|
||||
#if MSGPACK_DEFAULT_API_VERSION == 1
|
||||
|
||||
TEST(object_without_zone, char_ptr)
|
||||
{
|
||||
char v[] = "abc";
|
||||
@@ -351,6 +353,7 @@ TEST(object_without_zone, char_ptr)
|
||||
EXPECT_EQ(obj.as<string>()[0], 'd');
|
||||
}
|
||||
|
||||
#endif // MSGPACK_DEFAULT_API_VERSION == 1
|
||||
|
||||
// raw_ref
|
||||
TEST(object_with_zone, raw_ref)
|
||||
|
||||
Reference in New Issue
Block a user