diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-05-03 15:43:29 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-05-03 20:24:29 +0200 |
commit | 3ae5c8ae0b25b8619f97ca28fecde3c0ec510ebe (patch) | |
tree | 0ba3110e0050655a24592b72d492c8cf91c6f74f /vespalib | |
parent | d6cb1273bcebdea6b8404b242cecb81802d0fb60 (diff) |
Avoid taking an undefined ref of nullptr when mutation vector is empty
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/tests/btree/btree_test.cpp | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/vespalib/src/tests/btree/btree_test.cpp b/vespalib/src/tests/btree/btree_test.cpp index bd4f4f8ee08..92f55681c0f 100644 --- a/vespalib/src/tests/btree/btree_test.cpp +++ b/vespalib/src/tests/btree/btree_test.cpp @@ -1285,6 +1285,23 @@ TEST_F(BTreeTest, require_that_small_nodes_works) s.trimHoldLists(g.getFirstUsedGeneration()); } +namespace { + +template <typename TreeStore, typename AdditionsVector, typename RemovalsVector> +void +apply_tree_mutations(TreeStore& s, + EntryRef& root, + const AdditionsVector& additions, + const RemovalsVector& removals) +{ + s.apply(root, additions.empty() ? nullptr : &additions[0], + additions.empty() ? nullptr : &additions[0] + additions.size(), + removals.empty() ? nullptr : &removals[0], + removals.empty() ? nullptr : &removals[0] + removals.size()); +} + +} + TEST_F(BTreeTest, require_that_apply_works) { @@ -1304,32 +1321,28 @@ TEST_F(BTreeTest, require_that_apply_works) additions.clear(); removals.clear(); additions.push_back(KeyDataType(40, "fourty")); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(1u, s.size(root)); EXPECT_TRUE(s.isSmallArray(root)); additions.clear(); removals.clear(); additions.push_back(KeyDataType(20, "twenty")); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(2u, s.size(root)); EXPECT_TRUE(s.isSmallArray(root)); additions.clear(); removals.clear(); additions.push_back(KeyDataType(60, "sixty")); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(3u, s.size(root)); EXPECT_TRUE(s.isSmallArray(root)); additions.clear(); removals.clear(); additions.push_back(KeyDataType(50, "fifty")); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(4u, s.size(root)); EXPECT_TRUE(s.isSmallArray(root)); @@ -1337,8 +1350,7 @@ TEST_F(BTreeTest, require_that_apply_works) additions.clear(); removals.clear(); additions.push_back(KeyDataType(1000 + i, "big")); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(5u + i, s.size(root)); EXPECT_EQ(5u + i <= 8u, s.isSmallArray(root)); } @@ -1346,32 +1358,28 @@ TEST_F(BTreeTest, require_that_apply_works) additions.clear(); removals.clear(); removals.push_back(40); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(103u, s.size(root)); EXPECT_TRUE(!s.isSmallArray(root)); additions.clear(); removals.clear(); removals.push_back(20); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(102u, s.size(root)); EXPECT_TRUE(!s.isSmallArray(root)); additions.clear(); removals.clear(); removals.push_back(50); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(101u, s.size(root)); EXPECT_TRUE(!s.isSmallArray(root)); for (uint32_t i = 0; i < 100; ++i) { additions.clear(); removals.clear(); removals.push_back(1000 +i); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(100 - i, s.size(root)); EXPECT_EQ(100 - i <= 8u, s.isSmallArray(root)); } @@ -1384,14 +1392,12 @@ TEST_F(BTreeTest, require_that_apply_works) additions.push_back(KeyDataType(1000 + i, "big")); removals.push_back(60); removals.push_back(1002); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(20u, s.size(root)); EXPECT_TRUE(!s.isSmallArray(root)); additions.clear(); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(19u, s.size(root)); EXPECT_TRUE(!s.isSmallArray(root)); @@ -1401,8 +1407,7 @@ TEST_F(BTreeTest, require_that_apply_works) additions.push_back(KeyDataType(1100 + i, "big")); for (uint32_t i = 0; i < 10; ++i) removals.push_back(1000 + i); - s.apply(root, &additions[0], &additions[0] + additions.size(), - &removals[0], &removals[0] + removals.size()); + apply_tree_mutations(s, root, additions, removals); EXPECT_EQ(30u, s.size(root)); EXPECT_TRUE(!s.isSmallArray(root)); |