summaryrefslogtreecommitdiff
path: root/libs/intrusive/test/recursive_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/intrusive/test/recursive_test.cpp')
-rw-r--r--libs/intrusive/test/recursive_test.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/libs/intrusive/test/recursive_test.cpp b/libs/intrusive/test/recursive_test.cpp
new file mode 100644
index 0000000000..c72316bd63
--- /dev/null
+++ b/libs/intrusive/test/recursive_test.cpp
@@ -0,0 +1,71 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2007-2010
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/intrusive for documentation.
+//
+/////////////////////////////////////////////////////////////////////////////
+#include <boost/intrusive/list.hpp>
+#include <boost/intrusive/slist.hpp>
+#include <boost/intrusive/set.hpp>
+#include <boost/intrusive/unordered_set.hpp>
+#include <boost/intrusive/avl_set.hpp>
+#include <boost/intrusive/sg_set.hpp>
+#include <boost/intrusive/splay_set.hpp>
+#include <boost/intrusive/treap_set.hpp>
+#include <cassert>
+
+using namespace boost::intrusive;
+
+typedef list_base_hook<> ListBaseHook;
+typedef slist_base_hook<> SListBaseHook;
+typedef set_base_hook<> SetBaseHook;
+typedef unordered_set_base_hook<> USetBaseHook;
+
+class Foo;
+typedef unordered_set<Foo, base_hook<USetBaseHook> > USet;
+
+class Foo : public ListBaseHook, public SListBaseHook, public SetBaseHook, public USetBaseHook
+{
+ USet::bucket_type buckets[1];
+ Foo(const Foo &);
+ Foo & operator=(const Foo &);
+
+ public:
+ Foo() : uset_children(USet::bucket_traits(buckets, 1))
+ {}
+ list <Foo, base_hook<ListBaseHook> > list_children;
+ slist<Foo, base_hook<SListBaseHook> > slist_children;
+ set <Foo, base_hook<SetBaseHook> > set_children;
+ USet uset_children;
+};
+
+void instantiate()
+{
+ list< Foo, base_hook<ListBaseHook> > list_; list_.clear();
+ slist< Foo, base_hook<SListBaseHook> > slist_; slist_.clear();
+ set< Foo, base_hook<SetBaseHook> > set_; set_.clear();
+
+ USet::bucket_type buckets[1];
+ USet unordered_set_(USet::bucket_traits(buckets, 1)); unordered_set_.clear();
+}
+int main()
+{
+ instantiate();
+
+ //A small test with list
+ {
+ Foo f, f2;
+ list< Foo, base_hook<ListBaseHook> > l;
+ l.insert(l.begin(), f);
+ l.begin()->list_children.insert(l.begin()->list_children.begin(), f2);
+ assert(l.size() == l.begin()->list_children.size());
+ l.begin()->list_children.clear();
+ l.clear();
+ }
+ return 0;
+}