Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r50505 - in sandbox/SOC/2006/tree/trunk: . boost/tree libs/tree/test
From: ockham_at_[hidden]
Date: 2009-01-07 15:57:06


Author: bernhard.reiter
Date: 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
New Revision: 50505
URL: http://svn.boost.org/trac/boost/changeset/50505

Log:
Add checks for leaf nodes.
Text files modified:
   sandbox/SOC/2006/tree/trunk/TODO | 6 ++-
   sandbox/SOC/2006/tree/trunk/boost/tree/cursor.hpp | 44 ++++++++++++++--------------
   sandbox/SOC/2006/tree/trunk/boost/tree/insert_cursor.hpp | 9 ++---
   sandbox/SOC/2006/tree/trunk/boost/tree/tree_concepts.hpp | 6 +--
   sandbox/SOC/2006/tree/trunk/libs/tree/test/fake_binary_tree.hpp | 61 ++++++++++++++++++++++++++++++++++-----
   sandbox/SOC/2006/tree/trunk/libs/tree/test/insert_cursor_test.cpp | 33 +++++++++------------
   sandbox/SOC/2006/tree/trunk/libs/tree/test/test_tree_traversal_data.hpp | 22 +++++++++++---
   7 files changed, 115 insertions(+), 66 deletions(-)

Modified: sandbox/SOC/2006/tree/trunk/TODO
==============================================================================
--- sandbox/SOC/2006/tree/trunk/TODO (original)
+++ sandbox/SOC/2006/tree/trunk/TODO 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -15,7 +15,6 @@
 
 General:
 * preorder_insert_cursor: hopefully easy to implement...
-* Fix insert cursor (test) to work with fake_binary_tree
 * Fix binary tree/node: empty() -> root.begin() == root.end() !
 * Check forest/binary_tree correspondence in a hard wired fashion.
 * Add checks for correspondence of concepts and archetypes!
@@ -131,8 +130,11 @@
   the STL's linear algorithms should there be a hierarchical version?
 
 Pre-release:
+* Look into
+ * boost/graph/tree_traits.hpp
+ * Matt Austern's segmented iterators paper (maybe relevant for level order algos).
 * Make directory structure reflect namespaces and vice versa.
-* Cleanup headers/ #include dependencies.
+* Cleanup headers/ #include dependencies, whitespace, indentation.
 * Run Boost Inspect.
 
 Future:

Modified: sandbox/SOC/2006/tree/trunk/boost/tree/cursor.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/boost/tree/cursor.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/boost/tree/cursor.hpp 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -89,28 +89,28 @@
 };
 
 // Deprecate?
-struct cursor_tag {};
-
-struct descending_tag {};
-struct descending_cursor_tag
- : public cursor_tag, public descending_tag,
- public input_iterator_tag, public output_iterator_tag {};
-struct descending_forward_cursor_tag
- : public cursor_tag, public descending_tag, public forward_iterator_tag {};
-struct descending_bidirectional_cursor_tag
- : public cursor_tag, public descending_tag, public bidirectional_iterator_tag {};
-struct descending_random_access_cursor_tag
- : public cursor_tag, public descending_tag, public random_access_iterator_tag {};
-
-struct ascending_tag {};
-struct ascending_cursor_tag
- : public descending_cursor_tag, public ascending_tag {};
-struct ascending_forward_cursor_tag
- : public descending_forward_cursor_tag, public ascending_tag {};
-struct ascending_bidirectional_cursor_tag
- : public descending_bidirectional_cursor_tag, public ascending_tag {};
-struct ascending_random_access_cursor_tag
- : public descending_random_access_cursor_tag, public ascending_tag {};
+//struct cursor_tag {};
+//
+//struct descending_tag {};
+//struct descending_cursor_tag
+// : public cursor_tag, public descending_tag,
+// public input_iterator_tag, public output_iterator_tag {};
+//struct descending_forward_cursor_tag
+// : public cursor_tag, public descending_tag, public forward_iterator_tag {};
+//struct descending_bidirectional_cursor_tag
+// : public cursor_tag, public descending_tag, public bidirectional_iterator_tag {};
+//struct descending_random_access_cursor_tag
+// : public cursor_tag, public descending_tag, public random_access_iterator_tag {};
+//
+//struct ascending_tag {};
+//struct ascending_cursor_tag
+// : public descending_cursor_tag, public ascending_tag {};
+//struct ascending_forward_cursor_tag
+// : public descending_forward_cursor_tag, public ascending_tag {};
+//struct ascending_bidirectional_cursor_tag
+// : public descending_bidirectional_cursor_tag, public ascending_tag {};
+//struct ascending_random_access_cursor_tag
+// : public descending_random_access_cursor_tag, public ascending_tag {};
 
 /*
 template <class Hor, class Vert>

Modified: sandbox/SOC/2006/tree/trunk/boost/tree/insert_cursor.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/boost/tree/insert_cursor.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/boost/tree/insert_cursor.hpp 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -41,7 +41,6 @@
  * in saving keystrokes.
  */
 // TODO: Complete this.
-// Shouldn't we be using cursor_facade?
 template <class Tr>
 class insert_cursor
 : public cursor_adaptor<insert_cursor<Tr>
@@ -81,9 +80,9 @@
 
     typename insert_cursor::cursor_adaptor_::reference dereference() const
     {
- if (index(this->base_reference())) {
- const_cast<typename Tr::cursor&>(this->base_reference())
- = tree.insert(this->base_reference(), typename Tr::value_type());
+ if (this->base_reference().index()) { // FIXME: use freestanding index!
+ //const_cast<typename Tr::cursor&>(this->base_reference()) =
+ tree.insert(this->base_reference(), typename Tr::value_type());
             const_cast<typename Tr::cursor&>(this->base_reference()).to_begin();
         }
         return *this->base_reference();
@@ -92,7 +91,7 @@
     void left()
     {
         if (this->base_reference().empty())
- this->base_reference() =
+// this->base_reference() =
                 tree.insert(this->base_reference(), typename Tr::value_type());
         this->base_reference().to_begin();
     }

Modified: sandbox/SOC/2006/tree/trunk/boost/tree/tree_concepts.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/boost/tree/tree_concepts.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/boost/tree/tree_concepts.hpp 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -25,14 +25,12 @@
 
     BOOST_CONCEPT_USAGE(Tree)
     {
- c = t.root();
- cc = t.root();
+ cursor c = t.root();
+ const_cursor cc = t.root(); // FIXME
     }
     
 private:
     X t;
- cursor c;
- const_cursor cc;
     
 };
 

Modified: sandbox/SOC/2006/tree/trunk/libs/tree/test/fake_binary_tree.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/libs/tree/test/fake_binary_tree.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/libs/tree/test/fake_binary_tree.hpp 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -26,8 +26,18 @@
 /// See http://en.wikipedia.org/wiki/Binary_Tree#Methods_for_storing_binary_trees
 template <class T>
 struct fake_binary_tree {
+ typedef std::vector<T> children_type;
+ typedef typename children_type::size_type size_type;
+ typedef typename children_type::value_type value_type;
+ typedef typename children_type::difference_type difference_type;
+ typedef typename children_type::pointer pointer;
+ typedef typename children_type::reference reference;
+
     typedef fake_descending_binary_cursor<T> descending_cursor;
- typedef fake_descending_binary_cursor<T const> const_descending_cursor;
+ typedef fake_descending_binary_cursor<T/* const*/> const_descending_cursor; //FIXME
+
+ typedef descending_cursor cursor;
+ typedef const_descending_cursor const_cursor;
 
     typedef fake_ascending_binary_cursor<T> ascending_cursor;
     typedef fake_ascending_binary_cursor<T const> const_ascending_cursor;
@@ -35,7 +45,7 @@
     typedef fake_root_tracking_binary_cursor<T> root_tracking_cursor;
     typedef fake_root_tracking_binary_cursor<T const> const_root_tracking_cursor;
         
- fake_binary_tree(typename std::vector<T>::size_type s) : m_data(s)
+ fake_binary_tree(typename std::vector<T>::size_type s = 0) : m_data(s)
     { }
     
     descending_cursor descending_root()
@@ -43,6 +53,16 @@
         return descending_cursor(*this, 0);
     }
 
+ descending_cursor root()
+ {
+ return descending_cursor(*this, 0);
+ }
+
+ const_descending_cursor root() const
+ {
+ return const_descending_cursor(*this, 0);
+ }
+
     ascending_cursor ascending_root()
     {
         return ascending_cursor(*this, 0);
@@ -53,12 +73,23 @@
         return root_tracking_cursor(*this, 0);
     }
 
- typedef std::vector<T> children_type;
- typedef typename children_type::size_type size_type;
- typedef typename children_type::value_type value_type;
- typedef typename children_type::difference_type difference_type;
- typedef typename children_type::pointer pointer;
- typedef typename children_type::reference reference;
+ descending_cursor insert(descending_cursor c, value_type const& v)
+ {
+ m_data[c.m_pos] = v;
+ return c;
+ }
+
+// ascending_cursor insert(ascending_cursor c, value_type const& v)
+// {
+// m_data[c.m_pos] = v;
+// return c;
+// }
+//
+// root_tracking_cursor insert(root_tracking_cursor c, value_type const& v)
+// {
+// m_data[c.m_pos] = v;
+// return c;
+// }
     
     children_type m_data;
 };
@@ -86,16 +117,21 @@
 {
 public:
     typedef fake_descending_binary_cursor<T>cursor;
- typedef fake_descending_binary_cursor<T const> const_cursor;
+ typedef fake_descending_binary_cursor<T/* const*/> const_cursor;
 
     typedef typename fake_descending_binary_cursor<T>::cursor_facade_::size_type size_type;
 
     explicit fake_descending_binary_cursor(fake_binary_tree<T>& t, size_type p = 0)
     : m_tree(t), m_pos(p) {}
+
+// explicit fake_descending_binary_cursor(fake_binary_tree<T> const& t, size_type p = 0)
+// : m_tree(t), m_pos(p) {}
     
     fake_descending_binary_cursor(fake_descending_binary_cursor<T> const& other)
     : m_tree(other.m_tree), m_pos(other.m_pos) {}
 
+// fake_descending_binary_cursor<T> operator=(fake_descending_binary_cursor<T> const&)
+
     fake_binary_tree<T>& m_tree;
     typename fake_binary_tree<T>::size_type m_pos;
 
@@ -153,6 +189,13 @@
 };
 
 template <class T>
+typename fake_descending_binary_cursor<T>::size_type
+index(fake_descending_binary_cursor<T> const& cur)
+{
+ return cur.index();
+}
+
+template <class T>
 struct fake_ascending_binary_cursor
 : public boost::tree::cursor_adaptor<fake_ascending_binary_cursor<T>
                                    , fake_descending_binary_cursor<T>

Modified: sandbox/SOC/2006/tree/trunk/libs/tree/test/insert_cursor_test.cpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/libs/tree/test/insert_cursor_test.cpp (original)
+++ sandbox/SOC/2006/tree/trunk/libs/tree/test/insert_cursor_test.cpp 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -23,9 +23,6 @@
 
 using namespace boost::tree;
 
-BOOST_FIXTURE_TEST_SUITE(insert_cursor_test, test_binary_tree_fixture<int>)
-
-
 template <class Cursor>
 void fill_subtree_with_data(Cursor cur)
 {
@@ -125,47 +122,45 @@
     *c8 = 8;
 }
 
+BOOST_FIXTURE_TEST_SUITE(insert_cursor_test, fake_binary_tree_fixture<int>)
+
 BOOST_AUTO_TEST_CASE ( test_desc_copy_using_insert_cursor_preorder )
 {
- bt2.clear();
- fill_subtree_with_data_in_preorder(tree_inserter(bt2, bt2.root()));
+ fill_subtree_with_data_in_preorder(tree_inserter(fbt2, fbt2.descending_root()));
 
- validate_test_dataset1_tree(bt2.root());
+ validate_test_dataset1_tree(fbt2.descending_root());
 }
 
 BOOST_AUTO_TEST_CASE ( test_desc_copy_using_insert_cursor_inorder )
 {
- bt2.clear();
- fill_subtree_with_data_in_inorder(tree_inserter(bt2, bt2.root()));
+ fill_subtree_with_data_in_inorder(tree_inserter(fbt2, fbt2.descending_root()));
 
- validate_test_dataset1_tree(bt2.root());
+ validate_test_dataset1_tree(fbt2.descending_root());
 }
 
 BOOST_AUTO_TEST_CASE ( test_desc_copy_using_insert_cursor_postorder )
 {
- bt2.clear();
- fill_subtree_with_data_in_postorder(tree_inserter(bt2, bt2.root()));
+ fill_subtree_with_data_in_postorder(tree_inserter(fbt2, fbt2.descending_root()));
 
- validate_test_dataset1_tree(bt2.root());
+ validate_test_dataset1_tree(fbt2.descending_root());
 }
 
 BOOST_AUTO_TEST_CASE ( test_desc_copy_using_insert_cursor )
 {
- bt2.clear();
- fill_subtree_with_data(tree_inserter(bt2, bt2.root()));
+ fill_subtree_with_data(tree_inserter(fbt2, fbt2.descending_root()));
 
- validate_test_dataset1_tree(bt2.root());
+ validate_test_dataset1_tree(fbt2.descending_root());
 }
 
 //BOOST_AUTO_TEST_CASE_TEMPLATE ( test_asc_copy_using_insert_cursor, Order, orders )
 //{
-// bt2.clear();
+// fbt2.clear();
 //
-// boost::tree::copy(Order(), bt.root(), tree_inserter(bt2, bt2.root())
+// boost::tree::copy(Order(), bt.root(), tree_inserter(fbt2, fbt2.root())
 // , boost::tree::ascending_vertical_traversal_tag());
 //
-// validate_test_dataset1_tree(bt2.root());
-// BOOST_CHECK_EQUAL(size(bt2.root()), size(bt.root()));
+// validate_test_dataset1_tree(fbt2.root());
+// BOOST_CHECK_EQUAL(size(fbt2.root()), size(bt.root()));
 //}
 
 BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file

Modified: sandbox/SOC/2006/tree/trunk/libs/tree/test/test_tree_traversal_data.hpp
==============================================================================
--- sandbox/SOC/2006/tree/trunk/libs/tree/test/test_tree_traversal_data.hpp (original)
+++ sandbox/SOC/2006/tree/trunk/libs/tree/test/test_tree_traversal_data.hpp 2009-01-07 15:57:05 EST (Wed, 07 Jan 2009)
@@ -63,15 +63,27 @@
     {
         BOOST_CHECK_EQUAL(*cur.begin(), 8);
         BOOST_CHECK_EQUAL(*cur.begin().begin(), 3);
- BOOST_CHECK_EQUAL(*cur.begin().begin().begin(), 1); //Leaf
+ BOOST_CHECK_EQUAL(*cur.begin().begin().begin(), 1);
+ BOOST_CHECK(cur.begin().begin().end().empty());
+ BOOST_CHECK(cur.begin().begin().begin().empty()); //Leaf
+
         BOOST_CHECK_EQUAL(*cur.begin().end().begin(), 6);
- BOOST_CHECK_EQUAL(*cur.begin().end().begin().begin(), 4); //Leaf
- BOOST_CHECK_EQUAL(*cur.begin().end().end().begin(), 7); //Leaf
+ BOOST_CHECK_EQUAL(*cur.begin().end().begin().begin(), 4);
+ BOOST_CHECK(cur.begin().end().begin().begin().empty()); //Leaf
+
+ BOOST_CHECK_EQUAL(*cur.begin().end().end().begin(), 7);
+ BOOST_CHECK(cur.begin().end().end().begin().empty()); //Leaf
+
         BOOST_CHECK_EQUAL(*cur.end().begin(), 10);
+ BOOST_CHECK(cur.end().begin().empty());
         BOOST_CHECK_EQUAL(*cur.end().end().begin(), 14);
+ BOOST_CHECK(cur.end().end().end().empty());
         BOOST_CHECK_EQUAL(*cur.end().end().begin().begin(), 13);
- BOOST_CHECK_EQUAL(*cur.end().end().begin().begin().begin(), 11);
- BOOST_CHECK_EQUAL(*cur.end().end().begin().begin().end().begin(), 12); //Leaf
+ BOOST_CHECK(cur.end().end().begin().end().empty());
+ BOOST_CHECK_EQUAL(*cur.end().end().begin().begin().begin(), 11);
+ BOOST_CHECK(cur.end().end().begin().begin().begin().empty());
+ BOOST_CHECK_EQUAL(*cur.end().end().begin().begin().end().begin(), 12);
+ BOOST_CHECK(cur.end().end().begin().begin().end().begin().empty()); //Leaf
     }
 
     static void validate_test_dataset1_minus_1_tree(typename boost::tree::binary_tree<T>::const_cursor cur)


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk