]> git.ipfire.org Git - thirdparty/pdns.git/blame - pdns/test-statbag_cc.cc
poll events are bitmasks, not values
[thirdparty/pdns.git] / pdns / test-statbag_cc.cc
CommitLineData
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
16using std::string;
17
18static 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 26static 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 36BOOST_AUTO_TEST_SUITE(test_misc_hh)
1566533a 37
38BOOST_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
108BOOST_AUTO_TEST_SUITE_END()
109