12#include "../3rdparty/catch2/catch.hpp"
14#include "../misc/history_type.hpp"
15#include "../misc/history_func.hpp"
17#include "../safeguards.h"
20uint16_t SumHistory(std::span<const uint16_t> history)
22 uint32_t total = std::accumulate(std::begin(history), std::end(history), 0, [](uint32_t r,
const uint16_t &value) {
return r + value; });
23 return ClampTo<uint16_t>(total);
41TEST_CASE(
"History Rotation and Reporting tests")
48 uint16_t i = 12 * HISTORY_PERIODS;
49 for (uint date = 1; date <= 12 * HISTORY_PERIODS; ++date, --i) {
50 history[THIS_MONTH] = i;
52 RotateHistory(history, valid_history, HISTORY_YEAR, date % 12);
60 for (uint j = 0; j < HISTORY_PERIODS; ++j) {
61 CHECK(
GetHistory(history, HISTORY_MONTH, j) == (( 1 * 1 + 1) / 2) + 1 * 1 * j);
62 CHECK(
GetHistory(history, HISTORY_QUARTER, j) == (( 3 * 3 + 3) / 2) + 3 * 3 * j);
63 CHECK(
GetHistory(history, HISTORY_YEAR, j) == ((12 * 12 + 12) / 2) + 12 * 12 * j);
77 CHECK(
GetHistory(history, HISTORY_QUARTER, 0) +
GetHistory(history, HISTORY_QUARTER, 1) +
GetHistory(history, HISTORY_QUARTER, 2) +
GetHistory(history, HISTORY_QUARTER, 3) ==
GetHistory(history, HISTORY_YEAR, 0));
78 CHECK(
GetHistory(history, HISTORY_QUARTER, 4) +
GetHistory(history, HISTORY_QUARTER, 5) +
GetHistory(history, HISTORY_QUARTER, 6) +
GetHistory(history, HISTORY_QUARTER, 7) ==
GetHistory(history, HISTORY_YEAR, 1));
79 CHECK(
GetHistory(history, HISTORY_QUARTER, 8) +
GetHistory(history, HISTORY_QUARTER, 9) +
GetHistory(history, HISTORY_QUARTER, 10) +
GetHistory(history, HISTORY_QUARTER, 11) ==
GetHistory(history, HISTORY_YEAR, 2));
80 CHECK(
GetHistory(history, HISTORY_QUARTER, 12) +
GetHistory(history, HISTORY_QUARTER, 13) +
GetHistory(history, HISTORY_QUARTER, 14) +
GetHistory(history, HISTORY_QUARTER, 15) ==
GetHistory(history, HISTORY_YEAR, 3));
81 CHECK(
GetHistory(history, HISTORY_QUARTER, 16) +
GetHistory(history, HISTORY_QUARTER, 17) +
GetHistory(history, HISTORY_QUARTER, 18) +
GetHistory(history, HISTORY_QUARTER, 19) ==
GetHistory(history, HISTORY_YEAR, 4));
82 CHECK(
GetHistory(history, HISTORY_QUARTER, 20) +
GetHistory(history, HISTORY_QUARTER, 21) +
GetHistory(history, HISTORY_QUARTER, 22) +
GetHistory(history, HISTORY_QUARTER, 23) ==
GetHistory(history, HISTORY_YEAR, 5));
void UpdateValidHistory(ValidHistoryMask &valid_history, const HistoryRange &hr, uint cur_month)
Update mask of valid records for a historical data.
T GetHistory(const HistoryData< T > &history, const HistoryRange &hr, uint age)
Helper to get history records and return the value, instead returning its validity.
void RotateHistory(HistoryData< T > &history, ValidHistoryMask valid_history, const HistoryRange &hr, uint cur_month)
Rotate historical data.
std::array< T, HISTORY_RECORDS > HistoryData
Container type for storing history data.
uint64_t ValidHistoryMask
Mask of valid history records.