Skip to content

Commit d66c1e9

Browse files
committed
Random: simplify seeding for random seed (=0)
1 parent a4a4283 commit d66c1e9

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

src/htm/utils/Random.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,19 @@ bool Random::operator==(const Random &o) const {
3232
gen == o.gen;
3333
}
3434

35-
bool static_gen_seeded = false; //used only for seeding seed if 0/auto is passed for seed
36-
std::mt19937 static_gen;
35+
std::random_device rd; //HW RNG, undeterministic, platform dependant. Use only for seeding rng if random seed wanted (seed=0)
3736

3837
Random::Random(UInt64 seed) {
3938
if (seed == 0) {
40-
if( !static_gen_seeded ) {
41-
#if NDEBUG
42-
unsigned int static_seed = (unsigned int)std::chrono::system_clock::now().time_since_epoch().count();
43-
#else
44-
unsigned int static_seed = DEBUG_RANDOM_SEED;
45-
#endif
46-
static_gen.seed( static_seed );
47-
static_gen_seeded = true;
39+
const unsigned int static_seed = rd();
40+
std::mt19937 static_gen(static_seed);
4841
NTA_INFO << "Random seed: " << static_seed;
49-
}
42+
5043
seed_ = static_gen(); //generate random value from HW RNG
5144
} else {
5245
seed_ = seed;
5346
}
54-
// if seed is zero at this point, there is a logic error.
55-
NTA_CHECK(seed_ != 0);
47+
NTA_CHECK(seed_ != 0) << "Random: if seed is zero at this point, there is a logic error";
5648
gen.seed(static_cast<unsigned int>(seed_)); //seed the generator
5749
steps_ = 0;
5850
}

src/test/unit/utils/RandomTest.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,10 @@ using namespace std;
3737
TEST(RandomTest, Seeding) {
3838
{
3939
Random r;
40+
ASSERT_TRUE(r.getSeed() != 0) << "Should initialize with randomized seed";
41+
4042
auto x = r.getUInt32();
41-
ASSERT_TRUE(x != 0);
43+
ASSERT_NE(x, 0u);
4244
}
4345

4446
// test getSeed
@@ -64,6 +66,10 @@ TEST(RandomTest, Seeding) {
6466
ASSERT_EQ(r(), 419326371u);
6567
}
6668

69+
for(int i=0; i< 10; i++) {
70+
ASSERT_NE(Random(0).getSeed(), Random(0).getSeed()) << "Randomly seeded generators should not be identical!";
71+
}
72+
6773
}
6874

6975

0 commit comments

Comments
 (0)