Skip to content

Commit 015af2a

Browse files
committed
RandomGenerator: Fix except = start and except = end edge cases
1 parent 8234196 commit 015af2a

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/engine/internal/randomgenerator.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,12 @@ long RandomGenerator::randintExcept(long start, long end, long except) const
5757
return end;
5858
else
5959
return start;
60-
}
61-
62-
if (randint(0, 1) == 0) {
63-
std::uniform_int_distribution<long> distribution(start, except - 1);
64-
return distribution(*m_generator);
65-
} else {
66-
std::uniform_int_distribution<long> distribution(except + 1, end);
67-
return distribution(*m_generator);
68-
}
60+
} else if (except == start)
61+
return randint(except + 1, end);
62+
else if (except == end)
63+
return randint(start, except - 1);
64+
else if (randint(0, 1) == 0)
65+
return randint(start, except - 1);
66+
else
67+
return randint(except + 1, end);
6968
}

test/randomgenerator/randomgenerator_test.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,16 @@ TEST(RandomGeneratorTest, RandIntExcept)
9696
num = rng->randintExcept(1, 2, 2);
9797
ASSERT_EQ(num, 1);
9898
}
99+
100+
for (int i = 0; i < 25; i++) {
101+
num = rng->randintExcept(1, 5, 1);
102+
ASSERT_GE(num, 2);
103+
ASSERT_LE(num, 5);
104+
}
105+
106+
for (int i = 0; i < 25; i++) {
107+
num = rng->randintExcept(1, 5, 5);
108+
ASSERT_GE(num, 1);
109+
ASSERT_LE(num, 4);
110+
}
99111
}

0 commit comments

Comments
 (0)