50#include <gtest/gtest.h>
55using namespace testing;
65 std::vector<Node *> allocated;
67 Node *
make(
const typename Node::key_type & key)
70 allocated.push_back(p);
76 for (
auto & q : allocated)
86 for (
Node * p : allocated)
95 std::vector<typename Node::key_type> keys;
96 if (
root ==
nullptr ||
root == Node::NullPtr)
100 keys.insert(keys.end(), left.begin(), left.end());
103 keys.insert(keys.end(), right.begin(), right.end());
110 template <
class Tree>
149 tree.insert(pool.make(10));
153 tree.insert(pool.make(5));
154 tree.insert(pool.make(15));
160 insert_values({50, 25, 75, 10, 30, 60, 90});
173 insert_values({50, 25, 75});
187 insert_values({50, 25, 75});
200 tree.insert(pool.make(50));
206 insert_values({50, 25, 75, 10, 30, 60, 90, 5, 15, 27, 35});
213 for (
int i = 1; i <= 20; ++i)
214 tree.insert(pool.make(i));
222 for (
int i = 20; i >= 1; --i)
223 tree.insert(pool.make(i));
231 insert_values({50, 25, 75, 10, 30, 60, 90});
243 std::vector<int> values = {50, 25, 75, 10, 30, 60, 90, 5, 15, 27, 35};
245 tree.insert(pool.make(v));
248 for (
int v : {25, 60, 5, 30, 75})
266 insert_values({50, 25, 75, 10, 30, 60, 90});
270 EXPECT_TRUE(std::is_sorted(keys.begin(), keys.end()));
276 insert_values({50, 25, 75, 10, 30, 60, 90});
290 std::mt19937
rng(42);
291 std::uniform_int_distribution<int> dist(1, 10000);
294 for (
int i = 0; i < 1000; ++i)
296 int value = dist(
rng);
298 tree.insert(pool.make(value));
307 std::mt19937
rng(123);
308 std::uniform_int_distribution<int> dist(1, 1000);
309 std::vector<int> values;
312 for (
int i = 0; i < 500; ++i)
314 int value = dist(
rng);
315 values.push_back(value);
316 tree.insert(pool.make(value));
322 std::shuffle(values.begin(), values.end(),
rng);
323 for (
size_t i = 0; i < values.size() / 2; ++i)
343 for (
int i = 1; i <= 1000; ++i)
344 tree.insert(pool.make(i));
348 size_t n = tree.size();
WeightedDigraph::Node Node
T & insert(const T &item)
Insert a new item by copy.
T remove()
Remove the first item of the list.
bool verify() const
Return true if this is a consistent randomized tree.
Node * insert(Node *p) noexcept
Insert a node into the tree.
size_t size() const noexcept
Count the number of elements of the list.
void insert_values(std::initializer_list< int > values)
__gmp_expr< T, __gmp_binary_expr< __gmp_expr< T, U >, unsigned long int, __gmp_root_function > > root(const __gmp_expr< T, U > &expr, unsigned long int l)
constexpr Node *& RLINK(Node *p) noexcept
Return the right tree of p.
constexpr Node *& LLINK(Node *p) noexcept
Return a pointer to left subtree.
Main namespace for Aleph-w library functions.
DynList< T > maps(const C &c, Op op)
Classic map operation.
std::vector< int > inorder_keys(NodeT *root)
TEST_F(RbTreeTest, EmptyTreeHasZeroSize)
Red-Black tree implementation (bottom-up balancing).