buffer.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #include <msgpack.hpp>
  2. #include <msgpack/fbuffer.hpp>
  3. #include <msgpack/fbuffer.h>
  4. #include <msgpack/zbuffer.hpp>
  5. #include <msgpack/zbuffer.h>
  6. #include <gtest/gtest.h>
  7. #include <string.h>
  8. TEST(buffer, sbuffer)
  9. {
  10. msgpack::sbuffer sbuf;
  11. sbuf.write("a", 1);
  12. sbuf.write("a", 1);
  13. sbuf.write("a", 1);
  14. EXPECT_EQ(3ul, sbuf.size());
  15. EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 );
  16. sbuf.clear();
  17. sbuf.write("a", 1);
  18. sbuf.write("a", 1);
  19. sbuf.write("a", 1);
  20. EXPECT_EQ(3ul, sbuf.size());
  21. EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 );
  22. }
  23. TEST(buffer, vrefbuffer)
  24. {
  25. msgpack::vrefbuffer vbuf;
  26. vbuf.write("a", 1);
  27. vbuf.write("a", 1);
  28. vbuf.write("a", 1);
  29. const struct iovec* vec = vbuf.vector();
  30. size_t veclen = vbuf.vector_size();
  31. msgpack::sbuffer sbuf;
  32. for(size_t i=0; i < veclen; ++i) {
  33. sbuf.write((const char*)vec[i].iov_base, vec[i].iov_len);
  34. }
  35. EXPECT_EQ(3ul, sbuf.size());
  36. EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 );
  37. vbuf.clear();
  38. vbuf.write("a", 1);
  39. vbuf.write("a", 1);
  40. vbuf.write("a", 1);
  41. vec = vbuf.vector();
  42. veclen = vbuf.vector_size();
  43. sbuf.clear();
  44. for(size_t i=0; i < veclen; ++i) {
  45. sbuf.write((const char*)vec[i].iov_base, vec[i].iov_len);
  46. }
  47. EXPECT_EQ(3ul, sbuf.size());
  48. EXPECT_TRUE( memcmp(sbuf.data(), "aaa", 3) == 0 );
  49. }
  50. TEST(buffer, zbuffer)
  51. {
  52. msgpack::zbuffer zbuf;
  53. zbuf.write("a", 1);
  54. zbuf.write("a", 1);
  55. zbuf.write("a", 1);
  56. zbuf.write("", 0);
  57. zbuf.flush();
  58. }
  59. TEST(buffer, zbuffer_c)
  60. {
  61. msgpack_zbuffer zbuf;
  62. EXPECT_TRUE(msgpack_zbuffer_init(&zbuf, 1, MSGPACK_ZBUFFER_INIT_SIZE));
  63. EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
  64. EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
  65. EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "a", 1));
  66. EXPECT_EQ(0, msgpack_zbuffer_write(&zbuf, "", 0));
  67. EXPECT_TRUE(msgpack_zbuffer_flush(&zbuf) != NULL);
  68. msgpack_zbuffer_destroy(&zbuf);
  69. }
  70. TEST(buffer, fbuffer)
  71. {
  72. #if defined(_MSC_VER)
  73. FILE* file;
  74. tmpfile_s(&file);
  75. #else // defined(_MSC_VER)
  76. FILE* file = tmpfile();
  77. #endif // defined(_MSC_VER)
  78. EXPECT_TRUE( file != NULL );
  79. msgpack::fbuffer fbuf(file);
  80. EXPECT_EQ(file, fbuf.file());
  81. fbuf.write("a", 1);
  82. fbuf.write("a", 1);
  83. fbuf.write("a", 1);
  84. fflush(file);
  85. rewind(file);
  86. for (size_t i=0; i < 3; ++i) {
  87. int ch = fgetc(file);
  88. EXPECT_TRUE(ch != EOF);
  89. EXPECT_EQ('a', static_cast<char>(ch));
  90. }
  91. EXPECT_EQ(EOF, fgetc(file));
  92. fclose(file);
  93. }
  94. TEST(buffer, fbuffer_c)
  95. {
  96. #if defined(_MSC_VER)
  97. FILE* file;
  98. tmpfile_s(&file);
  99. #else // defined(_MSC_VER)
  100. FILE* file = tmpfile();
  101. #endif // defined(_MSC_VER)
  102. void* fbuf = (void*)file;
  103. EXPECT_TRUE( file != NULL );
  104. EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
  105. EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
  106. EXPECT_EQ(0, msgpack_fbuffer_write(fbuf, "a", 1));
  107. fflush(file);
  108. rewind(file);
  109. for (size_t i=0; i < 3; ++i) {
  110. int ch = fgetc(file);
  111. EXPECT_TRUE(ch != EOF);
  112. EXPECT_EQ('a', (char) ch);
  113. }
  114. EXPECT_EQ(EOF, fgetc(file));
  115. fclose(file);
  116. }