]>
Commit | Line | Data |
---|---|---|
1566533a | 1 | #define BOOST_TEST_DYN_LINK |
2 | #define BOOST_TEST_NO_MAIN | |
3 | ||
870a0fe4 AT |
4 | #ifdef HAVE_CONFIG_H |
5 | #include "config.h" | |
6 | #endif | |
1566533a | 7 | #include <boost/test/unit_test.hpp> |
8 | #include <boost/assign/list_of.hpp> | |
fa8fd4d2 | 9 | |
1566533a | 10 | #include <boost/tuple/tuple.hpp> |
3fb6cb1e | 11 | #include <stdint.h> |
1566533a | 12 | #include "misc.hh" |
13 | #include "dns.hh" | |
14 | #include "statbag.hh" | |
15 | ||
16 | using std::string; | |
17 | ||
18 | static void *threadMangler(void* a) | |
19 | { | |
040ab84f | 20 | AtomicCounter* ac=(AtomicCounter*)a; |
2d3c55f6 | 21 | for(unsigned int n=0; n < 1000000; ++n) |
1566533a | 22 | (*ac)++; |
23 | return 0; | |
24 | } | |
25 | ||
305cbc49 | 26 | static void *threadMangler2(void* a) |
27 | { | |
28 | StatBag* S = (StatBag*)a; | |
2d3c55f6 | 29 | for(unsigned int n=0; n < 1000000; ++n) |
305cbc49 | 30 | S->inc("c"); |
31 | return 0; | |
32 | } | |
33 | ||
34 | ||
35 | ||
c7f29d3e | 36 | BOOST_AUTO_TEST_SUITE(test_misc_hh) |
1566533a | 37 | |
38 | BOOST_AUTO_TEST_CASE(test_StatBagBasic) { | |
39 | StatBag s; | |
40 | s.declare("a", "description"); | |
41 | s.declare("b", "description"); | |
42 | s.declare("c", "description"); | |
43 | s.inc("a"); | |
44 | BOOST_CHECK_EQUAL(s.read("a"), 1); | |
45 | ||
46 | int n; | |
47 | for(n=0; n < 1000000; ++n) | |
48 | s.inc("b"); | |
49 | ||
50 | BOOST_CHECK_EQUAL(s.read("b"), n); | |
51 | ||
52 | AtomicCounter* ac = s.getPointer("a"); | |
53 | for(n=0; n < 1000000; ++n) | |
54 | (*ac)++; | |
55 | ||
56 | BOOST_CHECK_EQUAL(s.read("a"), n+1); | |
57 | ||
58 | AtomicCounter* acc = s.getPointer("c"); | |
59 | pthread_t tid[4]; | |
60 | for(int i=0; i < 4; ++i) | |
61 | pthread_create(&tid[i], 0, threadMangler, (void*)acc); | |
62 | void* res; | |
63 | for(int i=0; i < 4 ; ++i) | |
64 | pthread_join(tid[i], &res); | |
65 | ||
2d3c55f6 | 66 | BOOST_CHECK_EQUAL(s.read("c"), 4000000U); |
305cbc49 | 67 | |
68 | s.set("c", 0); | |
69 | ||
70 | for(int i=0; i < 4; ++i) | |
71 | pthread_create(&tid[i], 0, threadMangler2, (void*)&s); | |
72 | ||
73 | for(int i=0; i < 4 ; ++i) | |
74 | pthread_join(tid[i], &res); | |
75 | ||
2d3c55f6 | 76 | BOOST_CHECK_EQUAL(s.read("c"), 4000000U); |
305cbc49 | 77 | |
78 | ||
79 | s.set("c", 1ULL<<31); | |
80 | BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<31) ); | |
81 | s.inc("c"); | |
82 | BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<31) +1 ); | |
da043807 | 83 | |
84 | #ifdef UINTPTR_MAX | |
305cbc49 | 85 | #if UINTPTR_MAX > 0xffffffffULL |
00c6f2b9 | 86 | BOOST_CHECK_EQUAL(sizeof(AtomicCounterInner), 8); |
305cbc49 | 87 | s.set("c", 1ULL<<33); |
88 | BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<33) ); | |
89 | s.inc("c"); | |
90 | BOOST_CHECK_EQUAL(s.read("c"), (1ULL<<33) +1 ); | |
91 | ||
92 | s.set("c", ~0ULL); | |
93 | BOOST_CHECK_EQUAL(s.read("c"), 0xffffffffffffffffULL ); | |
94 | s.inc("c"); | |
95 | BOOST_CHECK_EQUAL(s.read("c"), 0 ); | |
96 | #else | |
00c6f2b9 | 97 | BOOST_CHECK_EQUAL(sizeof(AtomicCounterInner), 4); |
007d8bdb | 98 | BOOST_CHECK_EQUAL(~0UL, 0xffffffffUL); |
305cbc49 | 99 | s.set("c", ~0UL); |
100 | BOOST_CHECK_EQUAL(s.read("c"), 0xffffffffUL ); | |
101 | s.inc("c"); | |
102 | BOOST_CHECK_EQUAL(s.read("c"), 0 ); | |
103 | #endif | |
da043807 | 104 | #endif |
1566533a | 105 | } |
106 | ||
107 | ||
108 | BOOST_AUTO_TEST_SUITE_END() | |
109 |