mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-08-12 04:11:06 -05:00
Add duration modifier tests
This commit is contained in:
139
tests/test-duration-modifier.cpp
Normal file
139
tests/test-duration-modifier.cpp
Normal file
@@ -0,0 +1,139 @@
|
||||
#include "catch.hpp"
|
||||
|
||||
#include <duration-modifier.hpp>
|
||||
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
TEST_CASE("Test modifier NONE", "[duration-modifier]")
|
||||
{
|
||||
advss::DurationModifier durationModifier;
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
|
||||
// Duration should not affect the condition outcome with Type::NONE
|
||||
durationModifier.SetDuration(1.0);
|
||||
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
}
|
||||
|
||||
TEST_CASE("Test modifier MORE", "[duration-modifier]")
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
advss::DurationModifier durationModifier;
|
||||
durationModifier.SetModifier(advss::DurationModifier::Type::MORE);
|
||||
durationModifier.SetDuration(.1);
|
||||
durationModifier.ResetDuration();
|
||||
|
||||
// Should only return true after 100ms have passed
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
std::this_thread::sleep_for(50ms);
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
std::this_thread::sleep_for(100ms);
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
|
||||
// Should return false for at 100ms as soon as "false" is passed
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
std::this_thread::sleep_for(50ms);
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
std::this_thread::sleep_for(100ms);
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
}
|
||||
|
||||
TEST_CASE("Test modifier EQUAL", "[duration-modifier]")
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
advss::DurationModifier durationModifier;
|
||||
durationModifier.SetModifier(advss::DurationModifier::Type::EQUAL);
|
||||
durationModifier.SetDuration(.1);
|
||||
durationModifier.ResetDuration();
|
||||
|
||||
// Return false value if duration is not reached
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
|
||||
std::this_thread::sleep_for(50ms);
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
|
||||
// Should return true only once after duration
|
||||
std::this_thread::sleep_for(100ms);
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
|
||||
// Should reset to original behavior as soon as false is passed after
|
||||
// duration was reached
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
}
|
||||
|
||||
TEST_CASE("Test modifier LESS", "[duration-modifier]")
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
advss::DurationModifier durationModifier;
|
||||
durationModifier.SetModifier(advss::DurationModifier::Type::LESS);
|
||||
durationModifier.SetDuration(.1);
|
||||
durationModifier.ResetDuration();
|
||||
|
||||
// Return input value if duration is not reached
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
|
||||
std::this_thread::sleep_for(50ms);
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
|
||||
// Should return false after duration is reached even if true is passed
|
||||
std::this_thread::sleep_for(100ms);
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(true));
|
||||
|
||||
// Should reset to original behavior as soon as false is passed after
|
||||
// duration was reached
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
}
|
||||
|
||||
TEST_CASE("Test modifier WITHIN", "[duration-modifier]")
|
||||
{
|
||||
using namespace std::chrono_literals;
|
||||
advss::DurationModifier durationModifier;
|
||||
durationModifier.SetModifier(advss::DurationModifier::Type::WITHIN);
|
||||
durationModifier.SetDuration(.1);
|
||||
durationModifier.ResetDuration();
|
||||
|
||||
// Return false value if true was not passed in given time frame
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
|
||||
// Passing true should always return true
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
|
||||
// Passing true or false when true was passed at least once in the given
|
||||
// time frame should always return true
|
||||
std::this_thread::sleep_for(50ms);
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(false));
|
||||
|
||||
// Should reset to original behavior if true was not passed within the
|
||||
// given time frame
|
||||
std::this_thread::sleep_for(150ms);
|
||||
REQUIRE_FALSE(
|
||||
durationModifier.CheckConditionWithDurationModifier(false));
|
||||
REQUIRE(durationModifier.CheckConditionWithDurationModifier(true));
|
||||
}
|
||||
Reference in New Issue
Block a user