Add back-off strategy to EllenBinTree
[libcds.git] / tests / test-hdr / tree / hdr_ellenbintree_map_rcu_gpi.cpp
1 //$$CDS-header$$
2
3 #include "tree/hdr_ellenbintree_map.h"
4 #include <cds/urcu/general_instant.h>
5 #include <cds/container/ellen_bintree_map_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::map_node<rcu_type, EllenBinTreeMapHdrTest::key_type, EllenBinTreeMapHdrTest::value_type> tree_leaf_node;
17         typedef cc::ellen_bintree::internal_node< EllenBinTreeMapHdrTest::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 EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less()
31     {
32         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
33             cc::ellen_bintree::make_map_traits<
34                 co::less< less >
35             >::type
36         > set_type;
37
38         test_rcu<set_type, print_stat>();
39     }
40
41     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp()
42     {
43         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
44             cc::ellen_bintree::make_map_traits<
45                 co::compare< compare >
46             >::type
47         > set_type;
48
49         test_rcu<set_type, print_stat>();
50     }
51
52     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmpless()
53     {
54         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
55             cc::ellen_bintree::make_map_traits<
56                 co::compare< compare >
57                 ,co::less< less >
58             >::type
59         > set_type;
60
61         test_rcu<set_type, print_stat>();
62     }
63
64     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_ic()
65     {
66         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
67             cc::ellen_bintree::make_map_traits<
68                 co::less< less >
69                 ,co::item_counter< cds::atomicity::item_counter >
70             >::type
71         > set_type;
72
73         test_rcu<set_type, print_stat>();
74     }
75
76     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic()
77     {
78         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
79             cc::ellen_bintree::make_map_traits<
80                 co::item_counter< cds::atomicity::item_counter >
81                 ,co::compare< compare >
82             >::type
83         > set_type;
84
85         test_rcu<set_type, print_stat>();
86     }
87
88     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_stat()
89     {
90         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
91             cc::ellen_bintree::make_map_traits<
92                 co::less< less >
93                 ,co::stat< cc::ellen_bintree::stat<> >
94             >::type
95         > set_type;
96
97         test_rcu<set_type, print_stat>();
98     }
99
100     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat()
101     {
102         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
103             cc::ellen_bintree::make_map_traits<
104                 co::item_counter< cds::atomicity::item_counter >
105                 ,co::stat< cc::ellen_bintree::stat<> >
106                 ,co::compare< compare >
107             >::type
108         > set_type;
109
110         test_rcu<set_type, print_stat>();
111     }
112
113     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_cmp_ic_stat_yield()
114     {
115         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
116             cc::ellen_bintree::make_map_traits<
117                 co::item_counter< cds::atomicity::item_counter >
118                 ,co::stat< cc::ellen_bintree::stat<> >
119                 ,co::compare< compare >
120                 , co::back_off< cds::backoff::yield >
121             >::type
122         > set_type;
123
124         test_rcu<set_type, print_stat>();
125     }
126
127     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_pool()
128     {
129         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
130             cc::ellen_bintree::make_map_traits<
131                 co::less< less >
132                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
133                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
134             >::type
135         > set_type;
136
137         test_rcu<set_type, print_stat>();
138     }
139
140     void EllenBinTreeMapHdrTest::EllenBinTree_rcu_gpi_less_pool_ic_stat()
141     {
142         typedef cc::EllenBinTreeMap< rcu_type, key_type, value_type,
143             cc::ellen_bintree::make_map_traits<
144                 co::less< less >
145                 ,co::node_allocator< cds::memory::pool_allocator< tree_internal_node, ellen_bintree_rcu::internal_node_pool_accessor > >
146                 ,cc::ellen_bintree::update_desc_allocator< cds::memory::pool_allocator< tree_update_desc, ellen_bintree_rcu::update_desc_pool_accessor > >
147                 ,co::item_counter< cds::atomicity::item_counter >
148                 ,co::stat< cc::ellen_bintree::stat<> >
149             >::type
150         > set_type;
151
152         test_rcu<set_type, print_stat>();
153     }
154
155 } // namespace tree