aboutsummaryrefslogtreecommitdiff
path: root/core/tests/participant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/tests/participant.cpp')
-rw-r--r--core/tests/participant.cpp113
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