From 3262b3a337759439f3049b9299be12baf8420750 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 15 Jul 2024 22:26:12 +0200 Subject: turns: add more tests --- domain/tests/turn_order.cpp | 141 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 domain/tests/turn_order.cpp (limited to 'domain/tests/turn_order.cpp') diff --git a/domain/tests/turn_order.cpp b/domain/tests/turn_order.cpp new file mode 100644 index 0000000..7172ffc --- /dev/null +++ b/domain/tests/turn_order.cpp @@ -0,0 +1,141 @@ +#include "turns/domain/turn_order.hpp" + +#include "turns/domain/participant.hpp" + +#include + +#include + +#include + +namespace turns::domain::tests +{ + + TEST_CASE("A freshly constructed turn order") + { + auto instance = turn_order{}; + + SECTION("can be created") + { + REQUIRE(turn_order::create()); + } + + SECTION("has 0 items") + { + REQUIRE(instance.get_n_items() == 0); + } + + SECTION("accepts a new participant in form of a refptr") + { + instance.append(participant::create("Honey Bunches of Oats", 12)); + REQUIRE(instance.get_n_items() == 1); + } + + SECTION("accepts a new participant in form of components") + { + instance.append("River along the Field", 14); + REQUIRE(instance.get_n_items() == 1); + } + + SECTION("does nothing when trying to remove an item by refptr if no items were added beforehand") + { + instance.remove(participant::create("Patch in the Forest", 3)); + REQUIRE(instance.get_n_items() == 0); + } + + SECTION("does nothing when trying to remove an item by index if no items were added beforehand") + { + instance.remove(5); + REQUIRE(instance.get_n_items() == 0); + } + + SECTION("allows the removal of an item by refptr if the same item was added beforehand") + { + auto item = participant::create("Blank Canvas", 23); + instance.append(item); + instance.remove(item); + REQUIRE(instance.get_n_items() == 0); + } + + SECTION("does nothing when trying to remove an item by refptr that was not added beforehand") + { + auto item = participant::create("Blank Canvas", 23); + instance.append(item); + instance.remove(participant::create("Spell of Rain", 6)); + REQUIRE(instance.get_n_items() == 1); + } + + SECTION("automatically sorts appended refptrs in descending order of priority") + { + SECTION("when appending the higher one last") + { + instance.append(participant::create("Snow on the Field", 2)); + instance.append(participant::create("Bees behind the Cottage", 8)); + REQUIRE(instance.get_item(0)->get_name() == "Bees behind the Cottage"); + } + + SECTION("when appending the higher one first") + { + instance.append(participant::create("Bees behind the Cottage", 8)); + instance.append(participant::create("Snow on the Field", 2)); + REQUIRE(instance.get_item(0)->get_name() == "Bees behind the Cottage"); + } + + SECTION("keeping the insertion order when appending items with equal priority") + { + instance.append(participant::create("Snow on the Field", 8)); + instance.append(participant::create("Bees behind the Cottage", 8)); + REQUIRE(instance.get_item(0)->get_name() == "Snow on the Field"); + } + } + + SECTION("automatically sorts elements appended by components in descending order of priority") + { + SECTION("when appending the higher one last") + { + instance.append("Tree Blossom", 6); + instance.append("Fish in the River", 12); + REQUIRE(instance.get_item(0)->get_name() == "Fish in the River"); + } + + SECTION("when appending the higher one first") + { + instance.append("Fish in the River", 12); + instance.append("Tree Blossom", 6); + REQUIRE(instance.get_item(0)->get_name() == "Fish in the River"); + } + + SECTION("keeping the insertion order when appending items with equal priority") + { + instance.append("Fish in the River", 6); + instance.append("Tree Blossom", 6); + REQUIRE(instance.get_item(0)->get_name() == "Fish in the River"); + } + } + + SECTION("does not accept the same item twice by the same refptr") + { + auto item = participant::create("Angelic Berry", 9); + instance.append(item); + instance.append(item); + REQUIRE(instance.get_n_items() == 1); + } + + SECTION("does not accept the same item twice by different refptrs") + { + auto item_one = participant::create("Misty Meadow", 14.2); + auto item_two = participant::create("Misty Meadow", 14.2); + instance.append(item_one); + instance.append(item_two); + REQUIRE(instance.get_n_items() == 1); + } + + SECTION("does not accept the same item twice by components") + { + instance.append("Frozen Apple Tree", 2.1); + instance.append("Frozen Apple Tree", 2.1); + REQUIRE(instance.get_n_items() == 1); + } + } + +} // namespace turns::domain::tests \ No newline at end of file -- cgit v1.2.3