EllenBinTree refactoring
[libcds.git] / tests / test-hdr / tree / hdr_ellenbintree_set_rcu_gpb.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_ellenbintree_set.h"
4 #include <cds/urcu/general_buffered.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_buffered<> > 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     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less()
30     {
31         struct set_traits : public cc::ellen_bintree::traits{
32             typedef EllenBinTreeSetHdrTest::key_extractor key_extractor;
33             typedef EllenBinTreeSetHdrTest::less less;
34         };
35         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type, set_traits > set_type;
36
37         test_rcu<set_type, print_stat>();
38     }
39
40     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp()
41     {
42         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
43             cc::ellen_bintree::make_set_traits<
44                 cc::ellen_bintree::key_extractor< key_extractor >
45                 ,co::compare< compare >
46             >::type
47         > set_type;
48
49         test_rcu<set_type, print_stat>();
50     }
51
52     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmpless()
53     {
54         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
55             cc::ellen_bintree::make_set_traits<
56                 cc::ellen_bintree::key_extractor< key_extractor >
57                 ,co::compare< compare >
58                 ,co::less< less >
59             >::type
60         > set_type;
61
62         test_rcu<set_type, print_stat>();
63     }
64
65     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_ic()
66     {
67         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
68             cc::ellen_bintree::make_set_traits<
69                 cc::ellen_bintree::key_extractor< key_extractor >
70                 ,co::less< less >
71                 ,co::item_counter< cds::atomicity::item_counter >
72             >::type
73         > set_type;
74
75         test_rcu<set_type, print_stat>();
76     }
77
78     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp_ic()
79     {
80         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
81             cc::ellen_bintree::make_set_traits<
82                 cc::ellen_bintree::key_extractor< key_extractor >
83                 ,co::item_counter< cds::atomicity::item_counter >
84                 ,co::compare< compare >
85             >::type
86         > set_type;
87
88         test_rcu<set_type, print_stat>();
89     }
90
91     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_stat()
92     {
93         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
94             cc::ellen_bintree::make_set_traits<
95                 cc::ellen_bintree::key_extractor< key_extractor >
96                 ,co::less< less >
97                 ,co::stat< cc::ellen_bintree::stat<> >
98             >::type
99         > set_type;
100
101         test_rcu<set_type, print_stat>();
102     }
103
104     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_cmp_ic_stat()
105     {
106         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
107             cc::ellen_bintree::make_set_traits<
108                 cc::ellen_bintree::key_extractor< key_extractor >
109                 ,co::item_counter< cds::atomicity::item_counter >
110                 ,co::stat< cc::ellen_bintree::stat<> >
111                 ,co::compare< compare >
112             >::type
113         > set_type;
114
115         test_rcu<set_type, print_stat>();
116     }
117
118     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_pool()
119     {
120         typedef cc::EllenBinTreeSet< rcu_type, key_type, value_type,
121             cc::ellen_bintree::make_set_traits<
122                 cc::ellen_bintree::key_extractor< key_extractor >
123                 ,co::less< less >
124                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
125                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
126             >::type
127         > set_type;
128
129         test_rcu<set_type, print_stat>();
130     }
131
132     void EllenBinTreeSetHdrTest::EllenBinTree_rcu_gpb_less_pool_ic_stat()
133     {
134         typedef cc::EllenBinTreeSet< rcu_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_rcu::internal_node_pool_accessor > >
139                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
140                 ,co::item_counter< cds::atomicity::item_counter >
141                 ,co::stat< cc::ellen_bintree::stat<> >
142             >::type
143         > set_type;
144
145         test_rcu<set_type, print_stat>();
146     }
147
148 } // namespace tree