mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
140 lines
4.8 KiB
C++
140 lines
4.8 KiB
C++
#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));
|
|
}
|