1 | // Copyright (C) 2011 Tim Blechmann |
---|---|
2 | // |
3 | // Distributed under the Boost Software License, Version 1.0. (See |
4 | // accompanying file LICENSE_1_0.txt or copy at |
5 | // http://www.boost.org/LICENSE_1_0.txt) |
6 | |
7 | #include <boost/lockfree/stack.hpp> |
8 | #include <boost/lockfree/spsc_queue.hpp> |
9 | |
10 | #define BOOST_TEST_MAIN |
11 | #ifdef BOOST_LOCKFREE_INCLUDE_TESTS |
12 | #include <boost/test/included/unit_test.hpp> |
13 | #else |
14 | #include <boost/test/unit_test.hpp> |
15 | #endif |
16 | |
17 | |
18 | int g_instance_counter = 0; |
19 | |
20 | struct tester |
21 | { |
22 | tester() |
23 | { |
24 | ++g_instance_counter; |
25 | } |
26 | |
27 | tester(tester const&) |
28 | { |
29 | ++g_instance_counter; |
30 | } |
31 | |
32 | ~tester() |
33 | { |
34 | --g_instance_counter; |
35 | } |
36 | }; |
37 | |
38 | BOOST_AUTO_TEST_CASE( stack_instance_deleter_test ) |
39 | { |
40 | { |
41 | boost::lockfree::stack<tester> q(128); |
42 | q.push(v: tester()); |
43 | q.push(v: tester()); |
44 | q.push(v: tester()); |
45 | q.push(v: tester()); |
46 | q.push(v: tester()); |
47 | } |
48 | |
49 | assert(g_instance_counter == 0); |
50 | BOOST_REQUIRE(g_instance_counter == 0); |
51 | } |
52 | |
53 | |
54 | BOOST_AUTO_TEST_CASE( spsc_queue_instance_deleter_test ) |
55 | { |
56 | { |
57 | boost::lockfree::spsc_queue<tester> q(128); |
58 | q.push(t: tester()); |
59 | q.push(t: tester()); |
60 | q.push(t: tester()); |
61 | q.push(t: tester()); |
62 | q.push(t: tester()); |
63 | } |
64 | |
65 | assert(g_instance_counter == 0); |
66 | BOOST_REQUIRE(g_instance_counter == 0); |
67 | } |
68 | |
69 | BOOST_AUTO_TEST_CASE( spsc_queue_fixed_sized_instance_deleter_test ) |
70 | { |
71 | { |
72 | boost::lockfree::spsc_queue<tester, boost::lockfree::capacity<128> > q; |
73 | q.push(t: tester()); |
74 | q.push(t: tester()); |
75 | q.push(t: tester()); |
76 | q.push(t: tester()); |
77 | q.push(t: tester()); |
78 | } |
79 | |
80 | assert(g_instance_counter == 0); |
81 | BOOST_REQUIRE(g_instance_counter == 0); |
82 | } |
83 | |
84 | struct no_default_init_tester |
85 | { |
86 | int value; |
87 | |
88 | no_default_init_tester(int value) : value(value) |
89 | { |
90 | ++g_instance_counter; |
91 | } |
92 | |
93 | no_default_init_tester(no_default_init_tester const& t) |
94 | { |
95 | value = t.value; |
96 | |
97 | ++g_instance_counter; |
98 | } |
99 | |
100 | ~no_default_init_tester() |
101 | { |
102 | --g_instance_counter; |
103 | } |
104 | }; |
105 | |
106 | BOOST_AUTO_TEST_CASE( stack_instance_deleter_no_default_init_test ) |
107 | { |
108 | { |
109 | boost::lockfree::stack<no_default_init_tester> q(128); |
110 | q.push(v: no_default_init_tester(1)); |
111 | q.push(v: no_default_init_tester(2)); |
112 | q.push(v: no_default_init_tester(3)); |
113 | q.push(v: no_default_init_tester(4)); |
114 | q.push(v: no_default_init_tester(5)); |
115 | } |
116 | |
117 | assert(g_instance_counter == 0); |
118 | BOOST_REQUIRE(g_instance_counter == 0); |
119 | } |
120 | |
121 | |
122 | BOOST_AUTO_TEST_CASE( spsc_queue_instance_deleter_no_default_init_test ) |
123 | { |
124 | { |
125 | boost::lockfree::spsc_queue<no_default_init_tester> q(128); |
126 | q.push(t: no_default_init_tester(1)); |
127 | q.push(t: no_default_init_tester(2)); |
128 | q.push(t: no_default_init_tester(3)); |
129 | q.push(t: no_default_init_tester(4)); |
130 | q.push(t: no_default_init_tester(5)); |
131 | } |
132 | |
133 | assert(g_instance_counter == 0); |
134 | BOOST_REQUIRE(g_instance_counter == 0); |
135 | } |
136 | |
137 | BOOST_AUTO_TEST_CASE( spsc_queue_fixed_sized_instance_deleter_no_default_init_test ) |
138 | { |
139 | { |
140 | boost::lockfree::spsc_queue<no_default_init_tester, boost::lockfree::capacity<128> > q; |
141 | q.push(t: no_default_init_tester(1)); |
142 | q.push(t: no_default_init_tester(2)); |
143 | q.push(t: no_default_init_tester(3)); |
144 | q.push(t: no_default_init_tester(4)); |
145 | q.push(t: no_default_init_tester(5)); |
146 | } |
147 | |
148 | assert(g_instance_counter == 0); |
149 | BOOST_REQUIRE(g_instance_counter == 0); |
150 | } |
151 |