Move libcds 1.6.0 from SVN
[libcds.git] / tests / test-hdr / tree / hdr_ellenbintree_set_rcu_gpi.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_ellenbintree_set.h"
4 #include <cds/urcu/general_instant.h>
5 #include <cds/container/ellen_bintree_set_rcu.h>
6
7 #include "tree/hdr_intrusive_ellen_bintree_pool_rcu.h"
8 #include "unit/print_ellenbintree_stat.h"
9
10 namespace tree {
11     namespace cc = cds::container;
12     namespace co = cds::opt;
13     namespace {
14         typedef cds::urcu::gc< cds::urcu::general_instant<> > rcu_type;
15
16         typedef cc::ellen_bintree::node<rcu_type, EllenBinTreeSetHdrTest::value_type>                   tree_leaf_node;
17         typedef cc::ellen_bintree::internal_node< EllenBinTreeSetHdrTest::key_type, tree_leaf_node >    tree_internal_node;
18         typedef cc::ellen_bintree::update_desc<tree_leaf_node, tree_internal_node>                      tree_update_desc;
19
20         struct print_stat {
21             template <typename Tree>
22             void operator()( Tree const& t)
23             {
24                 std::cout << t.statistics();
25             }
26         };
27
28     }
29
30     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less()
31     {
32         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
33             cc::ellen_bintree::make_set_traits<
34                 cc::ellen_bintree::key_extractor< key_extractor >
35                 ,co::less< less >
36             >::type
37         > set_type;
38
39         test_rcu<set_type, print_stat>();
40     }
41
42     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp()
43     {
44         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
45             cc::ellen_bintree::make_set_traits<
46                 cc::ellen_bintree::key_extractor< key_extractor >
47                 ,co::compare< compare >
48             >::type
49         > set_type;
50
51         test_rcu<set_type, print_stat>();
52     }
53
54     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmpless()
55     {
56         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
57             cc::ellen_bintree::make_set_traits<
58                 cc::ellen_bintree::key_extractor< key_extractor >
59                 ,co::compare< compare >
60                 ,co::less< less >
61             >::type
62         > set_type;
63
64         test_rcu<set_type, print_stat>();
65     }
66
67     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_ic()
68     {
69         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
70             cc::ellen_bintree::make_set_traits<
71                 cc::ellen_bintree::key_extractor< key_extractor >
72                 ,co::less< less >
73                 ,co::item_counter< cds::atomicity::item_counter >
74             >::type
75         > set_type;
76
77         test_rcu<set_type, print_stat>();
78     }
79
80     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp_ic()
81     {
82         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
83             cc::ellen_bintree::make_set_traits<
84                 cc::ellen_bintree::key_extractor< key_extractor >
85                 ,co::item_counter< cds::atomicity::item_counter >
86                 ,co::compare< compare >
87             >::type
88         > set_type;
89
90         test_rcu<set_type, print_stat>();
91     }
92
93     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_stat()
94     {
95         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
96             cc::ellen_bintree::make_set_traits<
97                 cc::ellen_bintree::key_extractor< key_extractor >
98                 ,co::less< less >
99                 ,co::stat< cc::ellen_bintree::stat<> >
100             >::type
101         > set_type;
102
103         test_rcu<set_type, print_stat>();
104     }
105
106     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat()
107     {
108         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
109             cc::ellen_bintree::make_set_traits<
110                 cc::ellen_bintree::key_extractor< key_extractor >
111                 ,co::item_counter< cds::atomicity::item_counter >
112                 ,co::stat< cc::ellen_bintree::stat<> >
113                 ,co::compare< compare >
114             >::type
115         > set_type;
116
117         test_rcu<set_type, print_stat>();
118     }
119
120     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_pool()
121     {
122         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
123             cc::ellen_bintree::make_set_traits<
124                 cc::ellen_bintree::key_extractor< key_extractor >
125                 ,co::less< less >
126                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
127                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
128             >::type
129         > set_type;
130
131         test_rcu<set_type, print_stat>();
132     }
133
134     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpi_less_pool_ic_stat()
135     {
136         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
137             cc::ellen_bintree::make_set_traits<
138                 cc::ellen_bintree::key_extractor< key_extractor >
139                 ,co::less< less >
140                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
141                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
142                 ,co::item_counter< cds::atomicity::item_counter >
143                 ,co::stat< cc::ellen_bintree::stat<> >
144             >::type
145         > set_type;
146
147         test_rcu<set_type, print_stat>();
148     }
149
150 } // namespace tree