summaryrefslogtreecommitdiff
path: root/cpp/test.cpp
diff options
context:
space:
mode:
authorKazuki Ohta <kzk@il.is.s.u-tokyo.ac.jp>2009-09-12 03:12:53 +0900
committerKazuki Ohta <kzk@il.is.s.u-tokyo.ac.jp>2009-09-12 03:12:53 +0900
commitd0b76814b026d18a13fe67d99505634f8878250d (patch)
treefc9104736126d1a80d10680a7e3b46d7618fc571 /cpp/test.cpp
parentbf3cb63d468c333d1455d21012aaa679d110af3e (diff)
downloadmsgpack-python-d0b76814b026d18a13fe67d99505634f8878250d.tar.gz
cpp: add tests for stream unpacker api
Diffstat (limited to 'cpp/test.cpp')
-rw-r--r--cpp/test.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/cpp/test.cpp b/cpp/test.cpp
index 3907c47..4447890 100644
--- a/cpp/test.cpp
+++ b/cpp/test.cpp
@@ -670,3 +670,123 @@ TEST(MSGPACK, vrefbuffer_int64)
{
GEN_TEST_VREF(int64_t);
}
+
+//-----------------------------------------------------------------------------
+
+#define GEN_TEST_STREAM(test_type) \
+ for (unsigned int k = 0; k < kLoop; k++) { \
+ msgpack::sbuffer sbuf; \
+ msgpack::packer<msgpack::sbuffer> pk(sbuf); \
+ typedef std::vector<test_type> vec_type; \
+ vec_type vec; \
+ for(unsigned int i = 0; i < rand() % kLoop; ++i) { \
+ vec_type::value_type r = rand(); \
+ vec.push_back(r); \
+ pk.pack(r); \
+ } \
+ msgpack::unpacker pac; \
+ vec_type::const_iterator it = vec.begin(); \
+ const char *p = sbuf.data(); \
+ const char * const pend = p + sbuf.size(); \
+ while (p < pend) { \
+ const size_t sz = std::min<size_t>(pend - p, rand() % 128); \
+ pac.reserve_buffer(sz); \
+ memcpy(pac.buffer(), p, sz); \
+ pac.buffer_consumed(sz); \
+ while (pac.execute()) { \
+ if (it == vec.end()) goto out; \
+ msgpack::object obj = pac.data(); \
+ msgpack::zone *life = pac.release_zone(); \
+ EXPECT_TRUE(life != NULL); \
+ pac.reset(); \
+ vec_type::value_type val; \
+ obj.convert(&val); \
+ EXPECT_EQ(*it, val); \
+ ++it; \
+ delete life; \
+ } \
+ p += sz; \
+ } \
+ out: \
+ ; \
+ }
+
+TEST(MSGPACK, stream_short)
+{
+ GEN_TEST_STREAM(short);
+}
+
+TEST(MSGPACK, stream_int)
+{
+ GEN_TEST_STREAM(int);
+}
+
+TEST(MSGPACK, stream_long)
+{
+ GEN_TEST_STREAM(long);
+}
+
+TEST(MSGPACK, stream_long_long)
+{
+ GEN_TEST_STREAM(long long);
+}
+
+TEST(MSGPACK, stream_unsigned_short)
+{
+ GEN_TEST_STREAM(unsigned short);
+}
+
+TEST(MSGPACK, stream_unsigned_int)
+{
+ GEN_TEST_STREAM(unsigned int);
+}
+
+TEST(MSGPACK, stream_unsigned_long)
+{
+ GEN_TEST_STREAM(unsigned long);
+}
+
+TEST(MSGPACK, stream_unsigned_long_long)
+{
+ GEN_TEST_STREAM(unsigned long long);
+}
+
+TEST(MSGPACK, stream_uint8)
+{
+ GEN_TEST_STREAM(uint8_t);
+}
+
+TEST(MSGPACK, stream_uint16)
+{
+ GEN_TEST_STREAM(uint16_t);
+}
+
+TEST(MSGPACK, stream_uint32)
+{
+ GEN_TEST_STREAM(uint32_t);
+}
+
+TEST(MSGPACK, stream_uint64)
+{
+ GEN_TEST_STREAM(uint64_t);
+}
+
+TEST(MSGPACK, stream_int8)
+{
+ GEN_TEST_STREAM(int8_t);
+}
+
+TEST(MSGPACK, stream_int16)
+{
+ GEN_TEST_STREAM(int16_t);
+}
+
+TEST(MSGPACK, stream_int32)
+{
+ GEN_TEST_STREAM(int32_t);
+}
+
+TEST(MSGPACK, stream_int64)
+{
+ GEN_TEST_STREAM(int64_t);
+}