Line data Source code
1 : #include <fas/testing.hpp>
2 : #include <wrtstat/aggregator.hpp>
3 : #include <numeric>
4 :
5 : namespace {
6 :
7 3 : UNIT(aggregator1, "")
8 : {
9 : using namespace fas::testing;
10 : using namespace wrtstat;
11 :
12 1 : aggregator_options opt;
13 1 : opt.reducer_levels = 1;
14 1 : opt.reducer_limit = 10;
15 1 : opt.resolution = resolutions::none;
16 1 : opt.aggregation_step_ts = 10;
17 1 : std::vector<int> values;
18 2 : aggregator ag(0, opt);
19 101 : for (int i = 0 ; i < 100; i++)
20 : {
21 100 : t << is_true<expect>( ag.add(i, i, 1) ) << FAS_FL;
22 100 : values.push_back(i);
23 : }
24 :
25 :
26 1 : ag.separate(100, nullptr, true);
27 1 : t << equal<expect, size_t>( ag.size(), 10 ) << FAS_FL;
28 11 : for (int i = 0 ; i < 10; i++)
29 : {
30 10 : int avg = std::accumulate(values.begin() + i*10, values.begin() + (i+1)*10 , 0) / 10;
31 10 : auto s = ag.pop();
32 10 : t << is_true<assert>( s!=nullptr ) << "i=" << i << FAS_FL;
33 10 : t << stop;
34 10 : t << equal<expect>( s->ts, i*10 ) << "i=" << FAS_FL;
35 10 : t << equal<expect, size_t>( s->lossy, 0 ) << "i=" << FAS_FL;
36 10 : t << equal<expect, size_t>( s->count, 10 ) << "i=" << FAS_FL;
37 10 : t << equal<expect, size_t>( s->min, 0 + i*10 ) << "i=" << FAS_FL;
38 10 : t << equal<expect, size_t>( s->perc50, 5 + i*10 ) << "i=" << FAS_FL;
39 10 : t << equal<expect, size_t>( s->perc80, 8 + i*10 ) << "i=" << FAS_FL;
40 10 : t << equal<expect, size_t>( s->perc95, 9 + i*10 ) << "i=" << FAS_FL;
41 10 : t << equal<expect, size_t>( s->perc99, 9 + i*10 ) << "i=" << FAS_FL;
42 10 : t << equal<expect, size_t>( s->perc100, 9 + i*10 ) << "i=" << FAS_FL;
43 10 : t << equal<expect, size_t>( s->max, 9 + i*10 ) << "i=" << FAS_FL;
44 10 : t << equal<expect, size_t>( s->avg, avg ) << "i=" << FAS_FL;
45 : }
46 :
47 2 : t << nothing;
48 1 : }
49 :
50 3 : UNIT(aggregator2, "")
51 : {
52 : using namespace fas::testing;
53 : using namespace wrtstat;
54 :
55 1 : aggregator_options opt;
56 1 : opt.reducer_levels = 1;
57 1 : opt.reducer_limit = 8;
58 1 : opt.resolution = resolutions::none;
59 1 : opt.aggregation_step_ts = 10;
60 :
61 1 : auto ag = std::make_shared<aggregator_mt>(0, opt);
62 2 : auto meter = ag->create_simple_pusher(nullptr);
63 101 : for (int i = 0 ; i < 100; i++)
64 : {
65 100 : meter(i, i, 1);
66 100 : t << equal<expect, size_t>( ag->size(), i/10 ) << FAS_FL;
67 : }
68 :
69 1 : ag->separate(100, nullptr, true);
70 1 : t << equal<expect, size_t>( ag->size(), 10 ) << FAS_FL;
71 11 : for (int i = 0 ; i < 10; i++)
72 : {
73 10 : auto s = ag->pop();
74 10 : t << is_true<assert>( s!=nullptr ) << "i=" << i << FAS_FL;
75 10 : t << stop;
76 10 : t << equal<expect>( s->ts, i*10 ) << "i=" << FAS_FL;
77 : }
78 :
79 1 : t << warning("TOOD test for aggregate_current()") <<FAS_FL;
80 1 : ag->aggregate_current();
81 :
82 2 : t << nothing;
83 1 : }
84 :
85 : }
86 :
87 1 : BEGIN_SUITE(aggregator, "")
88 : ADD_UNIT(aggregator1)
89 : ADD_UNIT(aggregator2)
90 7 : END_SUITE(aggregator)
|