Files
Ange-Marie MAURIN - A2M Systèmes ab219ad611 feat(core): simulation déterministe, enregistrement et rejeu
Virgule fixe Q16.16, générateur PCG32 à graine explicite, horloge à pas fixe exacte, simulation d'un micro-mode de démonstration (marqué SIMULÉ), empreinte FNV-1a de l'état, enregistrement binaire versionné des entrées, rejeu avec d'autres réglages de ressenti et détection du premier tick divergent. Empreinte de référence multiplateforme figée. 22 tests (Debug, Release, ASan).
2026-11-06 19:50:56 +01:00

41 lines
1.2 KiB
C++

// SPDX-License-Identifier: MPL-2.0
#include "sequa/core/sim/clock.hpp"
#include <doctest/doctest.h>
#include <cstdint>
using sequa::core::sim::FixedStepClock;
TEST_CASE("FixedStepClock : 60 Hz exacts sur une seconde decoupee irregulierement")
{
FixedStepClock clock(60, 1000);
std::uint64_t steps = 0;
// 1 s = 7 tranches de 142 857 142 ns + reste : aucun pas perdu ni gagne.
for (int i = 0; i < 7; ++i) {
steps += clock.advance(142'857'142);
}
steps += clock.advance(1'000'000'000ull - 7ull * 142'857'142ull);
CHECK(steps == 60);
}
TEST_CASE("FixedStepClock : 144 Hz d'affichage, 60 Hz de simulation")
{
FixedStepClock clock(60, 1000);
std::uint64_t steps = 0;
const std::uint64_t frame_ns = 1'000'000'000ull / 144; // arrondi : 6 944 444 ns
for (int frame = 0; frame < 144 * 10; ++frame) {
steps += clock.advance(frame_ns);
}
// 1440 images * 6 944 444 ns = 9,99999936 s -> 599 pas complets.
CHECK(steps == 599);
}
TEST_CASE("FixedStepClock : un gros retard est plafonne et compte")
{
FixedStepClock clock(60, 8);
CHECK(clock.advance(1'000'000'000ull) == 8);
CHECK(clock.dropped_steps() == 52);
CHECK(clock.advance(0) == 0);
}