| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #include "db/db_test_util.h"
- #include "rocksdb/data_structure.h"
- #include "rocksdb/slice.h"
- namespace ROCKSDB_NAMESPACE {
- class IntervalSetTest : public testing::Test {};
- TEST_F(IntervalSetTest, BasicTest) {
- IntervalSet<int> set;
- set.insert({2, 15});
- EXPECT_EQ(set.size(), 1);
- set.insert({5, 9});
- EXPECT_EQ(set.size(), 1);
- set.insert({0, 10});
- EXPECT_EQ(set.size(), 1);
- set.insert({25, 30});
- EXPECT_EQ(set.size(), 2);
- set.insert({16, 25});
- EXPECT_EQ(set.size(), 2);
- set.insert({45, 85});
- ASSERT_EQ(set.size(), 3);
- auto iter = set.begin();
- ASSERT_EQ(*iter, Interval<int>(0, 15));
- iter++;
- ASSERT_EQ(*iter, Interval<int>(16, 30));
- iter++;
- ASSERT_EQ(*iter, Interval<int>(45, 85));
- set.insert({31});
- iter = set.begin();
- ASSERT_EQ(*iter, Interval<int>(0, 15));
- iter++;
- ASSERT_EQ(*iter, Interval<int>(16, 30));
- iter++;
- ASSERT_EQ(*iter, Interval<int>(31));
- }
- TEST_F(IntervalSetTest, SliceTest) {
- IntervalSet<Slice, Comparator> set(BytewiseComparator());
- EXPECT_TRUE(set.insert("k00", "k10"));
- // Should do nothing
- EXPECT_TRUE(set.insert("k02", "k08"));
- auto iter = set.begin();
- ASSERT_EQ(iter->start().ToString(), "k00");
- ASSERT_EQ(iter->end().ToString(), "k10");
- ASSERT_EQ(set.size(), 1);
- iter++;
- ASSERT_EQ(iter, set.end());
- EXPECT_TRUE(set.insert("k15", "k20"));
- EXPECT_TRUE(set.insert("k16"));
- ASSERT_EQ(set.size(), 2);
- iter = set.begin();
- ASSERT_EQ(iter->start().ToString(), "k00");
- ASSERT_EQ(iter->end().ToString(), "k10");
- iter++;
- ASSERT_EQ(iter->start().ToString(), "k15");
- ASSERT_EQ(iter->has_end(), false);
- //
- }
- TEST_F(IntervalSetTest, PropModeTest) {
- IntervalSet<Slice, Comparator> set(BytewiseComparator(), true);
- EXPECT_TRUE(set.insert("k00", "k10"));
- // Should do nothing
- EXPECT_FALSE(set.insert("k02", "k08"));
- EXPECT_EQ(set.size(), 1);
- EXPECT_TRUE(set.insert("k15", "k20"));
- EXPECT_EQ(set.size(), 2);
- EXPECT_FALSE(set.insert("k16"));
- ASSERT_EQ(set.size(), 2);
- auto iter = set.begin();
- ASSERT_EQ(iter->start().ToString(), "k00");
- ASSERT_EQ(iter->end().ToString(), "k10");
- iter++;
- ASSERT_EQ(iter->start().ToString(), "k15");
- ASSERT_EQ(iter->end().ToString(), "k20");
- EXPECT_TRUE(set.insert("k12", "k14"));
- iter = set.begin();
- ASSERT_EQ(set.size(), 3);
- ASSERT_EQ(iter->start().ToString(), "k00");
- ASSERT_EQ(iter->end().ToString(), "k10");
- iter++;
- ASSERT_EQ(iter->start().ToString(), "k12");
- ASSERT_EQ(iter->end().ToString(), "k14");
- iter++;
- ASSERT_EQ(iter->start().ToString(), "k15");
- ASSERT_EQ(iter->end().ToString(), "k20");
- }
- } // namespace ROCKSDB_NAMESPACE
- int main(int argc, char** argv) {
- ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
- ::testing::InitGoogleTest(&argc, argv);
- return RUN_ALL_TESTS();
- }
|