/*
* Copyright ( C ) 2013 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
#include <memory>
#include <sstream>
#include "gtest/gtest.h"
#include "histogram-inl.h"
namespace art {
// Simple usage:
// Histogram *hist(new Histogram("SimplePercentiles"));
// Percentile PerValue
// hist->AddValue(121);
// hist->AddValue(132);
// hist->AddValue(140);
// hist->AddValue(145);
// hist->AddValue(155);
// hist->CreateHistogram();
// PerValue = hist->PercentileVal(0.50); finds the 50th percentile(median).
TEST(Histtest, MeanTest) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("MeanTest" , 5 ));
double mean;
for (size_t Idx = 0 ; Idx < 90 ; Idx++) {
hist->AddValue(static_cast <uint64_t>(50 ));
}
mean = hist->Mean();
EXPECT_DOUBLE_EQ(mean, 50 .0 );
hist->Reset();
hist->AddValue(9 );
hist->AddValue(17 );
hist->AddValue(28 );
hist->AddValue(28 );
mean = hist->Mean();
EXPECT_DOUBLE_EQ(20 .5 , mean);
}
TEST(Histtest, VarianceTest) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("VarianceTest" , 5 ));
double variance;
hist->AddValue(9 );
hist->AddValue(17 );
hist->AddValue(28 );
hist->AddValue(28 );
variance = hist->Variance();
EXPECT_DOUBLE_EQ(64 .25 , variance);
}
TEST(Histtest, Percentile) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("Percentile" , 5 ));
Histogram<uint64_t>::CumulativeData data;
double PerValue;
hist->AddValue(20 );
hist->AddValue(31 );
hist->AddValue(42 );
hist->AddValue(50 );
hist->AddValue(60 );
hist->AddValue(70 );
hist->AddValue(98 );
hist->AddValue(110 );
hist->AddValue(121 );
hist->AddValue(132 );
hist->AddValue(140 );
hist->AddValue(145 );
hist->AddValue(155 );
hist->CreateHistogram(&data);
PerValue = hist->Percentile(0 .50 , data);
EXPECT_EQ(875 , static_cast <int >(PerValue * 10 ));
}
TEST(Histtest, UpdateRange) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("UpdateRange" , 5 ));
Histogram<uint64_t>::CumulativeData data;
double PerValue;
hist->AddValue(15 );
hist->AddValue(17 );
hist->AddValue(35 );
hist->AddValue(50 );
hist->AddValue(68 );
hist->AddValue(75 );
hist->AddValue(93 );
hist->AddValue(110 );
hist->AddValue(121 );
hist->AddValue(132 );
hist->AddValue(140 ); // Median value
hist->AddValue(145 );
hist->AddValue(155 );
hist->AddValue(163 );
hist->AddValue(168 );
hist->AddValue(175 );
hist->AddValue(182 );
hist->AddValue(193 );
hist->AddValue(200 );
hist->AddValue(205 );
hist->AddValue(212 );
hist->CreateHistogram(&data);
PerValue = hist->Percentile(0 .50 , data);
std::string text;
std::stringstream stream;
std::string expected("UpdateRange:\tSum: 2.654ms 99% C.I. 15us-212us Avg: 126.380us Max: 212us\n" );
hist->PrintConfidenceIntervals(stream, 0 .99 , data);
EXPECT_EQ(expected, stream.str());
EXPECT_GE(PerValue, 132 );
EXPECT_LE(PerValue, 145 );
}
TEST(Histtest, Reset) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("Reset" , 5 ));
double PerValue;
hist->AddValue(0 );
hist->AddValue(189 );
hist->AddValue(389 );
hist->Reset();
hist->AddValue(15 );
hist->AddValue(17 );
hist->AddValue(35 );
hist->AddValue(50 );
hist->AddValue(68 );
hist->AddValue(75 );
hist->AddValue(93 );
hist->AddValue(110 );
hist->AddValue(121 );
hist->AddValue(132 );
hist->AddValue(140 ); // Median value
hist->AddValue(145 );
hist->AddValue(155 );
hist->AddValue(163 );
hist->AddValue(168 );
hist->AddValue(175 );
hist->AddValue(182 );
hist->AddValue(193 );
hist->AddValue(200 );
hist->AddValue(205 );
hist->AddValue(212 );
Histogram<uint64_t>::CumulativeData data;
hist->CreateHistogram(&data);
PerValue = hist->Percentile(0 .50 , data);
std::string text;
std::stringstream stream;
std::string expected("Reset:\tSum: 2.654ms 99% C.I. 15us-212us Avg: 126.380us Max: 212us\n" );
hist->PrintConfidenceIntervals(stream, 0 .99 , data);
EXPECT_EQ(expected, stream.str());
EXPECT_GE(PerValue, 132 );
EXPECT_LE(PerValue, 145 );
}
TEST(Histtest, MultipleCreateHist) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("MultipleCreateHist" , 5 ));
Histogram<uint64_t>::CumulativeData data;
double PerValue;
hist->AddValue(15 );
hist->AddValue(17 );
hist->AddValue(35 );
hist->AddValue(50 );
hist->AddValue(68 );
hist->AddValue(75 );
hist->AddValue(93 );
hist->CreateHistogram(&data);
hist->AddValue(110 );
hist->AddValue(121 );
hist->AddValue(132 );
hist->AddValue(140 ); // Median value
hist->AddValue(145 );
hist->AddValue(155 );
hist->AddValue(163 );
hist->AddValue(168 );
hist->CreateHistogram(&data);
hist->AddValue(175 );
hist->AddValue(182 );
hist->AddValue(193 );
hist->AddValue(200 );
hist->AddValue(205 );
hist->AddValue(212 );
hist->CreateHistogram(&data);
PerValue = hist->Percentile(0 .50 , data);
std::stringstream stream;
std::string expected("MultipleCreateHist:\tSum: 2.654ms 99% C.I. 15us-212us Avg: 126.380us Max: 212us\n" );
hist->PrintConfidenceIntervals(stream, 0 .99 , data);
EXPECT_EQ(expected, stream.str());
EXPECT_GE(PerValue, 132 );
EXPECT_LE(PerValue, 145 );
}
TEST(Histtest, SingleValue) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("SingleValue" , 5 ));
Histogram<uint64_t>::CumulativeData data;
hist->AddValue(1 );
hist->CreateHistogram(&data);
std::stringstream stream;
std::string expected = "SingleValue:\tSum: 1us 99% C.I. 1us-1us Avg: 1us Max: 1us\n" ;
hist->PrintConfidenceIntervals(stream, 0 .99 , data);
EXPECT_EQ(expected, stream.str());
}
TEST(Histtest, CappingPercentiles) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("CappingPercentiles" , 5 ));
Histogram<uint64_t>::CumulativeData data;
double per_995;
double per_005;
// All values are similar.
for (uint64_t idx = 0 ull; idx < 150 ull; idx++) {
hist->AddValue(0 );
}
hist->CreateHistogram(&data);
per_995 = hist->Percentile(0 .995 , data);
EXPECT_DOUBLE_EQ(per_995, 0 .0 );
hist->Reset();
for (size_t idx = 0 ; idx < 200 ; idx++) {
for (uint64_t val = 1 ull; val <= 4 ull; val++) {
hist->AddValue(val);
}
}
hist->CreateHistogram(&data);
per_005 = hist->Percentile(0 .005 , data);
per_995 = hist->Percentile(0 .995 , data);
EXPECT_DOUBLE_EQ(1 .0 , per_005);
EXPECT_DOUBLE_EQ(4 .0 , per_995);
}
TEST(Histtest, SpikyValues) {
std::unique_ptr<Histogram<uint64_t>> hist(new Histogram<uint64_t>("SpikyValues" , 5 , 4096 ));
Histogram<uint64_t>::CumulativeData data;
for (uint64_t idx = 0 ull; idx < 30 ull; idx++) {
for (uint64_t idx_inner = 0 ull; idx_inner < 5 ull; idx_inner++) {
hist->AddValue(idx * idx_inner);
}
}
hist->AddValue(10000 );
hist->CreateHistogram(&data);
std::stringstream stream;
std::string expected = "SpikyValues:\tSum: 14.350ms 99% C.I. 0.089us-2541.825us Avg: 95.033us Max: 10000us\n" ;
hist->PrintConfidenceIntervals(stream, 0 .99 , data);
EXPECT_EQ(expected, stream.str());
}
} // namespace art
Messung V0.5 in Prozent C=89 H=96 G=92
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.9Bemerkung:
(vorverarbeitet am 2026-06-29)
¤
*Bot Zugriff