Select Git revision
tree_successor_test.cpp
-
Martin Mareš authoredMartin Mareš authored
tree_successor_test.cpp 1.42 KiB
#include <algorithm>
#include <functional>
#include <cstdint>
#include <string>
#include <utility>
#include <vector>
#include "tree_successor.h"
using namespace std;
// If the condition is not true, report an error and halt.
#define EXPECT(condition, message) do { if (!(condition)) expect_failed(message); } while (0)
void expect_failed(const string& message);
void test(const vector<int>& sequence) {
Tree tree;
for (const auto& element : sequence)
tree.insert(element);
vector<int> sorted_sequence(sequence);
sort(sorted_sequence.begin(), sorted_sequence.end());
Node* node = tree.successor(nullptr);
for (const auto& element : sorted_sequence) {
EXPECT(node, "Expected successor " + to_string(element) + ", got nullptr");
EXPECT(node->key == element,
"Expected successor " + to_string(element) + ", got " + to_string(node->key));
node = tree.successor(node);
}
EXPECT(!node, "Expected no successor, got " + to_string(node->key));
}
vector<pair<string, function<void()>>> tests = {
{"path", []
{ vector<int> numbers;
for (int i = 0; i < 10000; i++) numbers.push_back(i);
test(numbers);
}
},
{"random_tree", []
{ vector<int> numbers = {997};
for (int i = 2; i < 199999; i++)
numbers.push_back((numbers.back() * int64_t(997)) % 199999);
test(numbers);
}
},
};