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