Files
Ange-Marie MAURIN - A2M Systèmes 6cf0c54e3b feat(prototypes): étape 2 gpu_interop exécutée et mesurée
CUDA 13.5 : import 0,07 ms, mappage 0,05-0,08 ms, copie GPU->GPU 0,06 ms (100-140 Go/s) contre ~32 ms par le CPU, vérification octet à octet OK. Corrige aussi un nom de test contenant ';' que ctest découpait en deux.
2026-11-06 21:07:10 +01:00

47 lines
1.3 KiB
C++

// SPDX-License-Identifier: MPL-2.0
#include "sequa/core/sim/rng.hpp"
#include <doctest/doctest.h>
#include <array>
#include <cstdint>
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<std::uint32_t, 6> 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);
}