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.
47 lines
1.3 KiB
C++
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);
|
|
}
|