]>
git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-statbag_cc.cc
1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_NO_MAIN
7 #include <boost/test/unit_test.hpp>
8 #include <boost/assign/list_of.hpp>
10 #include <boost/tuple/tuple.hpp>
19 static void threadMangler(AtomicCounter
* ac
)
21 for(unsigned int n
=0; n
< 1000000; ++n
)
25 static void threadMangler2(StatBag
* S
)
27 for(unsigned int n
=0; n
< 1000000; ++n
)
33 BOOST_AUTO_TEST_SUITE(test_misc_hh
)
35 BOOST_AUTO_TEST_CASE(test_StatBagBasic
) {
37 s
.declare("a", "description");
38 s
.declare("b", "description");
39 s
.declare("c", "description");
41 BOOST_CHECK_EQUAL(s
.read("a"), 1UL);
44 for(n
=0; n
< 1000000; ++n
)
47 BOOST_CHECK_EQUAL(s
.read("b"), n
);
49 AtomicCounter
* ac
= s
.getPointer("a");
50 for(n
=0; n
< 1000000; ++n
)
53 BOOST_CHECK_EQUAL(s
.read("a"), n
+1);
55 AtomicCounter
* acc
= s
.getPointer("c");
56 std::vector
<std::thread
> manglers
;
57 for (int i
=0; i
< 4; ++i
) {
58 manglers
.push_back(std::thread(threadMangler
, acc
));
61 for (auto& t
: manglers
) {
66 BOOST_CHECK_EQUAL(s
.read("c"), 4000000U);
70 for (int i
=0; i
< 4; ++i
) {
71 manglers
.push_back(std::thread(threadMangler2
, &s
));
74 for (auto& t
: manglers
) {
79 BOOST_CHECK_EQUAL(s
.read("c"), 4000000U);
83 BOOST_CHECK_EQUAL(s
.read("c"), (1ULL<<31) );
85 BOOST_CHECK_EQUAL(s
.read("c"), (1ULL<<31) +1 );
88 #if UINTPTR_MAX > 0xffffffffULL
89 BOOST_CHECK_EQUAL(sizeof(AtomicCounterInner
), 8U);
91 BOOST_CHECK_EQUAL(s
.read("c"), (1ULL<<33) );
93 BOOST_CHECK_EQUAL(s
.read("c"), (1ULL<<33) +1 );
96 BOOST_CHECK_EQUAL(s
.read("c"), 0xffffffffffffffffULL
);
98 BOOST_CHECK_EQUAL(s
.read("c"), 0UL );
100 BOOST_CHECK_EQUAL(sizeof(AtomicCounterInner
), 4U);
101 BOOST_CHECK_EQUAL(~0UL, 0xffffffffUL
);
103 BOOST_CHECK_EQUAL(s
.read("c"), 0xffffffffUL
);
105 BOOST_CHECK_EQUAL(s
.read("c"), 0UL );
111 BOOST_AUTO_TEST_SUITE_END()