diff options
Diffstat (limited to 'core/tests/participant.cpp')
| -rw-r--r-- | core/tests/participant.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/core/tests/participant.cpp b/core/tests/participant.cpp new file mode 100644 index 0000000..14fb1ae --- /dev/null +++ b/core/tests/participant.cpp @@ -0,0 +1,113 @@ +#include "turns/core/participant.hpp" +#include "turns/core/disposition.hpp" + +#include <catch2/catch_test_macros.hpp> + +#include <compare> + +#include <glibmm/init.h> + +namespace turns::core::tests +{ + + TEST_CASE("A freshly constructed participant") + { + auto constexpr constructed_name = "Vana Thistletop"; + auto constexpr constructed_priority = 17; + auto constexpr constructed_disposition = disposition::friendly; + auto instance = participant{constructed_name, constructed_priority, constructed_disposition}; + + SECTION("can be created") + { + REQUIRE(participant::create(constructed_name, constructed_priority, constructed_disposition)); + } + + SECTION("allows access to its disposition") + { + SECTION("allowing to get it") + { + REQUIRE(instance.disposition() == constructed_disposition); + } + + SECTION("allowing to get it via a constant object") + { + auto const & cref = instance; + REQUIRE(cref.disposition() == constructed_disposition); + } + + SECTION("allowing to set it") + { + instance.disposition() = disposition::hostile; + REQUIRE(instance.disposition() == disposition::hostile); + } + } + + SECTION("allows access to its name") + { + SECTION("allowing to get it") + { + REQUIRE(instance.name() == constructed_name); + } + + SECTION("allowing to get it via a constant object") + { + auto const & cref = instance; + REQUIRE(cref.name() == constructed_name); + } + + SECTION("allowing to set it") + { + instance.name() = "replaced"; + REQUIRE(instance.name() == "replaced"); + } + } + + SECTION("allows access to its priority") + { + SECTION("allowing to get it") + { + REQUIRE(instance.priority() == constructed_priority); + } + + SECTION("allowing to get it via a constant object") + { + auto const & cref = instance; + REQUIRE(cref.priority() == constructed_priority); + } + + SECTION("allowing to set it") + { + instance.priority() = 4; + REQUIRE(instance.priority() == 4); + } + } + + SECTION("can be compared with another participant") + { + auto equivalent_instance = participant{"Equivalent", constructed_priority, constructed_disposition}; + auto lesser_instance = participant{"Lesser", constructed_priority - 1, constructed_disposition}; + auto greater_instance = participant{"Greater", constructed_priority + 1, constructed_disposition}; + + SECTION("yielding std::partial_ordering::equivalent for itself") + { + REQUIRE((instance <=> equivalent_instance) == std::partial_ordering::equivalent); + } + + SECTION("yielding std::partial_ordering::equivalent for an equivalent participant") + { + REQUIRE((instance <=> equivalent_instance) == std::partial_ordering::equivalent); + } + + SECTION("yielding std::partial_ordering::greater for a lesser participant") + { + REQUIRE((instance <=> lesser_instance) == std::partial_ordering::greater); + } + + SECTION("yielding std::partial_ordering::less for a greater participant") + { + REQUIRE((instance <=> greater_instance) == std::partial_ordering::less); + } + } + } + +} // namespace turns::core::tests
\ No newline at end of file |
