Skip to content

Commit 36bea87

Browse files
committed
Add ZenUnit::RandomNegative<T>() and ZenUnit::RandomPositive<T>()
1 parent c80eab0 commit 36bea87

File tree

2 files changed

+49
-5
lines changed

2 files changed

+49
-5
lines changed

ZenUnitAndMetalMock/ZenUnit.h

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7810,7 +7810,19 @@ or change TEST(TestName) to TESTNXN(TestName, ...), where N can be 1 through 10,
78107810
return randomInteger;
78117811
}
78127812

7813-
template<typename T>
7813+
template<std::signed_integral T>
7814+
T RandomNegative()
7815+
{
7816+
T randomInteger = Random<T>();
7817+
static const T zeroValue{0};
7818+
while (randomInteger >= zeroValue)
7819+
{
7820+
randomInteger = Random<T>();
7821+
}
7822+
return randomInteger;
7823+
}
7824+
7825+
template<std::integral T>
78147826
T RandomNonNegative()
78157827
{
78167828
static_assert(!std::is_same_v<T, std::string>);
@@ -7823,6 +7835,18 @@ or change TEST(TestName) to TESTNXN(TestName, ...), where N can be 1 through 10,
78237835
return randomInteger;
78247836
}
78257837

7838+
template<std::integral T>
7839+
T RandomPositive()
7840+
{
7841+
T randomInteger = Random<T>();
7842+
static const T zeroValue{0};
7843+
while (randomInteger <= zeroValue)
7844+
{
7845+
randomInteger = Random<T>();
7846+
}
7847+
return randomInteger;
7848+
}
7849+
78267850
template<typename T>
78277851
T RandomNon0NotEqualTo(const T& notEqualValue)
78287852
{

ZenUnitUtilsAndAssertionTests/StaticComponents/RandomTests.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ namespace ZenUnit
1616
AFACT(RandomNon0_ReturnsNon0RandomValueBetweenMinAndMaxForTypeT)
1717
AFACT(RandomNon0_TIsEnum_ReturnsRandomEnumBetween1AndEnumMaxValue)
1818

19-
AFACT(RandomNonNegative_ReturnsNonNegative)
19+
AFACT(RandomNegative_ReturnsNegativeInteger)
20+
AFACT(RandomNonNegative_ReturnsNonNegativeInteger)
21+
AFACT(RandomPositive_ReturnsPositiveInteger)
2022

2123
AFACT(RandomNotEqualTo_ReturnsRandomValueBetweenMinAndMaxForTypeTNotEqualToTheExceptValue)
2224

@@ -174,15 +176,33 @@ namespace ZenUnit
174176
SETS_ARE_EQUAL(expectedRandomEnumsReturned, randomEnumsReturned);
175177
}
176178

177-
TEST(RandomNonNegative_ReturnsNonNegative)
179+
TEST(RandomNegative_ReturnsNegativeInteger)
178180
{
179-
const int value = ZenUnit::RandomNonNegative<int>();
180-
IS_GREATER_THAN_OR_EQUAL(value, 0);
181+
const int intValue = ZenUnit::RandomNegative<int>();
182+
IS_LESS_THAN(intValue, 0);
183+
184+
const short shortValue = ZenUnit::RandomNegative<short>();
185+
IS_LESS_THAN(shortValue, 0);
186+
}
187+
188+
TEST(RandomNonNegative_ReturnsNonNegativeInteger)
189+
{
190+
const int intValue = ZenUnit::RandomNonNegative<int>();
191+
IS_GREATER_THAN_OR_EQUAL(intValue, 0);
181192

182193
const unsigned unsignedValue = ZenUnit::RandomNonNegative<unsigned>();
183194
IS_GREATER_THAN_OR_EQUAL(unsignedValue, 0U);
184195
}
185196

197+
TEST(RandomPositive_ReturnsPositiveInteger)
198+
{
199+
const int intValue = ZenUnit::RandomPositive<int>();
200+
IS_GREATER_THAN(intValue, 0);
201+
202+
const unsigned unsignedValue = ZenUnit::RandomPositive<unsigned>();
203+
IS_GREATER_THAN(unsignedValue, 0U);
204+
}
205+
186206
TEST(RandomNotEqualTo_ReturnsRandomValueBetweenMinAndMaxForTypeTNotEqualToTheExceptValue)
187207
{
188208
const char char1 = ZenUnit::Random<char>();

0 commit comments

Comments
 (0)