[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