[Aptitude-svn-commit] r3974 - in branches/aptitude-0.3/aptitude: .
tests
Daniel Burrows
dburrows at costa.debian.org
Mon Aug 29 03:59:34 UTC 2005
Author: dburrows
Date: Mon Aug 29 03:59:31 2005
New Revision: 3974
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/tests/test_wtree.cc
Log:
Test all rotation operations.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Mon Aug 29 03:59:31 2005
@@ -2,6 +2,10 @@
* tests/test_wtree.cc:
+ Write simple test cases for *all* the rotation operations.
+
+ * tests/test_wtree.cc:
+
Correct a wrong test assertion.
* src/generic/immset.h:
Modified: branches/aptitude-0.3/aptitude/tests/test_wtree.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/tests/test_wtree.cc (original)
+++ branches/aptitude-0.3/aptitude/tests/test_wtree.cc Mon Aug 29 03:59:31 2005
@@ -25,11 +25,20 @@
using imm::set;
using imm::wtree_node;
+#define CPPUNIT_ASSERT_LEAF(n) \
+ do { \
+ CPPUNIT_ASSERT(!n.getLeft().isValid()); \
+ CPPUNIT_ASSERT(!n.getRight().isValid()); \
+ } while(0)
+
class WTreeTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(WTreeTest);
- CPPUNIT_TEST(testNodeRotate);
+ CPPUNIT_TEST(testRotateLeft);
+ CPPUNIT_TEST(testRotateRight);
+ CPPUNIT_TEST(testDoubleRotateLeft);
+ CPPUNIT_TEST(testDoubleRotateRight);
CPPUNIT_TEST(generalWTreeTest);
CPPUNIT_TEST(mapTest);
@@ -38,7 +47,7 @@
typedef wtree_node<int> int_node;
// Simple test of the rotate facilities.
- void testNodeRotate()
+ void testRotateLeft()
{
int_node a(5,
int_node(3, int_node(2), int_node(4)),
@@ -60,19 +69,25 @@
CPPUNIT_ASSERT(a_right_left.isValid());
CPPUNIT_ASSERT(a_right_right.isValid());
- CPPUNIT_ASSERT(a_left_left.getVal() == 2);
- CPPUNIT_ASSERT(a_left.getVal() == 3);
- CPPUNIT_ASSERT(a_left_right.getVal() == 4);
- CPPUNIT_ASSERT(a.getVal() == 5);
- CPPUNIT_ASSERT(a_right_left.getVal() == 6);
- CPPUNIT_ASSERT(a_right.getVal() == 7);
- CPPUNIT_ASSERT(a_right_right.getVal() == 8);
+ CPPUNIT_ASSERT_LEAF(a_left_left);
+ CPPUNIT_ASSERT_LEAF(a_left_right);
+ CPPUNIT_ASSERT_LEAF(a_right_left);
+ CPPUNIT_ASSERT_LEAF(a_right_right);
+
+
+ CPPUNIT_ASSERT_EQUAL(a_left_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(a_left.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(a_left_right.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(a.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(a_right_left.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(a_right.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(a_right_right.getVal(), 8);
int_node b = a.left_rotate_single();
- CPPUNIT_ASSERT(b.size() == a.size());
+ CPPUNIT_ASSERT_EQUAL(b.size(), a.size());
CPPUNIT_ASSERT(b.isValid());
@@ -81,12 +96,14 @@
CPPUNIT_ASSERT(b_left.isValid());
CPPUNIT_ASSERT(b_right.isValid());
+ CPPUNIT_ASSERT_LEAF(b_right);
int_node b_left_left = b_left.getLeft();
int_node b_left_right = b_left.getRight();
CPPUNIT_ASSERT(b_left_left.isValid());
CPPUNIT_ASSERT(b_left_right.isValid());
+ CPPUNIT_ASSERT_LEAF(b_left_right);
int_node b_left_left_left = b_left_left.getLeft();
int_node b_left_left_right = b_left_left.getRight();
@@ -94,14 +111,231 @@
CPPUNIT_ASSERT(b_left_left_left.isValid());
CPPUNIT_ASSERT(b_left_left_right.isValid());
+ CPPUNIT_ASSERT_LEAF(b_left_left_left);
+ CPPUNIT_ASSERT_LEAF(b_left_left_right);
+
+
+
+ CPPUNIT_ASSERT_EQUAL(b_left_left_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(b_left_left.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(b_left_left_right.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(b_left.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(b_left_right.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(b.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(b_right.getVal(), 8);
+ }
+
+ void testRotateRight()
+ {
+ int_node a(5,
+ int_node(3, int_node(2), int_node(4)),
+ int_node(7, int_node(6), int_node(8)));
+
+ int_node a_left = a.getLeft();
+ int_node a_right = a.getRight();
+
+ CPPUNIT_ASSERT(a_left.isValid());
+ CPPUNIT_ASSERT(a_right.isValid());
+
+ int_node a_left_left = a_left.getLeft();
+ int_node a_left_right = a_left.getRight();
+ int_node a_right_left = a_right.getLeft();
+ int_node a_right_right = a_right.getRight();
+
+ CPPUNIT_ASSERT(a_left_left.isValid());
+ CPPUNIT_ASSERT(a_left_right.isValid());
+ CPPUNIT_ASSERT(a_right_left.isValid());
+ CPPUNIT_ASSERT(a_right_right.isValid());
+
+ CPPUNIT_ASSERT_LEAF(a_left_left);
+ CPPUNIT_ASSERT_LEAF(a_left_right);
+ CPPUNIT_ASSERT_LEAF(a_right_left);
+ CPPUNIT_ASSERT_LEAF(a_right_right);
+
+
+ CPPUNIT_ASSERT_EQUAL(a_left_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(a_left.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(a_left_right.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(a.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(a_right_left.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(a_right.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(a_right_right.getVal(), 8);
+
+
+
+ int_node c = a.right_rotate_single();
+
+ CPPUNIT_ASSERT_EQUAL(c.size(), a.size());
+ CPPUNIT_ASSERT(c.isValid());
+
+ int_node c_left = c.getLeft(), c_right = c.getRight();
+
+ CPPUNIT_ASSERT(c_left.isValid());
+ CPPUNIT_ASSERT(c_right.isValid());
+ CPPUNIT_ASSERT_LEAF(c_left);
+
+ int_node c_right_left = c_right.getLeft(), c_right_right = c_right.getRight();
+
+ CPPUNIT_ASSERT(c_right_left.isValid());
+ CPPUNIT_ASSERT(c_right_right.isValid());
+ CPPUNIT_ASSERT_LEAF(c_right_left);
+
+ int_node c_right_right_left = c_right_right.getLeft();
+ int_node c_right_right_right = c_right_right.getRight();
+
+ CPPUNIT_ASSERT(c_right_right_left.isValid());
+ CPPUNIT_ASSERT(c_right_right_right.isValid());
+ CPPUNIT_ASSERT_LEAF(c_right_right_left);
+ CPPUNIT_ASSERT_LEAF(c_right_right_right);
+
+ CPPUNIT_ASSERT_EQUAL(c_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(c.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(c_right_left.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(c_right.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(c_right_right_left.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(c_right_right.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(c_right_right_right.getVal(), 8);
+ }
+
+ void testDoubleRotateLeft()
+ {
+ int_node a = int_node(3, 2,
+ int_node(7,
+ int_node(5, 4, 6),
+ 8));
+
+ int_node a_left = a.getLeft(), a_right = a.getRight();
+
+ CPPUNIT_ASSERT(a_left.isValid());
+ CPPUNIT_ASSERT(a_right.isValid());
+ CPPUNIT_ASSERT_LEAF(a_left);
+
+ int_node a_right_left = a_right.getLeft(), a_right_right = a_right.getRight();
+
+ CPPUNIT_ASSERT(a_right_left.isValid());
+ CPPUNIT_ASSERT(a_right_right.isValid());
+ CPPUNIT_ASSERT_LEAF(a_right_right);
+
+ int_node a_right_left_left = a_right_left.getLeft();
+ int_node a_right_left_right = a_right_left.getRight();
+
+ CPPUNIT_ASSERT(a_right_left_left.isValid());
+ CPPUNIT_ASSERT(a_right_left_right.isValid());
+ CPPUNIT_ASSERT_LEAF(a_right_left_left);
+ CPPUNIT_ASSERT_LEAF(a_right_left_right);
+
+
+ CPPUNIT_ASSERT_EQUAL(a_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(a.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(a_right_left_left.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(a_right_left.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(a_right_left_right.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(a_right.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(a_right_right.getVal(), 8);
+
+
+ int_node b = a.left_rotate_double();
+
+ CPPUNIT_ASSERT(b.isValid());
+
+ int_node b_left = b.getLeft();
+ int_node b_right = b.getRight();
+
+ CPPUNIT_ASSERT(b_left.isValid());
+ CPPUNIT_ASSERT(b_right.isValid());
+
+ int_node b_left_left = b_left.getLeft(), b_left_right = b_left.getRight();
+
+ CPPUNIT_ASSERT(b_left_left.isValid());
+ CPPUNIT_ASSERT(b_left_right.isValid());
+
+ CPPUNIT_ASSERT_LEAF(b_left_left);
+ CPPUNIT_ASSERT_LEAF(b_left_right);
+
+ int_node b_right_left = b_right.getLeft(), b_right_right = b_right.getRight();
+
+ CPPUNIT_ASSERT(b_right_left.isValid());
+ CPPUNIT_ASSERT(b_right_right.isValid());
+
+ CPPUNIT_ASSERT_LEAF(b_right_left);
+ CPPUNIT_ASSERT_LEAF(b_right_right);
+
+
+ CPPUNIT_ASSERT_EQUAL(b_left_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(b_left.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(b_left_right.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(b.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(b_right_left.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(b_right.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(b_right_right.getVal(), 8);
+ }
+
+ void testDoubleRotateRight()
+ {
+ int_node a = int_node(7,
+ int_node(3, 2, int_node(5, 4, 6)),
+ 8);
+
+ CPPUNIT_ASSERT(a.isValid());
+
+ int_node a_left = a.getLeft(), a_right = a.getRight();
+
+ CPPUNIT_ASSERT(a_left.isValid());
+ CPPUNIT_ASSERT(a_right.isValid());
+ CPPUNIT_ASSERT_LEAF(a_right);
+
+ int_node a_left_left = a_left.getLeft(), a_left_right = a_left.getRight();
+
+ CPPUNIT_ASSERT(a_left_left.isValid());
+ CPPUNIT_ASSERT(a_left_right.isValid());
+ CPPUNIT_ASSERT_LEAF(a_left_left);
+
+ int_node a_left_right_left = a_left_right.getLeft();
+ int_node a_left_right_right = a_left_right.getRight();
+
+ CPPUNIT_ASSERT(a_left_right_left.isValid());
+ CPPUNIT_ASSERT(a_left_right_right.isValid());
+ CPPUNIT_ASSERT_LEAF(a_left_right_left);
+ CPPUNIT_ASSERT_LEAF(a_left_right_right);
+
+ CPPUNIT_ASSERT_EQUAL(a_left_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(a_left.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(a_left_right_left.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(a_left_right.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(a_left_right_right.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(a.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(a_right.getVal(), 8);
+
+
+
+ int_node b = a.right_rotate_double();
+
+ CPPUNIT_ASSERT(b.isValid());
+
+ int_node b_left = b.getLeft(), b_right = b.getRight();
+ CPPUNIT_ASSERT(b_left.isValid());
+ CPPUNIT_ASSERT(b_right.isValid());
+
+ int_node b_left_left = b_left.getLeft(), b_left_right = b_left.getRight();
+ CPPUNIT_ASSERT(b_left_left.isValid());
+ CPPUNIT_ASSERT(b_left_right.isValid());
+ CPPUNIT_ASSERT_LEAF(b_left_left);
+ CPPUNIT_ASSERT_LEAF(b_left_right);
- CPPUNIT_ASSERT(b_left_left_left.getVal() == 2);
- CPPUNIT_ASSERT(b_left_left.getVal() == 3);
- CPPUNIT_ASSERT(b_left_left_right.getVal() == 4);
- CPPUNIT_ASSERT(b_left.getVal() == 5);
- CPPUNIT_ASSERT(b_left_right.getVal() == 6);
- CPPUNIT_ASSERT(b.getVal() == 7);
- CPPUNIT_ASSERT(b_right.getVal() == 8);
+ int_node b_right_left = b_right.getLeft(), b_right_right = b_right.getRight();
+ CPPUNIT_ASSERT(b_right_left.isValid());
+ CPPUNIT_ASSERT(b_right_right.isValid());
+ CPPUNIT_ASSERT_LEAF(b_right_left);
+ CPPUNIT_ASSERT_LEAF(b_right_right);
+
+
+ CPPUNIT_ASSERT_EQUAL(b_left_left.getVal(), 2);
+ CPPUNIT_ASSERT_EQUAL(b_left.getVal(), 3);
+ CPPUNIT_ASSERT_EQUAL(b_left_right.getVal(), 4);
+ CPPUNIT_ASSERT_EQUAL(b.getVal(), 5);
+ CPPUNIT_ASSERT_EQUAL(b_right_left.getVal(), 6);
+ CPPUNIT_ASSERT_EQUAL(b_right.getVal(), 7);
+ CPPUNIT_ASSERT_EQUAL(b_right_right.getVal(), 8);
}
static bool WTreeValuesMatch(const set<int> &t,
More information about the Aptitude-svn-commit
mailing list