// SPDX-License-Identifier: MPL-2.0 #include "sequa/core/sim/rng.hpp" #include #include #include using sequa::core::sim::Pcg32; TEST_CASE("Pcg32 : sorties de reference de pcg32-demo (graine 42, flux 54)") { Pcg32 rng(42, 54); const std::array expected{0xa15c02b7u, 0x7b47f409u, 0xba1d3330u, 0x83d2f293u, 0xbfa4784bu, 0xcbed606eu}; for (const std::uint32_t value : expected) { CHECK(rng.next() == value); } } // Pas de « ; » dans les noms de tests : CMake les lit comme séparateurs de liste. TEST_CASE("Pcg32 : meme graine meme suite, graine differente suite differente") { Pcg32 a(7, 1); Pcg32 b(7, 1); Pcg32 c(8, 1); bool any_difference = false; for (int i = 0; i < 100; ++i) { const std::uint32_t va = a.next(); CHECK(va == b.next()); any_difference = any_difference || va != c.next(); } CHECK(any_difference); } TEST_CASE("Pcg32 : bounded et range restent dans leurs bornes") { Pcg32 rng(123, 9); for (int i = 0; i < 10'000; ++i) { CHECK(rng.bounded(10) < 10u); const std::int32_t v = rng.range(-5, 5); CHECK(v >= -5); CHECK(v <= 5); } CHECK(rng.range(3, 3) == 3); }