3 #include "hdr_intrusive_treiber_stack.h"
4 #include <cds/gc/ptb.h>
5 #include <cds/intrusive/treiber_stack.h>
9 #define TEST(X) void TestIntrusiveStack::X() { test<defs::X>(); }
10 #define TEST_DYN(X) void TestIntrusiveStack::X() { test_elimination<defs::X>(); }
14 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
15 TestIntrusiveStack::base_hook_item<cds::gc::PTB>
16 ,cds::opt::enable_elimination<true>
18 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
20 > Elimination_PTB_base;
22 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
23 TestIntrusiveStack::base_hook_item<cds::gc::PTB>
25 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
27 ,cds::opt::enable_elimination<true>
28 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
29 > Elimination_PTB_base_dyn;
31 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
32 TestIntrusiveStack::base_hook_item<cds::gc::PTB>
34 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
36 ,cds::opt::enable_elimination<true>
37 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
38 > Elimination_PTB_base_relaxed;
40 // PTB GC + base hook + disposer
41 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
42 TestIntrusiveStack::base_hook_item<cds::gc::PTB>
44 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
46 ,cds::opt::enable_elimination<true>
47 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
48 > Elimination_PTB_base_disposer;
50 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
51 TestIntrusiveStack::base_hook_item<cds::gc::PTB>
53 ci::single_link::base_hook< ci::opt::gc<cds::gc::PTB> >
55 ,cds::opt::enable_elimination<true>
56 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
57 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
58 > Elimination_PTB_base_disposer_relaxed;
60 // PTB GC + member hook
61 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
62 TestIntrusiveStack::member_hook_item<cds::gc::PTB>
64 ci::single_link::member_hook<
65 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
66 ci::opt::gc<cds::gc::PTB>
69 ,cds::opt::enable_elimination<true>
70 > Elimination_PTB_member;
72 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
73 TestIntrusiveStack::member_hook_item<cds::gc::PTB>
75 ci::single_link::member_hook<
76 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
77 ci::opt::gc<cds::gc::PTB>
80 ,cds::opt::enable_elimination<true>
81 ,ci::opt::buffer< ci::opt::v::dynamic_buffer<void *> >
82 > Elimination_PTB_member_dyn;
84 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
85 TestIntrusiveStack::member_hook_item<cds::gc::PTB>
87 ci::single_link::member_hook<
88 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
89 ci::opt::gc<cds::gc::PTB>
92 ,cds::opt::enable_elimination<true>
93 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
94 > Elimination_PTB_member_relaxed;
96 // PTB GC + member hook + disposer
97 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
98 TestIntrusiveStack::member_hook_item<cds::gc::PTB>
100 ci::single_link::member_hook<
101 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
102 ci::opt::gc<cds::gc::PTB>
105 ,cds::opt::enable_elimination<true>
106 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
107 > Elimination_PTB_member_disposer;
109 typedef cds::intrusive::TreiberStack< cds::gc::PTB,
110 TestIntrusiveStack::member_hook_item<cds::gc::PTB>
112 ci::single_link::member_hook<
113 offsetof(TestIntrusiveStack::member_hook_item<cds::gc::PTB>, hMember),
114 ci::opt::gc<cds::gc::PTB>
117 ,cds::opt::enable_elimination<true>
118 ,ci::opt::disposer< TestIntrusiveStack::faked_disposer >
119 ,ci::opt::memory_model< ci::opt::v::relaxed_ordering >
120 > Elimination_PTB_member_disposer_relaxed;
123 TEST(Elimination_PTB_base)
124 TEST_DYN(Elimination_PTB_base_dyn)
125 TEST(Elimination_PTB_base_disposer)
126 TEST(Elimination_PTB_member)
127 TEST_DYN(Elimination_PTB_member_dyn)
128 TEST(Elimination_PTB_member_disposer)
130 TEST(Elimination_PTB_base_relaxed)
131 TEST(Elimination_PTB_base_disposer_relaxed)
132 TEST(Elimination_PTB_member_relaxed)
133 TEST(Elimination_PTB_member_disposer_relaxed)