// SPDX-License-Identifier: MPL-2.0 #include "sequa/core/sim/clock.hpp" #include #include 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); }