Added versioning namespace and test case to iterator.

This commit is contained in:
Mizuki Hirata
2015-02-02 02:42:41 +09:00
committed by Takatoshi Kondo
parent 994144dac2
commit 327b0db626
4 changed files with 89 additions and 10 deletions

View File

@@ -20,7 +20,11 @@
#define MSGPACK_ITERATOR_HPP #define MSGPACK_ITERATOR_HPP
#if !defined(MSGPACK_USE_CPP03) #if !defined(MSGPACK_USE_CPP03)
#include <msgpack_fwd.hpp>
namespace msgpack namespace msgpack
{
MSGPACK_API_VERSION_NAMESPACE(MSGPACK_DEFAULT_API_NS)
{ {
inline object_kv* begin(object_map &map) { return map.ptr; } inline object_kv* begin(object_map &map) { return map.ptr; }
inline const object_kv* begin(const object_map &map) { return map.ptr; } inline const object_kv* begin(const object_map &map) { return map.ptr; }
@@ -32,6 +36,7 @@ namespace msgpack
inline object* end(object_array &array) { return array.ptr + array.size; } inline object* end(object_array &array) { return array.ptr + array.size; }
inline const object* end(const object_array &array) { return array.ptr + array.size; } inline const object* end(const object_array &array) { return array.ptr + array.size; }
} }
}
#endif // !defined(MSGPACK_USE_CPP03) #endif // !defined(MSGPACK_USE_CPP03)
#endif // MSGPACK_ITERATOR_HPP #endif // MSGPACK_ITERATOR_HPP

View File

@@ -29,6 +29,7 @@ LIST (APPEND check_PROGRAMS
msgpack_c.cpp msgpack_c.cpp
reference.cpp reference.cpp
limit.cpp limit.cpp
iterator.cpp
) )
IF (MSGPACK_CXX11) IF (MSGPACK_CXX11)

View File

@@ -25,7 +25,8 @@ check_PROGRAMS = \
msgpack_cpp11 \ msgpack_cpp11 \
reference_cpp11 \ reference_cpp11 \
reference \ reference \
limit limit \
iterator
TESTS = $(check_PROGRAMS) TESTS = $(check_PROGRAMS)
@@ -76,4 +77,6 @@ reference_cpp11_SOURCES = reference_cpp11.cpp
limit_SOURCES = limit.cpp limit_SOURCES = limit.cpp
iterator_SOURCES = iterator.cpp
EXTRA_DIST = cases.mpac cases_compact.mpac EXTRA_DIST = cases.mpac cases_compact.mpac

70
test/iterator.cpp Normal file
View File

@@ -0,0 +1,70 @@
#include <msgpack.hpp>
#include <gtest/gtest.h>
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
using namespace std;
#if !defined(MSGPACK_USE_CPP03)
#include <iterator>
// C++11
constexpr unsigned int VECTOR_SIZE = 100;
constexpr unsigned int MAP_SIZE = 100;
TEST(iterator, vector)
{
using vec_type = vector<unsigned int>;
vec_type vec;
vec.reserve(VECTOR_SIZE);
for (unsigned int i = 0; i < VECTOR_SIZE; i++) {
vec.push_back(rand());
}
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, vec);
msgpack::unpacked ret;
msgpack::unpack(ret, sbuf.data(), sbuf.size());
auto &msgarr = ret.get().via.array;
auto dist = std::distance(begin(msgarr), end(msgarr));
auto vecSize = vec.size();
EXPECT_EQ(dist, vecSize);
vec_type::iterator correct = std::begin(vec);
for (auto i : msgarr) {
auto u64 = *correct;
EXPECT_EQ(i, u64);
++correct;
}
}
TEST(iterator, map)
{
using map_type = map<unsigned int, unsigned int>;
map_type map;
for (unsigned int i = 0; i < MAP_SIZE; i++) {
map[rand()] = rand();
}
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, map);
msgpack::unpacked ret;
msgpack::unpack(ret, sbuf.data(), sbuf.size());
auto &msgmap = ret.get().via.map;
auto dist = std::distance(begin(msgmap), end(msgmap));
auto mapSize = map.size();
EXPECT_EQ(dist, mapSize);
for (auto kv : msgmap) {
auto val = kv.val.via.u64;
auto correct = map[kv.key.via.u64];
EXPECT_EQ(val, correct);
}
}
#endif // !defined(MSGPACK_USE_CPP03