89 lines
2.4 KiB
C++
89 lines
2.4 KiB
C++
// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#include <catch2/catch_all.hpp>
|
|
|
|
#include "../common/Histogram.h"
|
|
|
|
TEST_CASE("SetAverage") {
|
|
SetAverage<float> h(100);
|
|
h.Add(80, 30.0);
|
|
h.Add(50, 20.0);
|
|
h.Add(50, 30.0);
|
|
h.Add(0, -2.0);
|
|
h.Add(100, 50.0);
|
|
|
|
auto p = h.GetPlot();
|
|
REQUIRE(p.GetPlots().size() == 1);
|
|
REQUIRE(p.GetPlots()[0].x.size() == 100);
|
|
REQUIRE(p.GetPlots()[0].y.size() == 100);
|
|
|
|
CHECK(p.GetPlots()[0].x[0] == 0.0);
|
|
CHECK(p.GetPlots()[0].x[80] == 80.0);
|
|
CHECK(p.GetPlots()[0].x[30] == 30.0);
|
|
CHECK(p.GetPlots()[0].x[99] == 99.0);
|
|
|
|
CHECK(p.GetPlots()[0].y[0] == -2.0);
|
|
CHECK(p.GetPlots()[0].y[50] == 25.0);
|
|
CHECK(p.GetPlots()[0].y[80] == 30.0);
|
|
CHECK(p.GetPlots()[0].y[99] == 0.0);
|
|
}
|
|
|
|
TEST_CASE("FloatHistogram") {
|
|
FloatHistogram h(100, 100.0, 200.0);
|
|
h.Add(150.5);
|
|
h.Add(100.2);
|
|
h.Add(100.9999);
|
|
h.Add(100.0);
|
|
h.Add(100.00001);
|
|
h.Add(101.0);
|
|
h.Add(200.0);
|
|
|
|
auto p = h.GetPlot();
|
|
REQUIRE(p.GetPlots().size() == 1);
|
|
REQUIRE(p.GetPlots()[0].x.size() == 100);
|
|
REQUIRE(p.GetPlots()[0].y.size() == 100);
|
|
|
|
CHECK(p.GetPlots()[0].x[0] == 100.5);
|
|
CHECK(p.GetPlots()[0].x[34] == 134.5);
|
|
CHECK(p.GetPlots()[0].x[99] == 199.5);
|
|
|
|
CHECK(p.GetPlots()[0].y[0] == 4.0);
|
|
CHECK(p.GetPlots()[0].y[1] == 1.0);
|
|
CHECK(p.GetPlots()[0].y[50] == 1.0);
|
|
CHECK(p.GetPlots()[0].y[99] == 0.0);
|
|
}
|
|
|
|
TEST_CASE("FloatHistogram_Percentile") {
|
|
FloatHistogram h(111, 89.5, 200.5);
|
|
for (int i = 0; i < 8; i++)
|
|
h.Add(100.0f);
|
|
h.Add(150.0f);
|
|
h.Add(200.0f);
|
|
|
|
CHECK(h.Percentile(0.0f).value_or(-1) == Catch::Approx(100.0f));
|
|
CHECK(h.Percentile(30.0f).value_or(-1) == Catch::Approx(100.0f));
|
|
CHECK(h.Percentile(50.0f).value_or(-1) == Catch::Approx(100.0f));
|
|
CHECK(h.Percentile(80.0f).value_or(-1) == Catch::Approx(100.0f));
|
|
CHECK(h.Percentile(90.0f).value_or(-1) == Catch::Approx(150.0f));
|
|
CHECK(h.Percentile(100.0f).value_or(-1) == Catch::Approx(200.0f));
|
|
|
|
CHECK(h.TotalCount() == 10);
|
|
}
|
|
|
|
TEST_CASE("FloatHistogram_Clear") {
|
|
FloatHistogram h(111, 89.5, 200.5);
|
|
for (int i = 0; i < 8; i++)
|
|
h.Add(100.0f);
|
|
h.Add(150.0f);
|
|
h.Add(200.0f);
|
|
|
|
CHECK(h.TotalCount() == 10);
|
|
|
|
h.clear();
|
|
|
|
CHECK(h.TotalCount() == 0);
|
|
|
|
h.Add(200.0f);
|
|
CHECK(h.TotalCount() == 1);
|
|
} |