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));
146 auto*
removed = tree.remove(2);
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};
183 for (
size_t i = 0; i <
expected.size(); ++i)
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};
465 for (Tree::Iterator it(tree); it.has_curr(); it.next())
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
Node * insert(Node *p) noexcept
void insert_range(int start, int end)
Node * make_node(int key)
std::vector< Node * > nodes
QuadTree - Hierarchical spatial index for 2D points.
TEST_F(HtdRbTreeRkTest, EmptyTree)
Main namespace for Aleph-w library functions.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
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).