Skip to content

Commit 6e5f551

Browse files
authored
Merge pull request #5898 from hjmjohnson/convert-itkmersennetwisterrandomvariategeneratortest-to-gtest
ENH: Convert itkMersenneTwisterRandomVariateGeneratorTest to GTest
2 parents 0d0ecd7 + 7fd82e0 commit 6e5f551

3 files changed

Lines changed: 81 additions & 133 deletions

File tree

Modules/Core/Common/test/CMakeLists.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ set(
8181
itkSinRegularizedHeavisideStepFunctionTest1.cxx
8282
itkPixelAccessTest.cxx
8383
itkPointGeometryTest.cxx
84-
itkMersenneTwisterRandomVariateGeneratorTest.cxx
8584
itkNumberToStringTest.cxx
8685
itkTimeProbeTest.cxx
8786
itkTimeProbeTest2.cxx
@@ -394,12 +393,6 @@ itk_add_test(
394393
ITKCommon1TestDriver
395394
itkFixedArrayTest2
396395
)
397-
itk_add_test(
398-
NAME itkMersenneTwisterRandomVariateGeneratorTest
399-
COMMAND
400-
ITKCommon1TestDriver
401-
itkMersenneTwisterRandomVariateGeneratorTest
402-
)
403396
itk_add_test(
404397
NAME itkBSplineInterpolationWeightFunctionTest
405398
COMMAND

Modules/Core/Common/test/itkMersenneTwisterRandomVariateGeneratorGTest.cxx

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@
1616
*
1717
*=========================================================================*/
1818

19+
#ifndef ITK_FUTURE_LEGACY_REMOVE
20+
# define ITK_LEGACY_SILENT
21+
#endif
22+
1923
// First include the header file to be tested:
2024
#include "itkMersenneTwisterRandomVariateGenerator.h"
21-
#include <gtest/gtest.h>
25+
#include "itkGTest.h"
26+
#include "itkMath.h"
2227
#include <random> // For mt19937.
2328

2429
// The class to be tested.
@@ -100,3 +105,78 @@ TEST(MersenneTwisterRandomVariateGenerator, ResetNextSeed)
100105
MersenneTwisterRandomVariateGenerator::ResetNextSeed();
101106
EXPECT_EQ(MersenneTwisterRandomVariateGenerator::GetNextSeed(), seed);
102107
}
108+
109+
110+
TEST(MersenneTwisterRandomVariateGenerator, BasicObjectMethods)
111+
{
112+
auto twister = MersenneTwisterRandomVariateGenerator::New();
113+
ITK_GTEST_EXERCISE_BASIC_OBJECT_METHODS(twister, MersenneTwisterRandomVariateGenerator, RandomVariateGeneratorBase);
114+
}
115+
116+
117+
TEST(MersenneTwisterRandomVariateGenerator, SingletonSeedAndKnownSequence)
118+
{
119+
using Twister = MersenneTwisterRandomVariateGenerator;
120+
constexpr Twister::IntegerType seed{ 1234 };
121+
122+
Twister::GetInstance()->SetSeed(seed);
123+
EXPECT_EQ(Twister::GetInstance()->GetSeed(), seed);
124+
125+
auto twister = Twister::New();
126+
127+
// New instance gets seed = singleton's seed + 1
128+
EXPECT_EQ(Twister::GetInstance()->GetSeed() + 1, twister->GetSeed());
129+
130+
// Sync seeds and verify same sequence
131+
twister->SetSeed(Twister::GetInstance()->GetSeed());
132+
for (int i = 0; i < 200; ++i)
133+
{
134+
EXPECT_EQ(Twister::GetInstance()->GetIntegerVariate(), twister->GetIntegerVariate());
135+
}
136+
137+
// Check known sequence of values
138+
constexpr Twister::IntegerType expected[5]{ static_cast<Twister::IntegerType>(3294740812u),
139+
static_cast<Twister::IntegerType>(4175194053u),
140+
static_cast<Twister::IntegerType>(3041332341u),
141+
static_cast<Twister::IntegerType>(199851601u),
142+
static_cast<Twister::IntegerType>(3422518480u) };
143+
for (const auto i : expected)
144+
{
145+
EXPECT_EQ(twister->GetIntegerVariate(), i);
146+
}
147+
}
148+
149+
150+
TEST(MersenneTwisterRandomVariateGenerator, NormalVariateStatistics)
151+
{
152+
auto twister = MersenneTwisterRandomVariateGenerator::New();
153+
154+
double sum = 0.0;
155+
double sum2 = 0.0;
156+
constexpr int count{ 500000 };
157+
for (int i = 0; i < count; ++i)
158+
{
159+
const double v = twister->GetNormalVariate();
160+
sum += v;
161+
sum2 += v * v;
162+
}
163+
const double mean = sum / static_cast<double>(count);
164+
const double variance = sum2 / static_cast<double>(count) - mean * mean;
165+
EXPECT_NEAR(mean, 0.0, 0.01);
166+
EXPECT_NEAR(variance, 1.0, 0.01);
167+
}
168+
169+
170+
#ifndef ITK_FUTURE_LEGACY_REMOVE
171+
TEST(MersenneTwisterRandomVariateGenerator, LegacyInitializeEqualSetSeed)
172+
{
173+
auto twister = MersenneTwisterRandomVariateGenerator::New();
174+
175+
twister->Initialize();
176+
twister->SetSeed(1234);
177+
const MersenneTwisterRandomVariateGenerator::IntegerType withSetSeed = twister->GetIntegerVariate();
178+
twister->Initialize(1234);
179+
const MersenneTwisterRandomVariateGenerator::IntegerType withInitialize = twister->GetIntegerVariate();
180+
EXPECT_EQ(withSetSeed, withInitialize);
181+
}
182+
#endif

Modules/Core/Common/test/itkMersenneTwisterRandomVariateGeneratorTest.cxx

Lines changed: 0 additions & 125 deletions
This file was deleted.

0 commit comments

Comments
 (0)