iterator_cpp11.cpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <msgpack.hpp>
  2. #include <gtest/gtest.h>
  3. #ifdef HAVE_CONFIG_H
  4. #include "config.h"
  5. #endif
  6. using namespace std;
  7. #if !defined(MSGPACK_USE_CPP03)
  8. #include <iterator>
  9. // C++11
  10. constexpr unsigned int VECTOR_SIZE = 100;
  11. constexpr unsigned int MAP_SIZE = 100;
  12. TEST(iterator, vector)
  13. {
  14. using vec_type = vector<unsigned int>;
  15. vec_type vec;
  16. vec.reserve(VECTOR_SIZE);
  17. for (unsigned int i = 0; i < VECTOR_SIZE; i++) {
  18. vec.push_back(rand());
  19. }
  20. msgpack::sbuffer sbuf;
  21. msgpack::pack(sbuf, vec);
  22. msgpack::object_handle oh =
  23. msgpack::unpack(sbuf.data(), sbuf.size());
  24. auto const& msgarr = oh.get().via.array;
  25. auto dist = std::distance(begin(msgarr), end(msgarr));
  26. auto vecSize = vec.size();
  27. EXPECT_EQ(static_cast<size_t>(dist), vecSize);
  28. vec_type::const_iterator correct = std::begin(vec);
  29. for (auto const& obj : msgarr) {
  30. auto u64 = *correct;
  31. EXPECT_EQ(obj.as<unsigned int>(), u64);
  32. ++correct;
  33. }
  34. }
  35. TEST(iterator, map)
  36. {
  37. using map_type = map<unsigned int, unsigned int>;
  38. map_type map;
  39. for (unsigned int i = 0; i < MAP_SIZE; i++) {
  40. map[rand()] = rand();
  41. }
  42. msgpack::sbuffer sbuf;
  43. msgpack::pack(sbuf, map);
  44. msgpack::object_handle oh =
  45. msgpack::unpack(sbuf.data(), sbuf.size());
  46. auto const& msgmap = oh.get().via.map;
  47. auto dist = std::distance(begin(msgmap), end(msgmap));
  48. auto mapSize = map.size();
  49. EXPECT_EQ(static_cast<size_t>(dist), mapSize);
  50. for (auto const& kv : msgmap) {
  51. auto key = kv.key.as<unsigned int>();
  52. auto val = kv.val.as<unsigned int>();
  53. auto correct = map[key];
  54. EXPECT_EQ(val, correct);
  55. }
  56. }
  57. #endif // !defined(MSGPACK_USE_CPP03