Files
rocksdb/util/interval_test.cc
Maciej Szeszko 459236341c Start development 11.4 (#14747)
Summary:
* Release notes from 11.3 branch
* Update version.h
* Add [11.3.fb](https://github.com/facebook/rocksdb/tree/11.3.fb) (to check_format_compatible.sh)
* Update folly commit hash to: https://github.com/facebook/folly/releases/tag/v2026.05.11.00 (see [comment](https://github.com/facebook/rocksdb/pull/14747#issuecomment-4480217173) for more)
* Copyright headers refresh
* Decouple 11.1.fb from 11.2.fb in `db_forward_with_options_refs`
* Add validation step in `check_format_compatible.sh` to prevent gluey release strings

Pull Request resolved: https://github.com/facebook/rocksdb/pull/14747

Reviewed By: xingbowang

Differential Revision: D105443941

Pulled By: mszeszko-meta

fbshipit-source-id: 8499b18cc2ff118d805b3865463ad2a999868de4
2026-05-18 13:35:11 -07:00

103 lines
3.0 KiB
C++

// Copyright (c) Meta Platforms, Inc. and affiliates.
// 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();
}