#1 - Randomization tests green.

This commit is contained in:
Per Malmberg
2019-03-14 22:29:22 +01:00
parent 70f55b8ce6
commit 2a3b8914e5
3 changed files with 67 additions and 76 deletions

View File

@@ -8,81 +8,71 @@
using namespace libcron;
void test(const char* const random_schedule)
{
libcron::CronRandomization cr;
std::unordered_map<int, std::unordered_map<int, int>> results{};
for (int i = 0; i < 10000; ++i)
{
auto res = cr.parse(random_schedule);
REQUIRE(std::get<0>(res));
auto schedule = std::get<1>(res);
INFO("schedule:" << schedule);
Cron<> cron;
REQUIRE(cron.add_schedule("validate schedule", schedule, []() {}));
}
}
SCENARIO("Randomize all the things")
{
const char* full_random = "R(0-59) R(0-59) R(0-23) R(1-31) R(1-12) ?";
Cron<> cron;
const char* random_schedule = "R(0-59) R(0-59) R(0-23) R(1-31) R(1-12) ?";
GIVEN(full_random)
GIVEN(random_schedule)
{
THEN("Only valid schedules generated")
{
libcron::CronRandomization cr;
std::unordered_map<int, std::unordered_map<int, int>> results{};
for (int i = 0; i < 1000; ++i)
{
auto res = cr.parse(full_random);
REQUIRE(std::get<0>(res));
auto schedule = std::get<1>(res);
auto start = schedule.begin();
auto space = std::find(schedule.begin(), schedule.end(), ' ');
for (int section = 0; start != schedule.end() && section < 5; ++section)
{
auto& map = results[section];
auto s = std::string{start, space};
auto value = std::stoi(s);
map[value]++;
start = space + 1;
space = std::find(start, schedule.end(), ' ');
}
REQUIRE(results.size() == 5);
INFO("schedule:" << schedule);
REQUIRE(cron.add_schedule("validate schedule", schedule, []() {}));
}
test(random_schedule);
}
}
}
SCENARIO("Randomize all the things with reverse ranges")
{
// Only generate DayOfMonth up to 28 to prevent failing tests where the month doesn't have more days.
const char* full_random = "R(45-15) R(30-0) R(18-2) R(28-15) 2 ?";
Cron<> cron;
const char* random_schedule = "R(45-15) R(30-0) R(18-2) R(28-15) R(8-3) ?";
GIVEN(full_random)
GIVEN(random_schedule)
{
THEN("Only valid schedules generated")
{
libcron::CronRandomization cr;
std::unordered_map<int, std::unordered_map<int, int>> results{};
for (int i = 0; i < 1000; ++i)
{
auto res = cr.parse(full_random);
REQUIRE(std::get<0>(res));
auto schedule = std::get<1>(res);
auto start = schedule.begin();
auto space = std::find(schedule.begin(), schedule.end(), ' ');
for (int section = 0; start != schedule.end() && section < 5; ++section)
{
auto& map = results[section];
auto s = std::string{start, space};
auto value = std::stoi(s);
map[value]++;
start = space + 1;
space = std::find(start, schedule.end(), ' ');
}
REQUIRE(results.size() == 5);
INFO("schedule:" << schedule);
REQUIRE(cron.add_schedule("validate schedule", schedule, []() {}));
}
test(random_schedule);
}
}
}
SCENARIO("Randomize all the things - day of week")
{
const char* random_schedule = "R(0-59) R(0-59) R(0-23) ? R(1-12) R(0-6)";
GIVEN(random_schedule)
{
THEN("Only valid schedules generated")
{
test(random_schedule);
}
}
}
SCENARIO("Randomize all the things with reverse ranges - day of week")
{
const char* random_schedule = "R(45-15) R(30-0) R(18-2) ? R(8-3) R(4-1)";
GIVEN(random_schedule)
{
THEN("Only valid schedules generated")
{
test(random_schedule);
}
}
}