Commit e323b235 authored by Mukund Sivaraman's avatar Mukund Sivaraman
Browse files

[2811] Add test with names inserted in sorted order

parent 063f70ad
......@@ -29,6 +29,8 @@
#include <dns/tests/unittest_util.h>
#include <boost/format.hpp>
using namespace std;
using namespace isc;
using namespace isc::dns;
......@@ -148,12 +150,14 @@ TEST_F(DomainTreeTest, getDistance) {
}
}
TEST_F(DomainTreeTest, checkDistance) {
TEST_F(DomainTreeTest, checkDistanceRandom) {
// This test checks an important performance-related property of the
// DomainTree (a red-black tree), which is important for us: the
// longest path from a sub-tree's root to a node is no more than
// 2log(n). This tests that the tree is balanced.
// Names are inserted in random order.
TreeHolder mytree_holder(mem_sgmt_, TestDomainTree::create(mem_sgmt_));
TestDomainTree& mytree = *mytree_holder.get();
isc::util::random::UniformRandomIntegerGenerator gen('a', 'z');
......@@ -200,6 +204,46 @@ TEST_F(DomainTreeTest, checkDistance) {
}
}
TEST_F(DomainTreeTest, checkDistanceSorted) {
// This test checks an important performance-related property of the
// DomainTree (a red-black tree), which is important for us: the
// longest path from a sub-tree's root to a node is no more than
// 2log(n). This tests that the tree is balanced.
// Names are inserted in sorted order.
TreeHolder mytree_holder(mem_sgmt_, TestDomainTree::create(mem_sgmt_));
TestDomainTree& mytree = *mytree_holder.get();
const size_t log_num_nodes = 20;
// Make a large million+ node top-level domain tree, i.e., the
// following code inserts names such as:
//
// name000000.
// name000001.
// name000002.
// name000003.
//
for (int i = 0; i < (1 << log_num_nodes); i++) {
const string namestr(boost::str(boost::format("name%06x.") % i));
mytree.insert(mem_sgmt_, Name(namestr), &dtnode);
EXPECT_EQ(static_cast<int*>(NULL), dtnode->setData(new int(i + 1)));
}
TestDomainTreeNodeChain node_path;
const TestDomainTreeNode* node = NULL;
// Try to find a node left of the left-most node, and start from its
// next node (which is the left-most node in its subtree).
EXPECT_EQ(TestDomainTree::NOTFOUND,
mytree.find<void*>(Name("0"), &node, node_path, NULL, NULL));
while ((node = mytree.nextNode(node_path)) != NULL) {
// The distance from each node to its sub-tree root must be less
// than 2 * log(n).
EXPECT_GE(2 * log_num_nodes, node->getDistance());
}
}
TEST_F(DomainTreeTest, setGetData) {
// set new data to an existing node. It should have some data.
int* newdata = new int(11);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment