msgpack_stream.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #include "msgpack.hpp"
  2. #include <cmath>
  3. #include <string>
  4. #include <vector>
  5. #include <map>
  6. #include <deque>
  7. #include <set>
  8. #include <list>
  9. #include <limits>
  10. #include <gtest/gtest.h>
  11. #ifdef HAVE_CONFIG_H
  12. #include "config.h"
  13. #endif
  14. using namespace std;
  15. const unsigned int kLoop = 1000;
  16. #define GEN_TEST_STREAM(test_type) \
  17. for (unsigned int k = 0; k < kLoop; k++) { \
  18. msgpack::sbuffer sbuf; \
  19. msgpack::packer<msgpack::sbuffer> pk(sbuf); \
  20. typedef std::vector<test_type> vec_type; \
  21. vec_type vec; \
  22. for(unsigned int i = 0; i < rand() % kLoop; ++i) { \
  23. vec_type::value_type r = rand(); \
  24. vec.push_back(r); \
  25. pk.pack(r); \
  26. } \
  27. msgpack::unpacker pac; \
  28. vec_type::const_iterator it = vec.begin(); \
  29. const char *p = sbuf.data(); \
  30. const char * const pend = p + sbuf.size(); \
  31. while (p < pend) { \
  32. const size_t sz = std::min<size_t>(pend - p, rand() % 128); \
  33. pac.reserve_buffer(sz); \
  34. memcpy(pac.buffer(), p, sz); \
  35. pac.buffer_consumed(sz); \
  36. msgpack::object_handle oh; \
  37. while (pac.next(oh)) { \
  38. if (it == vec.end()) goto out; \
  39. msgpack::object obj = oh.get(); \
  40. vec_type::value_type val; \
  41. obj.convert(val); \
  42. EXPECT_EQ(*it, val); \
  43. ++it; \
  44. } \
  45. p += sz; \
  46. } \
  47. out: \
  48. ; \
  49. }
  50. TEST(MSGPACK, stream_char)
  51. {
  52. GEN_TEST_STREAM(char);
  53. }
  54. TEST(MSGPACK, stream_signed_char)
  55. {
  56. GEN_TEST_STREAM(signed char);
  57. }
  58. TEST(MSGPACK, stream_unsigned_char)
  59. {
  60. GEN_TEST_STREAM(unsigned char);
  61. }
  62. TEST(MSGPACK, stream_short)
  63. {
  64. GEN_TEST_STREAM(short);
  65. }
  66. TEST(MSGPACK, stream_int)
  67. {
  68. GEN_TEST_STREAM(int);
  69. }
  70. TEST(MSGPACK, stream_long)
  71. {
  72. GEN_TEST_STREAM(long);
  73. }
  74. TEST(MSGPACK, stream_long_long)
  75. {
  76. GEN_TEST_STREAM(long long);
  77. }
  78. TEST(MSGPACK, stream_unsigned_short)
  79. {
  80. GEN_TEST_STREAM(unsigned short);
  81. }
  82. TEST(MSGPACK, stream_unsigned_int)
  83. {
  84. GEN_TEST_STREAM(unsigned int);
  85. }
  86. TEST(MSGPACK, stream_unsigned_long)
  87. {
  88. GEN_TEST_STREAM(unsigned long);
  89. }
  90. TEST(MSGPACK, stream_unsigned_long_long)
  91. {
  92. GEN_TEST_STREAM(unsigned long long);
  93. }
  94. TEST(MSGPACK, stream_uint8)
  95. {
  96. GEN_TEST_STREAM(uint8_t);
  97. }
  98. TEST(MSGPACK, stream_uint16)
  99. {
  100. GEN_TEST_STREAM(uint16_t);
  101. }
  102. TEST(MSGPACK, stream_uint32)
  103. {
  104. GEN_TEST_STREAM(uint32_t);
  105. }
  106. TEST(MSGPACK, stream_uint64)
  107. {
  108. GEN_TEST_STREAM(uint64_t);
  109. }
  110. TEST(MSGPACK, stream_int8)
  111. {
  112. GEN_TEST_STREAM(int8_t);
  113. }
  114. TEST(MSGPACK, stream_int16)
  115. {
  116. GEN_TEST_STREAM(int16_t);
  117. }
  118. TEST(MSGPACK, stream_int32)
  119. {
  120. GEN_TEST_STREAM(int32_t);
  121. }
  122. TEST(MSGPACK, stream_int64)
  123. {
  124. GEN_TEST_STREAM(int64_t);
  125. }