summaryrefslogtreecommitdiff
path: root/cpp/test.cpp
diff options
context:
space:
mode:
authorKazuki Ohta <kzk@il.is.s.u-tokyo.ac.jp>2010-01-16 02:03:11 +0900
committerKazuki Ohta <kzk@il.is.s.u-tokyo.ac.jp>2010-01-16 02:03:11 +0900
commit1066bb38a87df13e89d891682e39df2ef9a08d7c (patch)
tree0df2b914b8cbeac71347b7cd1b8b4466292955cc /cpp/test.cpp
parent2bf3f1856f23d0759686ab74b8abf7f46841564a (diff)
downloadmsgpack-python-1066bb38a87df13e89d891682e39df2ef9a08d7c.tar.gz
add tests for multi[map, set] and tr1::unordered_[multi][map, set]
Diffstat (limited to 'cpp/test.cpp')
-rw-r--r--cpp/test.cpp190
1 files changed, 190 insertions, 0 deletions
diff --git a/cpp/test.cpp b/cpp/test.cpp
index 4447890..b152e6d 100644
--- a/cpp/test.cpp
+++ b/cpp/test.cpp
@@ -10,6 +10,10 @@
#include <gtest/gtest.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
using namespace std;
const unsigned int kLoop = 10000;
@@ -227,6 +231,8 @@ TEST(MSGPACK, simple_buffer_false)
//-----------------------------------------------------------------------------
+// STL
+
TEST(MSGPACK_STL, simple_buffer_string)
{
for (unsigned int k = 0; k < kLoop; k++) {
@@ -365,6 +371,190 @@ TEST(MSGPACK_STL, simple_buffer_pair)
}
}
+TEST(MSGPACK_STL, simple_buffer_multimap)
+{
+ for (unsigned int k = 0; k < kLoop; k++) {
+ multimap<int, int> val1;
+ for (unsigned int i = 0; i < kElements; i++) {
+ int i1 = rand();
+ val1.insert(make_pair(i1, rand()));
+ val1.insert(make_pair(i1, rand()));
+ }
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, val1);
+ msgpack::zone z;
+ msgpack::object obj;
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret);
+ multimap<int, int> val2;
+ obj.convert(&val2);
+
+ vector<pair<int, int> > v1, v2;
+ multimap<int, int>::const_iterator it;
+ for (it = val1.begin(); it != val1.end(); ++it)
+ v1.push_back(make_pair(it->first, it->second));
+ for (it = val2.begin(); it != val2.end(); ++it)
+ v2.push_back(make_pair(it->first, it->second));
+ EXPECT_EQ(val1.size(), val2.size());
+ EXPECT_EQ(v1.size(), v2.size());
+ sort(v1.begin(), v1.end());
+ sort(v2.begin(), v2.end());
+ EXPECT_TRUE(v1 == v2);
+ }
+}
+
+TEST(MSGPACK_STL, simple_buffer_multiset)
+{
+ for (unsigned int k = 0; k < kLoop; k++) {
+ multiset<int> val1;
+ for (unsigned int i = 0; i < kElements; i++)
+ val1.insert(rand());
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, val1);
+ msgpack::zone z;
+ msgpack::object obj;
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret);
+ multiset<int> val2;
+ obj.convert(&val2);
+
+ vector<int> v1, v2;
+ multiset<int>::const_iterator it;
+ for (it = val1.begin(); it != val1.end(); ++it)
+ v1.push_back(*it);
+ for (it = val2.begin(); it != val2.end(); ++it)
+ v2.push_back(*it);
+ EXPECT_EQ(val1.size(), val2.size());
+ EXPECT_EQ(v1.size(), v2.size());
+ sort(v1.begin(), v1.end());
+ sort(v2.begin(), v2.end());
+ EXPECT_TRUE(v1 == v2);
+ }
+}
+
+// TR1
+
+#ifdef HAVE_TR1_UNORDERED_MAP
+#include <tr1/unordered_map>
+#include "cpp/type/tr1/unordered_map.hpp"
+TEST(MSGPACK_TR1, simple_buffer_unordered_map)
+{
+ for (unsigned int k = 0; k < kLoop; k++) {
+ tr1::unordered_map<int, int> val1;
+ for (unsigned int i = 0; i < kElements; i++)
+ val1[rand()] = rand();
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, val1);
+ msgpack::zone z;
+ msgpack::object obj;
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret);
+ tr1::unordered_map<int, int> val2;
+ obj.convert(&val2);
+ EXPECT_EQ(val1.size(), val2.size());
+ tr1::unordered_map<int, int>::const_iterator it;
+ for (it = val1.begin(); it != val1.end(); ++it) {
+ EXPECT_TRUE(val2.find(it->first) != val2.end());
+ EXPECT_EQ(it->second, val2.find(it->first)->second);
+ }
+ }
+}
+
+TEST(MSGPACK_TR1, simple_buffer_unordered_multimap)
+{
+ for (unsigned int k = 0; k < kLoop; k++) {
+ tr1::unordered_multimap<int, int> val1;
+ for (unsigned int i = 0; i < kElements; i++) {
+ int i1 = rand();
+ val1.insert(make_pair(i1, rand()));
+ val1.insert(make_pair(i1, rand()));
+ }
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, val1);
+ msgpack::zone z;
+ msgpack::object obj;
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret);
+ tr1::unordered_multimap<int, int> val2;
+ obj.convert(&val2);
+
+ vector<pair<int, int> > v1, v2;
+ tr1::unordered_multimap<int, int>::const_iterator it;
+ for (it = val1.begin(); it != val1.end(); ++it)
+ v1.push_back(make_pair(it->first, it->second));
+ for (it = val2.begin(); it != val2.end(); ++it)
+ v2.push_back(make_pair(it->first, it->second));
+ EXPECT_EQ(val1.size(), val2.size());
+ EXPECT_EQ(v1.size(), v2.size());
+ sort(v1.begin(), v1.end());
+ sort(v2.begin(), v2.end());
+ EXPECT_TRUE(v1 == v2);
+ }
+}
+#endif
+
+#ifdef HAVE_TR1_UNORDERED_SET
+#include <tr1/unordered_set>
+#include "cpp/type/tr1/unordered_set.hpp"
+TEST(MSGPACK_TR1, simple_buffer_unordered_set)
+{
+ for (unsigned int k = 0; k < kLoop; k++) {
+ tr1::unordered_set<int> val1;
+ for (unsigned int i = 0; i < kElements; i++)
+ val1.insert(rand());
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, val1);
+ msgpack::zone z;
+ msgpack::object obj;
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret);
+ tr1::unordered_set<int> val2;
+ obj.convert(&val2);
+ EXPECT_EQ(val1.size(), val2.size());
+ tr1::unordered_set<int>::const_iterator it;
+ for (it = val1.begin(); it != val1.end(); ++it)
+ EXPECT_TRUE(val2.find(*it) != val2.end());
+ }
+}
+
+TEST(MSGPACK_TR1, simple_buffer_unordered_multiset)
+{
+ for (unsigned int k = 0; k < kLoop; k++) {
+ tr1::unordered_multiset<int> val1;
+ for (unsigned int i = 0; i < kElements; i++)
+ val1.insert(rand());
+ msgpack::sbuffer sbuf;
+ msgpack::pack(sbuf, val1);
+ msgpack::zone z;
+ msgpack::object obj;
+ msgpack::unpack_return ret =
+ msgpack::unpack(sbuf.data(), sbuf.size(), NULL, &z, &obj);
+ EXPECT_EQ(msgpack::UNPACK_SUCCESS, ret);
+ tr1::unordered_multiset<int> val2;
+ obj.convert(&val2);
+
+ vector<int> v1, v2;
+ tr1::unordered_multiset<int>::const_iterator it;
+ for (it = val1.begin(); it != val1.end(); ++it)
+ v1.push_back(*it);
+ for (it = val2.begin(); it != val2.end(); ++it)
+ v2.push_back(*it);
+ EXPECT_EQ(val1.size(), val2.size());
+ EXPECT_EQ(v1.size(), v2.size());
+ sort(v1.begin(), v1.end());
+ sort(v2.begin(), v2.end());
+ EXPECT_TRUE(v1 == v2);
+ }
+}
+#endif
+
+// User-Defined Structures
+
class TestClass
{
public: