]>
Commit | Line | Data |
---|---|---|
ca77577f | 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 | ||
c7f29d3e | 19 | BOOST_AUTO_TEST_SUITE(test_sholder_hh) |
ca77577f | 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 |