issue#11: cds: changed __CDS_ guard prefix to CDSLIB_ for all .h files
[libcds.git] / tests / test-hdr / tree / hdr_ellenbintree_set_hp.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_ellenbintree_set.h"
4 #include <cds/container/ellen_bintree_set_hp.h>
5
6 #include "tree/hdr_intrusive_ellen_bintree_pool_hp.h"
7 #include "unit/print_ellenbintree_stat.h"
8
9 namespace tree {
10     namespace cc = cds::container;
11     namespace co = cds::opt;
12     namespace {
13         typedef cds::gc::HP     gc_type;
14
15         typedef cc::ellen_bintree::node<gc_type, EllenBinTreeSetHdrTest::value_type>                    tree_leaf_node;
16         typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
17         typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
18
19         struct print_stat {
20             template <typename Tree>
21             void operator()( Tree const& t)
22             {
23                 std::cout << t.statistics();
24             }
25         };
26     }
27
28     void EllenBinTreeSetHdrTest::EllenBinTree_hp_less()
29     {
30         struct set_traits : public cc::ellen_bintree::traits{
31             typedef EllenBinTreeSetHdrTest::key_extractor key_extractor;
32             typedef EllenBinTreeSetHdrTest::less less;
33         };
34         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type, set_traits > set_type;
35
36         test<set_type, print_stat>();
37     }
38
39     void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp()
40     {
41         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
42             cc::ellen_bintree::make_set_traits<
43                 cc::ellen_bintree::key_extractor< key_extractor >
44                 ,co::compare< compare >
45             >::type
46         > set_type;
47
48         test<set_type, print_stat>();
49     }
50
51     void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmpless()
52     {
53         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
54             cc::ellen_bintree::make_set_traits<
55                 cc::ellen_bintree::key_extractor< key_extractor >
56                 ,co::compare< compare >
57                 ,co::less< less >
58             >::type
59         > set_type;
60
61         test<set_type, print_stat>();
62     }
63
64     void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_ic()
65     {
66         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
67             cc::ellen_bintree::make_set_traits<
68                 cc::ellen_bintree::key_extractor< key_extractor >
69                 ,co::less< less >
70                 ,co::item_counter< cds::atomicity::item_counter >
71             >::type
72         > set_type;
73
74         test<set_type, print_stat>();
75     }
76
77     void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic()
78     {
79         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
80             cc::ellen_bintree::make_set_traits<
81                 cc::ellen_bintree::key_extractor< key_extractor >
82                 ,co::item_counter< cds::atomicity::item_counter >
83                 ,co::compare< compare >
84             >::type
85         > set_type;
86
87         test<set_type, print_stat>();
88     }
89
90     void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_stat()
91     {
92         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
93             cc::ellen_bintree::make_set_traits<
94                 cc::ellen_bintree::key_extractor< key_extractor >
95                 ,co::less< less >
96                 ,co::stat< cc::ellen_bintree::stat<> >
97             >::type
98         > set_type;
99
100         test<set_type, print_stat>();
101     }
102
103     void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic_stat()
104     {
105         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
106             cc::ellen_bintree::make_set_traits<
107                 cc::ellen_bintree::key_extractor< key_extractor >
108                 ,co::item_counter< cds::atomicity::item_counter >
109                 ,co::stat< cc::ellen_bintree::stat<> >
110                 ,co::compare< compare >
111             >::type
112         > set_type;
113
114         test<set_type, print_stat>();
115     }
116
117     void EllenBinTreeSetHdrTest::EllenBinTree_hp_cmp_ic_stat_yield()
118     {
119         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
120             cc::ellen_bintree::make_set_traits<
121                 cc::ellen_bintree::key_extractor< key_extractor >
122                 ,co::item_counter< cds::atomicity::item_counter >
123                 ,co::stat< cc::ellen_bintree::stat<> >
124                 ,co::compare< compare >
125                 , co::back_off< cds::backoff::yield >
126             >::type
127         > set_type;
128
129         test<set_type, print_stat>();
130     }
131
132     void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_pool()
133     {
134         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
135             cc::ellen_bintree::make_set_traits<
136                 cc::ellen_bintree::key_extractor< key_extractor >
137                 ,co::less< less >
138                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
139                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
140             >::type
141         > set_type;
142
143         test<set_type, print_stat>();
144     }
145
146     void EllenBinTreeSetHdrTest::EllenBinTree_hp_less_pool_ic_stat()
147     {
148         typedef cc::EllenBinTreeSet< gc_type, key_type, value_type,
149             cc::ellen_bintree::make_set_traits<
150                 cc::ellen_bintree::key_extractor< key_extractor >
151                 ,co::less< less >
152                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_hp::internal_node_pool_accessor > >
153                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_hp::update_desc_pool_accessor > >
154                 ,co::item_counter< cds::atomicity::item_counter >
155                 ,co::stat< cc::ellen_bintree::stat<> >
156             >::type
157         > set_type;
158
159         test<set_type, print_stat>();
160     }
161
162 } // namespace tree