// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include #include "../common/Histogram.h" TEST_CASE("SetAverage") { SetAverage 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); }