mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-24 09:12:30 +02:00
Added versioning namespace and test case to iterator.
This commit is contained in:
committed by
Takatoshi Kondo
parent
994144dac2
commit
327b0db626
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
70
test/iterator.cpp
Normal 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
|
||||||
Reference in New Issue
Block a user