43#include <gtest/gtest.h>
82 for (
int i = start; i < end; ++i)
100 tree.insert(make_node(42));
106 auto*
found = tree.search(42);
118 for (
int i = 0; i < 10; ++i)
119 EXPECT_NE(tree.search(i),
nullptr) <<
"Missing key " << i;
124 tree.
insert(make_node(42));
125 auto* dup = tree.insert(make_node(42));
134 tree.insert_dup(make_node(42));
135 tree.insert_dup(make_node(42));
136 tree.insert_dup(make_node(42));
156 std::vector<int> keys = {50, 25, 75, 10, 30, 60, 90};
158 tree.insert(make_node(
k));
164 EXPECT_TRUE(tree.verify()) <<
"Verify failed after removing " <<
k;
176 std::vector<int> keys = {50, 25, 75, 10, 30, 60, 90};
178 tree.insert(make_node(
k));
181 std::vector<int>
expected = {10, 25, 30, 50, 60, 75, 90};
185 auto* selected = tree.select(i);
186 ASSERT_NE(selected,
nullptr) <<
"select(" << i <<
") returned null";
208 for (
int i = 0; i <
N; ++i)
209 tree.insert(make_node(i * 2));
211 EXPECT_EQ(tree.size(),
static_cast<size_t>(
N));
214 for (
int i = 0; i <
N; ++i)
216 auto* selected = tree.select(i);
224 std::vector<int> keys = {10, 20, 30, 40, 50};
226 tree.insert(make_node(
k));
228 for (
size_t i = 0; i < keys.size(); ++i)
230 auto [pos, node] = tree.position(keys[i]);
231 EXPECT_EQ(pos,
static_cast<long>(i)) <<
"Position wrong for " << keys[i];
241 auto [pos, node] = tree.position(100);
250 auto [pos, node] = tree.find_position(5);
259 for (
int i = 0; i < 5; ++i)
260 tree.insert(make_node(i * 2));
265 auto [pos, node] = tree.find_position(5);
277 auto*
removed = tree.remove_pos(2);
289 tree.split_pos(3,
t1,
t2);
320 for (
int i = 0; i < 5; ++i)
329 tree2 = std::move(tree);
346 std::vector<RbNodeRk<int>*>
bu_nodes;
349 for (
int i = 0; i < 50; ++i)
369 for (
size_t i = 0; i <
htd.
size(); ++i)
388 for (
int i = 0; i < 200; ++i)
389 tree.
insert(make_node(i));
395 for (
int i = 0; i < 200; i += 2)
403 for (
size_t i = 0; i < tree.size(); ++i)
414 for (
int i = 0; i <
N; ++i)
415 tree.
insert(make_node(i));
417 EXPECT_EQ(tree.size(),
static_cast<size_t>(
N));
426 for (
int i = 0; i <
N; i += 2)
429 EXPECT_EQ(tree.size(),
static_cast<size_t>(
N/2));
433 for (
int i = 1; i <
N; i += 2)
439 insert_range(0, 100);
442 for (
size_t i = 0; i < 100; ++i)
444 auto* selected = tree.select(i);
445 auto [pos, node] = tree.position(
KEY(selected));
458 std::vector<int> keys = {50, 25, 75, 10, 30, 60, 90};
460 tree.insert(make_node(
k));
462 std::vector<int>
expected = {10, 25, 30, 50, 60, 75, 90};
494 auto* n1 = make_node(42);
495 auto*
result1 = tree.search_or_insert(n1);
499 auto* n2 = make_node(42);
500 auto*
result2 = tree.search_or_insert(n2);
WeightedDigraph::Node Node
bool has_curr() const noexcept
Return true the iterator has current node.
T & insert(const T &item)
Insert a new item by copy.
T remove()
Remove the first item of the list.
size_t size() const noexcept
Count the number of elements of the list.
Node * insert(Node *p) noexcept
void insert_range(int start, int end)
Node * make_node(int key)
std::vector< Node * > nodes
TEST_F(HtdRbTreeRkTest, EmptyTree)
Main namespace for Aleph-w library functions.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Iterator on nodes of the tree.
Red-Black binary search tree with nodes without virtual destructor and with subtree counters for sele...
Hybrid top-down/bottom-up red-black tree with rank support.
Red-Black tree with rank (order statistics).