]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/test-sholder_hh.cc
Meson: Separate test files from common files
[thirdparty/pdns.git] / pdns / test-sholder_hh.cc
1 #ifndef BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_DYN_LINK
3 #endif
4
5 #define BOOST_TEST_NO_MAIN
6
7 #include <boost/test/unit_test.hpp>
8 #include "sholder.hh"
9 #include <thread>
10
11 using std::string;
12
13 struct TestObject
14 {
15 string name;
16 uint64_t number;
17 };
18
19 static GlobalStateHolder<TestObject> g_to;
20 std::atomic<bool> g_failed;
21
22 BOOST_AUTO_TEST_SUITE(test_sholder_hh)
23
24 void treader()
25 {
26 auto local = g_to.getLocal();
27 for(int n=0; n < 10000000; ++n) {
28 auto g = *local;
29 if(g.name != std::to_string(g.number)) {
30 g_failed=1;
31 break;
32 }
33 }
34 }
35
36 BOOST_AUTO_TEST_CASE(test_sholder) {
37 g_to.setState({"1", 1});
38
39 std::thread t1(treader);
40 for(unsigned int n=0; n < 1000000; ++n) {
41 g_to.setState({std::to_string(n), n});
42 g_to.modify([n](TestObject& to) { to.number = 2*n; to.name=std::to_string(to.number);} );
43 }
44 t1.join();
45 BOOST_CHECK_EQUAL(g_failed, 0);
46 }
47
48
49 BOOST_AUTO_TEST_SUITE_END()
50