blob: 28812fda750440078049012d3645ab2b114c798d [file] [log] [blame]
Sameer Abu Asala8439542013-02-14 16:06:42 -08001#include "gtest/gtest.h"
2#include "histogram-inl.h"
3#include <sstream>
4using namespace art;
5
6//Simple usage:
7// Histogram *hist = new Histogram("SimplePercentiles");
8// Percentile PerValue
9// hist->AddValue(121);
10// hist->AddValue(132);
11// hist->AddValue(140);
12// hist->AddValue(145);
13// hist->AddValue(155);
14// hist->CreateHistogram();
15// PerValue = hist->PercentileVal(0.50); finds the 50th percentile(median).
16
17TEST(Histtest, MeanTest) {
18
19 Histogram<uint64_t> *hist = new Histogram<uint64_t>("MeanTest");
20 double mean;
21 for (size_t Idx = 0; Idx < 90; Idx++) {
22 hist->AddValue(static_cast<uint64_t>(50));
23 }
24 mean = hist->Mean();
25 EXPECT_EQ(mean, 50);
26 hist->Reset();
27 hist->AddValue(9);
28 hist->AddValue(17);
29 hist->AddValue(28);
30 hist->AddValue(28);
31 mean = hist->Mean();
32 EXPECT_EQ(mean, 20.5);
33}
Sameer Abu Asala8439542013-02-14 16:06:42 -080034
35TEST(Histtest, VarianceTest) {
36
37 Histogram<uint64_t> *hist = new Histogram<uint64_t>("VarianceTest");
38 double variance;
39 hist->AddValue(9);
40 hist->AddValue(17);
41 hist->AddValue(28);
42 hist->AddValue(28);
43 hist->CreateHistogram();
44 variance = hist->Variance();
45 EXPECT_EQ(variance, 64.25);
46 delete hist;
47}
Sameer Abu Asala8439542013-02-14 16:06:42 -080048
49TEST(Histtest, Percentile) {
50
51 Histogram<uint64_t> *hist = new Histogram<uint64_t>("Percentile");
52 double PerValue;
53
54 hist->AddValue(20);
55 hist->AddValue(31);
56 hist->AddValue(42);
57 hist->AddValue(50);
58 hist->AddValue(60);
59 hist->AddValue(70);
Sameer Abu Asalc081e362013-02-20 16:45:38 -080060
Sameer Abu Asala8439542013-02-14 16:06:42 -080061 hist->AddValue(98);
Sameer Abu Asalc081e362013-02-20 16:45:38 -080062
Sameer Abu Asala8439542013-02-14 16:06:42 -080063 hist->AddValue(110);
64 hist->AddValue(121);
65 hist->AddValue(132);
66 hist->AddValue(140);
67 hist->AddValue(145);
68 hist->AddValue(155);
69
70 hist->CreateHistogram();
71 PerValue = hist->Percentile(0.50);
Sameer Abu Asalc081e362013-02-20 16:45:38 -080072 EXPECT_EQ(static_cast<int>(PerValue * 10), 875);
Sameer Abu Asala8439542013-02-14 16:06:42 -080073
74 delete hist;
75}
Sameer Abu Asala8439542013-02-14 16:06:42 -080076
77TEST(Histtest, UpdateRange) {
78
79 Histogram<uint64_t> *hist = new Histogram<uint64_t>("UpdateRange");
80 double PerValue;
81
82 hist->AddValue(15);
83 hist->AddValue(17);
84 hist->AddValue(35);
85 hist->AddValue(50);
86 hist->AddValue(68);
87 hist->AddValue(75);
88 hist->AddValue(93);
89 hist->AddValue(110);
90 hist->AddValue(121);
91 hist->AddValue(132);
92 hist->AddValue(140); //Median value
93 hist->AddValue(145);
94 hist->AddValue(155);
95 hist->AddValue(163);
96 hist->AddValue(168);
97 hist->AddValue(175);
98 hist->AddValue(182);
99 hist->AddValue(193);
100 hist->AddValue(200);
101 hist->AddValue(205);
102 hist->AddValue(212);
103 hist->CreateHistogram();
104 PerValue = hist->Percentile(0.50);
105
106 std::string text;
107 std::stringstream stream;
108 std::string expected =
Sameer Abu Asalc081e362013-02-20 16:45:38 -0800109 "UpdateRange:\t0.99% C.I. 1.050us-214.475us Avg: 126.380us Max: 212us\n";
Sameer Abu Asala8439542013-02-14 16:06:42 -0800110 hist->PrintConfidenceIntervals(stream, 0.99);
111
112 EXPECT_EQ(expected, stream.str());
113 EXPECT_GE(PerValue, 132);
114 EXPECT_LE(PerValue, 145);
115
116 delete hist;
117}
118;
119
120TEST(Histtest, Reset) {
121
122 Histogram<uint64_t> *hist = new Histogram<uint64_t>("Reset");
123 double PerValue;
124 hist->AddValue(0);
125 hist->AddValue(189);
126 hist->AddValue(389);
127 hist->Reset();
128 hist->AddValue(15);
129 hist->AddValue(17);
130 hist->AddValue(35);
131 hist->AddValue(50);
132 hist->AddValue(68);
133 hist->AddValue(75);
134 hist->AddValue(93);
135 hist->AddValue(110);
136 hist->AddValue(121);
137 hist->AddValue(132);
138 hist->AddValue(140); //Median value
139 hist->AddValue(145);
140 hist->AddValue(155);
141 hist->AddValue(163);
142 hist->AddValue(168);
143 hist->AddValue(175);
144 hist->AddValue(182);
145 hist->AddValue(193);
146 hist->AddValue(200);
147 hist->AddValue(205);
148 hist->AddValue(212);
149 hist->CreateHistogram();
150 PerValue = hist->Percentile(0.50);
151
152 std::string text;
153 std::stringstream stream;
154 std::string expected =
Sameer Abu Asalc081e362013-02-20 16:45:38 -0800155 "Reset:\t0.99% C.I. 1.050us-214.475us Avg: 126.380us Max: 212us\n";
Sameer Abu Asala8439542013-02-14 16:06:42 -0800156 hist->PrintConfidenceIntervals(stream, 0.99);
157
158 EXPECT_EQ(expected, stream.str());
159 EXPECT_GE(PerValue, 132);
160 EXPECT_LE(PerValue, 145);
161
162 delete hist;
163}
164;
165
166TEST(Histtest, MultipleCreateHist) {
167
168 Histogram<uint64_t> *hist = new Histogram<uint64_t>("MultipleCreateHist");
169 double PerValue;
170 hist->AddValue(15);
171 hist->AddValue(17);
172 hist->AddValue(35);
173 hist->AddValue(50);
174 hist->AddValue(68);
175 hist->AddValue(75);
176 hist->AddValue(93);
177 hist->CreateHistogram();
178 hist->AddValue(110);
179 hist->AddValue(121);
180 hist->AddValue(132);
181 hist->AddValue(140); //Median value
182 hist->AddValue(145);
183 hist->AddValue(155);
184 hist->AddValue(163);
185 hist->AddValue(168);
186 hist->CreateHistogram();
187 hist->AddValue(175);
188 hist->AddValue(182);
189 hist->AddValue(193);
190 hist->AddValue(200);
191 hist->AddValue(205);
192 hist->AddValue(212);
193 hist->CreateHistogram();
194 PerValue = hist->Percentile(0.50);
195
Sameer Abu Asala8439542013-02-14 16:06:42 -0800196 std::stringstream stream;
197 std::string expected =
Sameer Abu Asalc081e362013-02-20 16:45:38 -0800198 "MultipleCreateHist:\t0.99% C.I. 1.050us-214.475us Avg: 126.380us Max: 212us\n";
Sameer Abu Asala8439542013-02-14 16:06:42 -0800199 hist->PrintConfidenceIntervals(stream, 0.99);
200
201 EXPECT_EQ(expected, stream.str());
202 EXPECT_GE(PerValue, 132);
203 EXPECT_LE(PerValue, 145);
204
205 delete hist;
206}
Sameer Abu Asala8439542013-02-14 16:06:42 -0800207
208TEST(Histtest, SingleValue) {
209
210 Histogram<uint64_t> *hist = new Histogram<uint64_t>("SingleValue");
Sameer Abu Asala8439542013-02-14 16:06:42 -0800211
212 hist->AddValue(1);
213 hist->CreateHistogram();
Sameer Abu Asala8439542013-02-14 16:06:42 -0800214
Sameer Abu Asalc081e362013-02-20 16:45:38 -0800215 std::stringstream stream;
216 std::string expected =
217 "SingleValue:\t0.99% C.I. 0.025us-4.975us Avg: 1us Max: 1us\n";
218 hist->PrintConfidenceIntervals(stream, 0.99);
219 EXPECT_EQ(stream.str(), expected);
Sameer Abu Asala8439542013-02-14 16:06:42 -0800220
221 delete hist;
222}
Sameer Abu Asala8439542013-02-14 16:06:42 -0800223
224TEST(Histtest, SpikyValues) {
225
226 Histogram<uint64_t> *hist = new Histogram<uint64_t>("SpikyValues");
Sameer Abu Asala8439542013-02-14 16:06:42 -0800227
Sameer Abu Asalc081e362013-02-20 16:45:38 -0800228 for (uint64_t idx = 0ull; idx < 30ull; idx++) {
229 for (uint64_t idx_inner = 0ull; idx_inner < 5ull; idx_inner++) {
230 hist->AddValue(idx * idx_inner);
231 }
Sameer Abu Asala8439542013-02-14 16:06:42 -0800232 }
233
234 hist->AddValue(10000);
235 hist->CreateHistogram();
Sameer Abu Asala8439542013-02-14 16:06:42 -0800236
Sameer Abu Asalc081e362013-02-20 16:45:38 -0800237 std::stringstream stream;
238 std::string expected =
239 "SpikyValues:\t0.99% C.I. 0.089us-2541.825us Avg: 95.033us Max: 10000us\n";
240 hist->PrintConfidenceIntervals(stream, 0.99);
241 EXPECT_EQ(stream.str(), expected);
242
Sameer Abu Asala8439542013-02-14 16:06:42 -0800243 delete hist;
244}