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