Preuve « sans endpoint = identique au bit près », posée AVANT tout refactoring. `nymea-energy-decisions` est la suite `simulation` compilée à l'identique, plus un enregistreur branché à l'édition de liens (`--wrap`) : aucune ligne de la suite ni du moteur n'est modifiée. Chaque cycle (`simulationCallUpdate`) écrit une ligne NDJSON : télémétrie de l'arbitre (actions du créneau dans l'ordre, motifs, niveaux, budget, soutirage, consigne posée), actions laissées au proxy, état des Things. Les scénarios qui interrogent un `RuleBasedScheduler` local voient leur `Plan` sérialisé champ par champ. Exclus : `command.since` et les compteurs `totalEnergy*` du mock (horloge murale), les ThingId (alias par rang dans le créneau, à chaque ligne : deux bornes identiques reçoivent leur rang provisionné dans l'ordre d'un QHash). `planId` n'est pas lu. Référence générée sur 83483cc (1.15.2+etm69) : 66 fonctions, 23 673 cycles + 36 plans directs, deux exécutions identiques à l'octet. Chaque processus a un /tmp privé : libnymea range l'état de test sous /tmp/nymea-test, partagé et cumulatif (348 bornes orphelines trouvées dans energy-load-configuration.json). tests/auto/decisions/run-decisions.sh <build> check Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
1.9 KiB
Prolog
51 lines
1.9 KiB
Prolog
# Décisions de référence (brief 4 T0.5) — la preuve « sans endpoint = identique au bit près ».
|
|
#
|
|
# Ce binaire est la suite `simulation`, compilée À L'IDENTIQUE (mêmes sources, même
|
|
# ENERGY_SIMULATION), plus un enregistreur. Aucune ligne de la suite n'est modifiée : le point
|
|
# d'écoute est posé à l'ÉDITION DE LIENS. `--wrap` redirige chaque appel de
|
|
# SmartChargingManager::simulationCallUpdate() fait par les scénarios vers
|
|
# decisionrecorder.cpp, qui appelle le vrai cycle puis sérialise ce qu'il a décidé.
|
|
#
|
|
# Lancer : tests/auto/decisions/run-decisions.sh (voir son en-tête).
|
|
|
|
include(../common/common.pri)
|
|
include(../../../energyplugin/energyplugin.pri)
|
|
include(../../mocks/spotmarketprovider/spotmarketdataprovidermock.pri)
|
|
|
|
CONFIG += testcase
|
|
|
|
TARGET = nymea-energy-decisions
|
|
|
|
DEFINES += ENERGY_SIMULATION
|
|
|
|
SIM = $$PWD/../simulation
|
|
INCLUDEPATH += $$SIM
|
|
|
|
RESOURCES += \
|
|
$$SIM/simulationresources.qrc
|
|
|
|
HEADERS += \
|
|
$$SIM/experience/energyexperienceenergymock.h \
|
|
$$SIM/experience/energyjsonhandler.h \
|
|
$$SIM/experience/energylogger.h \
|
|
$$SIM/experience/energymanagermock.h \
|
|
$$SIM/simulation.h \
|
|
$$SIM/simulationbase.h \
|
|
$$SIM/simulationtestpoint.h
|
|
|
|
SOURCES += \
|
|
$$SIM/experience/energyexperienceenergymock.cpp \
|
|
$$SIM/experience/energyjsonhandler.cpp \
|
|
$$SIM/experience/energylogger.cpp \
|
|
$$SIM/experience/energymanagermock.cpp \
|
|
$$SIM/simulation.cpp \
|
|
$$SIM/simulationbase.cpp \
|
|
$$SIM/simulationtestpoint.cpp \
|
|
decisionrecorder.cpp
|
|
|
|
# Noms mangés Itanium : SmartChargingManager::simulationCallUpdate(const QDateTime &) (chaque
|
|
# cycle des scénarios) et RuleBasedScheduler::getPlan(const SurplusContext &) (les scénarios qui
|
|
# interrogent le planificateur directement, sans arbitre).
|
|
QMAKE_LFLAGS += -Wl,--wrap=_ZN20SmartChargingManager20simulationCallUpdateERK9QDateTime
|
|
QMAKE_LFLAGS += -Wl,--wrap=_ZN18RuleBasedScheduler7getPlanERK14SurplusContext
|