Files
Jungfraujoch/tests/HistogramTest.cpp

86 lines
2.0 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("Histogram") {
Histogram h(200);
h.Add(150);
h.Add(100);
h.Add(100);
h.Add(100);
h.Add(100);
h.Add(101);
h.Add(199);
h.Add(200); // Outside or range
h.Add(-1); // Outside of range
CHECK(h.GetTotalCount() == 7);
auto p = h.GetCount();
REQUIRE(p.size() == 200);
CHECK(p[100] == 4);
CHECK(p[150] == 1);
CHECK(p[199] == 1);
CHECK(p[101] == 1);
CHECK(p[55] == 0);
}
TEST_CASE("Histogram_Percentile") {
Histogram h(500);
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) == 100);
CHECK(h.Percentile(30.0f).value_or(-1) == 100);
CHECK(h.Percentile(50.0f).value_or(-1) == 100);
CHECK(h.Percentile(80.0f).value_or(-1) == 100);
CHECK(h.Percentile(90.0f).value_or(-1) == 150);
CHECK(h.Percentile(100.0f).value_or(-1) == 200);
CHECK(h.GetTotalCount() == 10);
}
TEST_CASE("Histogram_Clear") {
Histogram h(300);
for (int i = 0; i < 8; i++)
h.Add(100);
h.Add(150);
h.Add(200);
CHECK(h.GetTotalCount() == 10);
h.clear();
CHECK(h.GetTotalCount() == 0);
h.Add(200.0f);
CHECK(h.GetTotalCount() == 1);
}