summaryrefslogtreecommitdiffstats
path: root/vespalib/src/tests/btree/btree_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vespalib/src/tests/btree/btree_test.cpp')
-rw-r--r--vespalib/src/tests/btree/btree_test.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/vespalib/src/tests/btree/btree_test.cpp b/vespalib/src/tests/btree/btree_test.cpp
index f6fa962fa9d..21838676906 100644
--- a/vespalib/src/tests/btree/btree_test.cpp
+++ b/vespalib/src/tests/btree/btree_test.cpp
@@ -231,6 +231,7 @@ protected:
template <typename TreeType>
void requireThatUpperBoundWorksT();
void requireThatIteratorDistanceWorks(int numEntries);
+ void test_step_forward(int num_entries);
};
template <typename LeafNodeType>
@@ -1519,6 +1520,33 @@ BTreeTest::requireThatIteratorDistanceWorks(int numEntries)
}
}
+void
+BTreeTest::test_step_forward(int num_entries)
+{
+ GenerationHandler g;
+ MyTree tree;
+ for (int i = 0; i < num_entries; ++i) {
+ tree.insert(i, toStr(i));
+ }
+ auto it = tree.begin();
+ auto ite = it;
+ ite.end();
+ for (int i = 0; i <= num_entries; ++i) {
+ auto iit = tree.lowerBound(i);
+ auto iit2 = iit;
+ iit2 += (num_entries - i);
+ EXPECT_TRUE(iit2.identical(ite));
+ iit2 = iit;
+ iit2 += (1000000 + num_entries);
+ EXPECT_TRUE(iit2.identical(ite));
+ for (int j = i; j <= num_entries; ++j) {
+ auto jit = tree.lowerBound(j);
+ auto iit3 = iit;
+ iit3 += (j - i);
+ EXPECT_TRUE(iit3.identical(jit));
+ }
+ }
+}
TEST_F(BTreeTest, require_that_iterator_distance_works)
{
@@ -1530,6 +1558,16 @@ TEST_F(BTreeTest, require_that_iterator_distance_works)
requireThatIteratorDistanceWorks(400);
}
+TEST_F(BTreeTest, require_that_step_forward_works)
+{
+ test_step_forward(1);
+ test_step_forward(3);
+ test_step_forward(8);
+ test_step_forward(20);
+ test_step_forward(100);
+ test_step_forward(400);
+}
+
TEST_F(BTreeTest, require_that_foreach_key_works)
{
using Tree = BTree<int, int, btree::NoAggregated, MyComp, MyTraits>;