SL-18837: Unify all llrand_test.cpp in-range tests.

The header file documents that no llrand function should ever return a value
equal to the passed extent, so the one test in llrand_test.cpp that checked
less than or equal to the high end of the range was anomalous.

But changing that to an exclusive range means that we no longer need separate
exclusive range and inclusive range functions. Replace
ensure_in_range_using(), ensure_in_exc_range() and ensure_in_inc_range() with
a grand unified (simplified) ensure_in_range() function.
meow-7.2.2
Nat Goodspeed 2023-10-12 16:55:04 -04:00
parent be5a6e6179
commit f5a34fd074
1 changed files with 18 additions and 25 deletions

View File

@ -31,27 +31,20 @@
#include "../llrand.h"
#include "stringize.h"
template <typename NUMBER, typename HIGHCOMP>
void ensure_in_range_using(const std::string_view& name,
NUMBER value, NUMBER low, NUMBER high,
const std::string_view& compdesc, HIGHCOMP&& highcomp)
// In llrand.h, every function is documented to return less than the high end
// -- specifically, because you can pass a negative extent, they're documented
// never to return a value equal to the extent.
// So that we don't need two different versions of ensure_in_range(), when
// testing extent < 0, negate the return value and the extent before passing
// into ensure_in_range().
template <typename NUMBER>
void ensure_in_range(const std::string_view& name,
NUMBER value, NUMBER low, NUMBER high)
{
auto failmsg{ stringize(name, " >= ", low, " (", value, ')') };
tut::ensure(failmsg, (value >= low));
failmsg = stringize(name, ' ', compdesc, ' ', high, " (", value, ')');
tut::ensure(failmsg, std::forward<HIGHCOMP>(highcomp)(value, high));
}
template <typename NUMBER>
void ensure_in_exc_range(const std::string_view& name, NUMBER value, NUMBER low, NUMBER high)
{
ensure_in_range_using(name, value, low, high, "<", std::less());
}
template <typename NUMBER>
void ensure_in_inc_range(const std::string_view& name, NUMBER value, NUMBER low, NUMBER high)
{
ensure_in_range_using(name, value, low, high, "<=", std::less_equal());
failmsg = stringize(name, " < ", high, " (", value, ')');
tut::ensure(failmsg, (value < high));
}
namespace tut
@ -69,7 +62,7 @@ namespace tut
{
for(S32 ii = 0; ii < 100000; ++ii)
{
ensure_in_exc_range("frand", ll_frand(), 0.0f, 1.0f);
ensure_in_range("frand", ll_frand(), 0.0f, 1.0f);
}
}
@ -78,7 +71,7 @@ namespace tut
{
for(S32 ii = 0; ii < 100000; ++ii)
{
ensure_in_exc_range("drand", ll_drand(), 0.0, 1.0);
ensure_in_range("drand", ll_drand(), 0.0, 1.0);
}
}
@ -87,7 +80,7 @@ namespace tut
{
for(S32 ii = 0; ii < 100000; ++ii)
{
ensure_in_inc_range("frand(2.0f)", ll_frand(2.0f) - 1.0f, -1.0f, 1.0f);
ensure_in_range("frand(2.0f)", ll_frand(2.0f) - 1.0f, -1.0f, 1.0f);
}
}
@ -98,7 +91,7 @@ namespace tut
{
// Negate the result so we don't have to allow a templated low-end
// comparison as well.
ensure_in_exc_range("-frand(-7.0)", -ll_frand(-7.0), 0.0f, 7.0f);
ensure_in_range("-frand(-7.0)", -ll_frand(-7.0), 0.0f, 7.0f);
}
}
@ -107,7 +100,7 @@ namespace tut
{
for(S32 ii = 0; ii < 100000; ++ii)
{
ensure_in_exc_range("-drand(-2.0)", -ll_drand(-2.0), 0.0, 2.0);
ensure_in_range("-drand(-2.0)", -ll_drand(-2.0), 0.0, 2.0);
}
}
@ -116,7 +109,7 @@ namespace tut
{
for(S32 ii = 0; ii < 100000; ++ii)
{
ensure_in_exc_range("rand(100)", ll_rand(100), 0, 100);
ensure_in_range("rand(100)", ll_rand(100), 0, 100);
}
}
@ -125,7 +118,7 @@ namespace tut
{
for(S32 ii = 0; ii < 100000; ++ii)
{
ensure_in_exc_range("-rand(-127)", -ll_rand(-127), 0, 127);
ensure_in_range("-rand(-127)", -ll_rand(-127), 0, 127);
}
}
}