fb5323e7215f5ff7d391cb78403821e94f329d16
[libcds.git] / tests / test-hdr / stack / hdr_elimination_stack_dhp.cpp
1 //$$CDS-header$$
2
3 #include "hdr_treiber_stack.h"
4 #include <cds/gc/dhp.h>
5 #include <cds/container/treiber_stack.h>
6
7 namespace stack {
8 #define TEST(X)     void TestStack::X() { test<defs::X>(); }
9 #define TEST_DYN(X)     void TestStack::X() { test_elimination<defs::X>(); }
10     namespace cs = cds::container;
11
12     namespace defs { namespace {
13
14         typedef cs::TreiberStack< cds::gc::DHP, int
15             ,typename cs::treiber_stack::make_traits< 
16                 cds::opt::enable_elimination<true> 
17             >::type
18         > Elimination_DHP;
19
20
21         typedef cs::TreiberStack< cds::gc::DHP, int
22             ,typename cs::treiber_stack::make_traits<
23                 cds::opt::enable_elimination<true>
24                 ,cds::opt::buffer< cds::opt::v::dynamic_buffer<void *> >
25             >::type
26         > Elimination_DHP_dyn;
27
28         typedef cs::TreiberStack< cds::gc::DHP, int
29             , typename cs::treiber_stack::make_traits<
30                 cds::opt::buffer< cds::opt::v::dynamic_buffer<int> >
31                 ,cds::opt::stat< cs::treiber_stack::stat<> >
32                 ,cds::opt::enable_elimination<true>
33             >::type
34         > Elimination_DHP_stat;
35
36         typedef cs::TreiberStack< cds::gc::DHP, int
37             , typename cs::treiber_stack::make_traits<
38                 cds::opt::memory_model<cds::opt::v::relaxed_ordering>
39                 ,cds::opt::enable_elimination<true>
40             >::type
41         > Elimination_DHP_relaxed;
42
43         typedef cs::TreiberStack< cds::gc::DHP, int
44             , typename cs::treiber_stack::make_traits<
45                 cds::opt::back_off< cds::backoff::yield>
46                 ,cds::opt::enable_elimination<true>
47             >::type
48         > Elimination_DHP_yield;
49
50         typedef cs::TreiberStack< cds::gc::DHP, int
51             , typename cs::treiber_stack::make_traits<
52                 cds::opt::back_off< cds::backoff::yield>
53                 ,cds::opt::memory_model<cds::opt::v::relaxed_ordering>
54                 ,cds::opt::enable_elimination<true>
55             >::type
56         > Elimination_DHP_yield_relaxed;
57
58         typedef cs::TreiberStack< cds::gc::DHP, int
59             , typename cs::treiber_stack::make_traits<
60                 cds::opt::back_off< cds::backoff::pause >
61                 ,cds::opt::allocator< std::allocator< bool * > >
62                 ,cds::opt::enable_elimination<true>
63             >::type
64         > Elimination_DHP_pause_alloc;
65
66         typedef cs::TreiberStack< cds::gc::DHP, int
67             , typename cs::treiber_stack::make_traits<
68                 cds::opt::memory_model<cds::opt::v::relaxed_ordering>
69                 ,cds::opt::back_off< cds::backoff::pause>
70                 ,cds::opt::allocator< std::allocator< bool * > >
71                 ,cds::opt::enable_elimination<true>
72             >::type
73         > Elimination_DHP_pause_alloc_relaxed;
74     }}
75
76     TEST(Elimination_DHP)
77     TEST_DYN(Elimination_DHP_dyn)
78     TEST_DYN(Elimination_DHP_stat)
79     TEST(Elimination_DHP_yield)
80     TEST(Elimination_DHP_pause_alloc)
81
82     TEST(Elimination_DHP_relaxed)
83     TEST(Elimination_DHP_yield_relaxed)
84     TEST(Elimination_DHP_pause_alloc_relaxed)
85
86 }