cassandra_serialize_test.cc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #include "test_util/testharness.h"
  6. #include "utilities/cassandra/serialize.h"
  7. using namespace ROCKSDB_NAMESPACE::cassandra;
  8. namespace ROCKSDB_NAMESPACE {
  9. namespace cassandra {
  10. TEST(SerializeTest, SerializeI64) {
  11. std::string dest;
  12. Serialize<int64_t>(0, &dest);
  13. EXPECT_EQ(
  14. std::string(
  15. {'\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00'}),
  16. dest);
  17. dest.clear();
  18. Serialize<int64_t>(1, &dest);
  19. EXPECT_EQ(
  20. std::string(
  21. {'\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x01'}),
  22. dest);
  23. dest.clear();
  24. Serialize<int64_t>(-1, &dest);
  25. EXPECT_EQ(
  26. std::string(
  27. {'\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff'}),
  28. dest);
  29. dest.clear();
  30. Serialize<int64_t>(9223372036854775807, &dest);
  31. EXPECT_EQ(
  32. std::string(
  33. {'\x7f', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff', '\xff'}),
  34. dest);
  35. dest.clear();
  36. Serialize<int64_t>(-9223372036854775807, &dest);
  37. EXPECT_EQ(
  38. std::string(
  39. {'\x80', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x01'}),
  40. dest);
  41. }
  42. TEST(SerializeTest, DeserializeI64) {
  43. std::string dest;
  44. std::size_t offset = dest.size();
  45. Serialize<int64_t>(0, &dest);
  46. EXPECT_EQ(0, Deserialize<int64_t>(dest.c_str(), offset));
  47. offset = dest.size();
  48. Serialize<int64_t>(1, &dest);
  49. EXPECT_EQ(1, Deserialize<int64_t>(dest.c_str(), offset));
  50. offset = dest.size();
  51. Serialize<int64_t>(-1, &dest);
  52. EXPECT_EQ(-1, Deserialize<int64_t>(dest.c_str(), offset));
  53. offset = dest.size();
  54. Serialize<int64_t>(-9223372036854775807, &dest);
  55. EXPECT_EQ(-9223372036854775807, Deserialize<int64_t>(dest.c_str(), offset));
  56. offset = dest.size();
  57. Serialize<int64_t>(9223372036854775807, &dest);
  58. EXPECT_EQ(9223372036854775807, Deserialize<int64_t>(dest.c_str(), offset));
  59. }
  60. TEST(SerializeTest, SerializeI32) {
  61. std::string dest;
  62. Serialize<int32_t>(0, &dest);
  63. EXPECT_EQ(
  64. std::string(
  65. {'\x00', '\x00', '\x00', '\x00'}),
  66. dest);
  67. dest.clear();
  68. Serialize<int32_t>(1, &dest);
  69. EXPECT_EQ(
  70. std::string(
  71. {'\x00', '\x00', '\x00', '\x01'}),
  72. dest);
  73. dest.clear();
  74. Serialize<int32_t>(-1, &dest);
  75. EXPECT_EQ(
  76. std::string(
  77. {'\xff', '\xff', '\xff', '\xff'}),
  78. dest);
  79. dest.clear();
  80. Serialize<int32_t>(2147483647, &dest);
  81. EXPECT_EQ(
  82. std::string(
  83. {'\x7f', '\xff', '\xff', '\xff'}),
  84. dest);
  85. dest.clear();
  86. Serialize<int32_t>(-2147483648LL, &dest);
  87. EXPECT_EQ(
  88. std::string(
  89. {'\x80', '\x00', '\x00', '\x00'}),
  90. dest);
  91. }
  92. TEST(SerializeTest, DeserializeI32) {
  93. std::string dest;
  94. std::size_t offset = dest.size();
  95. Serialize<int32_t>(0, &dest);
  96. EXPECT_EQ(0, Deserialize<int32_t>(dest.c_str(), offset));
  97. offset = dest.size();
  98. Serialize<int32_t>(1, &dest);
  99. EXPECT_EQ(1, Deserialize<int32_t>(dest.c_str(), offset));
  100. offset = dest.size();
  101. Serialize<int32_t>(-1, &dest);
  102. EXPECT_EQ(-1, Deserialize<int32_t>(dest.c_str(), offset));
  103. offset = dest.size();
  104. Serialize<int32_t>(2147483647, &dest);
  105. EXPECT_EQ(2147483647, Deserialize<int32_t>(dest.c_str(), offset));
  106. offset = dest.size();
  107. Serialize<int32_t>(-2147483648LL, &dest);
  108. EXPECT_EQ(-2147483648LL, Deserialize<int32_t>(dest.c_str(), offset));
  109. }
  110. TEST(SerializeTest, SerializeI8) {
  111. std::string dest;
  112. Serialize<int8_t>(0, &dest);
  113. EXPECT_EQ(std::string({'\x00'}), dest);
  114. dest.clear();
  115. Serialize<int8_t>(1, &dest);
  116. EXPECT_EQ(std::string({'\x01'}), dest);
  117. dest.clear();
  118. Serialize<int8_t>(-1, &dest);
  119. EXPECT_EQ(std::string({'\xff'}), dest);
  120. dest.clear();
  121. Serialize<int8_t>(127, &dest);
  122. EXPECT_EQ(std::string({'\x7f'}), dest);
  123. dest.clear();
  124. Serialize<int8_t>(-128, &dest);
  125. EXPECT_EQ(std::string({'\x80'}), dest);
  126. }
  127. TEST(SerializeTest, DeserializeI8) {
  128. std::string dest;
  129. std::size_t offset = dest.size();
  130. Serialize<int8_t>(0, &dest);
  131. EXPECT_EQ(0, Deserialize<int8_t>(dest.c_str(), offset));
  132. offset = dest.size();
  133. Serialize<int8_t>(1, &dest);
  134. EXPECT_EQ(1, Deserialize<int8_t>(dest.c_str(), offset));
  135. offset = dest.size();
  136. Serialize<int8_t>(-1, &dest);
  137. EXPECT_EQ(-1, Deserialize<int8_t>(dest.c_str(), offset));
  138. offset = dest.size();
  139. Serialize<int8_t>(127, &dest);
  140. EXPECT_EQ(127, Deserialize<int8_t>(dest.c_str(), offset));
  141. offset = dest.size();
  142. Serialize<int8_t>(-128, &dest);
  143. EXPECT_EQ(-128, Deserialize<int8_t>(dest.c_str(), offset));
  144. }
  145. } // namespace cassandra
  146. } // namespace ROCKSDB_NAMESPACE
  147. int main(int argc, char** argv) {
  148. ::testing::InitGoogleTest(&argc, argv);
  149. return RUN_ALL_TESTS();
  150. }