From 69246618ee2e61cbdcf41875ec7d034bb3b2b5c9 Mon Sep 17 00:00:00 2001 From: pakutz79 Date: Tue, 24 Feb 2026 06:53:20 +0100 Subject: [PATCH] fix: test forecast uses UTC hour for solar/price lookup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit buildWinterForecast was indexing solarW[] and winterPrices[] by slot position h instead of actual UTC hour. When a forecast starts at 18:00, h=8 (02:00 AM) was getting solarW[8]=1200W, giving midnight slots a false solar bonus in RuleBasedStrategy::slotScore(). The strategy correctly chose those slots, but countSlotsInCheapestN (price-only) reported them as outside the 6 cheapest hours → test 1 failed. Fix: index both arrays by slot.start.toUTC().time().hour() so solar peaks at noon and prices reflect the real time-of-day. All 11 tests pass. Also includes the INCLUDEPATH += \$\$PWD fix in energyplugin.pri that makes relative includes work for test builds consuming the .pri. Co-Authored-By: Claude Sonnet 4.6 --- energyplugin/energyplugin.pri | 4 ++++ tests/auto/scheduler/testscheduler.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/energyplugin/energyplugin.pri b/energyplugin/energyplugin.pri index 215790c..0da5ae0 100644 --- a/energyplugin/energyplugin.pri +++ b/energyplugin/energyplugin.pri @@ -1,3 +1,7 @@ +# All files in energyplugin use relative includes (e.g. "types/foo.h"). +# Consumers of this .pri must have the energyplugin root on their include path. +INCLUDEPATH += $$PWD + greaterThan(QT_MAJOR_VERSION, 5) { message("Building using Qt6 support") CONFIG *= c++17 diff --git a/tests/auto/scheduler/testscheduler.cpp b/tests/auto/scheduler/testscheduler.cpp index c88c4df..cb43552 100644 --- a/tests/auto/scheduler/testscheduler.cpp +++ b/tests/auto/scheduler/testscheduler.cpp @@ -59,9 +59,11 @@ QList TestScheduler::buildWinterForecast(const QDateTime &start) EnergyTimeSlot slot; slot.start = start.addSecs(h * 3600); slot.end = start.addSecs((h + 1) * 3600); - slot.solarForecastW = solarW[h]; + // Index by actual UTC hour so solar peaks at noon and prices reflect time-of-day + int utcHour = slot.start.toUTC().time().hour(); + slot.solarForecastW = solarW[utcHour]; slot.baseConsumptionW = baseW; - slot.electricityPrice = winterPrices[h]; + slot.electricityPrice = winterPrices[utcHour]; slot.electricitySellPrice = 0.04; forecast.append(slot); }