interval_test.cc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright (c) 2011-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 "db/db_test_util.h"
  6. #include "rocksdb/data_structure.h"
  7. #include "rocksdb/slice.h"
  8. namespace ROCKSDB_NAMESPACE {
  9. class IntervalSetTest : public testing::Test {};
  10. TEST_F(IntervalSetTest, BasicTest) {
  11. IntervalSet<int> set;
  12. set.insert({2, 15});
  13. EXPECT_EQ(set.size(), 1);
  14. set.insert({5, 9});
  15. EXPECT_EQ(set.size(), 1);
  16. set.insert({0, 10});
  17. EXPECT_EQ(set.size(), 1);
  18. set.insert({25, 30});
  19. EXPECT_EQ(set.size(), 2);
  20. set.insert({16, 25});
  21. EXPECT_EQ(set.size(), 2);
  22. set.insert({45, 85});
  23. ASSERT_EQ(set.size(), 3);
  24. auto iter = set.begin();
  25. ASSERT_EQ(*iter, Interval<int>(0, 15));
  26. iter++;
  27. ASSERT_EQ(*iter, Interval<int>(16, 30));
  28. iter++;
  29. ASSERT_EQ(*iter, Interval<int>(45, 85));
  30. set.insert({31});
  31. iter = set.begin();
  32. ASSERT_EQ(*iter, Interval<int>(0, 15));
  33. iter++;
  34. ASSERT_EQ(*iter, Interval<int>(16, 30));
  35. iter++;
  36. ASSERT_EQ(*iter, Interval<int>(31));
  37. }
  38. TEST_F(IntervalSetTest, SliceTest) {
  39. IntervalSet<Slice, Comparator> set(BytewiseComparator());
  40. EXPECT_TRUE(set.insert("k00", "k10"));
  41. // Should do nothing
  42. EXPECT_TRUE(set.insert("k02", "k08"));
  43. auto iter = set.begin();
  44. ASSERT_EQ(iter->start().ToString(), "k00");
  45. ASSERT_EQ(iter->end().ToString(), "k10");
  46. ASSERT_EQ(set.size(), 1);
  47. iter++;
  48. ASSERT_EQ(iter, set.end());
  49. EXPECT_TRUE(set.insert("k15", "k20"));
  50. EXPECT_TRUE(set.insert("k16"));
  51. ASSERT_EQ(set.size(), 2);
  52. iter = set.begin();
  53. ASSERT_EQ(iter->start().ToString(), "k00");
  54. ASSERT_EQ(iter->end().ToString(), "k10");
  55. iter++;
  56. ASSERT_EQ(iter->start().ToString(), "k15");
  57. ASSERT_EQ(iter->has_end(), false);
  58. //
  59. }
  60. TEST_F(IntervalSetTest, PropModeTest) {
  61. IntervalSet<Slice, Comparator> set(BytewiseComparator(), true);
  62. EXPECT_TRUE(set.insert("k00", "k10"));
  63. // Should do nothing
  64. EXPECT_FALSE(set.insert("k02", "k08"));
  65. EXPECT_EQ(set.size(), 1);
  66. EXPECT_TRUE(set.insert("k15", "k20"));
  67. EXPECT_EQ(set.size(), 2);
  68. EXPECT_FALSE(set.insert("k16"));
  69. ASSERT_EQ(set.size(), 2);
  70. auto iter = set.begin();
  71. ASSERT_EQ(iter->start().ToString(), "k00");
  72. ASSERT_EQ(iter->end().ToString(), "k10");
  73. iter++;
  74. ASSERT_EQ(iter->start().ToString(), "k15");
  75. ASSERT_EQ(iter->end().ToString(), "k20");
  76. EXPECT_TRUE(set.insert("k12", "k14"));
  77. iter = set.begin();
  78. ASSERT_EQ(set.size(), 3);
  79. ASSERT_EQ(iter->start().ToString(), "k00");
  80. ASSERT_EQ(iter->end().ToString(), "k10");
  81. iter++;
  82. ASSERT_EQ(iter->start().ToString(), "k12");
  83. ASSERT_EQ(iter->end().ToString(), "k14");
  84. iter++;
  85. ASSERT_EQ(iter->start().ToString(), "k15");
  86. ASSERT_EQ(iter->end().ToString(), "k20");
  87. }
  88. } // namespace ROCKSDB_NAMESPACE
  89. int main(int argc, char** argv) {
  90. ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
  91. ::testing::InitGoogleTest(&argc, argv);
  92. return RUN_ALL_TESTS();
  93. }