Skip to content
Snippets Groups Projects
Commit aecb90ec authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add missing tests and simplify implementation

parent 8de6b166
Branches
Tags
1 merge request!103Set AssertError to inherit from std::runtime_error
......@@ -41,13 +41,7 @@ RandomEngine::destroy()
RandomEngine::RandomEngine()
{
uint64_t random_seed = std::random_device{}();
parallel::broadcast(random_seed, 0);
m_random_engine = std::default_random_engine(random_seed);
std::cout << " * setting " << rang::fgB::green << "random seed" << rang::style::reset << " to " << rang::fgB::yellow
<< random_seed << rang::style::reset << '\n';
this->resetRandomSeed();
}
void
......@@ -62,5 +56,8 @@ RandomEngine::setRandomSeed(const uint64_t random_seed)
void
RandomEngine::resetRandomSeed()
{
m_instance = std::unique_ptr<RandomEngine>(new RandomEngine);
uint64_t random_seed = std::random_device{}();
parallel::broadcast(random_seed, 0);
this->setRandomSeed(random_seed);
}
......@@ -113,6 +113,7 @@ add_executable (mpi_unit_tests
test_ItemValueUtils.cpp
test_Messenger.cpp
test_Partitioner.cpp
test_RandomEngine.cpp
test_SubItemValuePerItem.cpp
test_SubItemArrayPerItem.cpp
)
......
......@@ -9,6 +9,7 @@
#include <mesh/SynchronizerManager.hpp>
#include <utils/Messenger.hpp>
#include <utils/PETScWrapper.hpp>
#include <utils/RandomEngine.hpp>
#include <utils/pugs_config.hpp>
#include <MeshDataBaseForTests.hpp>
......@@ -57,6 +58,7 @@ main(int argc, char* argv[])
std::cout.setstate(std::ios::badbit);
SynchronizerManager::create();
RandomEngine::create();
MeshDataManager::create();
DiamondDualConnectivityManager::create();
DiamondDualMeshManager::create();
......@@ -89,6 +91,7 @@ main(int argc, char* argv[])
DiamondDualMeshManager::destroy();
DiamondDualConnectivityManager::destroy();
MeshDataManager::destroy();
RandomEngine::destroy();
SynchronizerManager::destroy();
}
}
......
#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_all.hpp>
#include <utils/Messenger.hpp>
#include <utils/RandomEngine.hpp>
#include <utils/pugs_config.hpp>
// clazy:excludeall=non-pod-global-static
TEST_CASE("RandomEngine", "[random]")
{
SECTION("current state")
{
RandomEngine& random_engine = RandomEngine::instance();
REQUIRE(isSynchronized(random_engine));
}
SECTION("set seed")
{
RandomEngine& random_engine = RandomEngine::instance();
random_engine.setRandomSeed(1402339680);
REQUIRE(isSynchronized(random_engine));
REQUIRE(random_engine.getCurrentSeed() == 1402339680);
}
SECTION("reset seed")
{
RandomEngine& random_engine = RandomEngine::instance();
random_engine.resetRandomSeed();
REQUIRE(isSynchronized(random_engine));
}
SECTION("de-synchronize seeds")
{
RandomEngine& random_engine = RandomEngine::instance();
random_engine.resetRandomSeed();
auto& engine = random_engine.engine();
for (size_t i = 0; i < parallel::rank(); ++i) {
engine();
}
REQUIRE(((parallel::size() == 1) or not isSynchronized(random_engine)));
random_engine.resetRandomSeed();
REQUIRE(isSynchronized(random_engine));
}
}
......@@ -9,6 +9,7 @@
#include <mesh/SynchronizerManager.hpp>
#include <utils/Messenger.hpp>
#include <utils/PETScWrapper.hpp>
#include <utils/RandomEngine.hpp>
#include <utils/SLEPcWrapper.hpp>
#include <MeshDataBaseForTests.hpp>
......@@ -34,6 +35,7 @@ main(int argc, char* argv[])
std::cout.setstate(std::ios::badbit);
SynchronizerManager::create();
RandomEngine::create();
MeshDataManager::create();
DiamondDualConnectivityManager::create();
DiamondDualMeshManager::create();
......@@ -51,6 +53,7 @@ main(int argc, char* argv[])
DiamondDualMeshManager::destroy();
DiamondDualConnectivityManager::destroy();
MeshDataManager::destroy();
RandomEngine::destroy();
SynchronizerManager::destroy();
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment