X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/edb58d998573dba62c74537dcacce8b4b9a7df80..1fc1cd99f7f9f56c732dcaf07d8c9afed2560e85:/src/mc/explo/udpor/EventSet_test.cpp diff --git a/src/mc/explo/udpor/EventSet_test.cpp b/src/mc/explo/udpor/EventSet_test.cpp new file mode 100644 index 0000000000..f5e363daf4 --- /dev/null +++ b/src/mc/explo/udpor/EventSet_test.cpp @@ -0,0 +1,192 @@ +/* Copyright (c) 2017-2023. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "src/3rd-party/catch.hpp" +#include "src/mc/explo/udpor/EventSet.hpp" +#include "src/mc/explo/udpor/UnfoldingEvent.hpp" + +using namespace simgrid::mc::udpor; + +TEST_CASE("simgrid::mc::udpor::EventSet: Initial conditions when creating sets") +{ + SECTION("Initialization with no elements") + { + SECTION("Default initializer") + { + EventSet event_set; + REQUIRE(event_set.size() == 0); + REQUIRE(event_set.empty()); + } + + SECTION("Set initializer") + { + EventSet event_set({}); + REQUIRE(event_set.size() == 0); + REQUIRE(event_set.empty()); + } + + SECTION("List initialization") + { + EventSet event_set{}; + REQUIRE(event_set.size() == 0); + REQUIRE(event_set.empty()); + } + } + + SECTION("Initialization with one or more elements") + { + UnfoldingEvent e1, e2, e3; + + SECTION("Set initializer") + { + EventSet event_set({&e1, &e2, &e3}); + REQUIRE(event_set.size() == 3); + REQUIRE(event_set.contains(&e1)); + REQUIRE(event_set.contains(&e2)); + REQUIRE(event_set.contains(&e3)); + REQUIRE_FALSE(event_set.empty()); + } + + SECTION("List initialization") + { + UnfoldingEvent e1, e2, e3; + EventSet event_set{&e1, &e2, &e3}; + REQUIRE(event_set.size() == 3); + REQUIRE(event_set.contains(&e1)); + REQUIRE(event_set.contains(&e2)); + REQUIRE(event_set.contains(&e3)); + REQUIRE_FALSE(event_set.empty()); + } + } +} + +TEST_CASE("simgrid::mc::udpor::EventSet: Insertions") +{ + EventSet event_set; + UnfoldingEvent e1, e2, e3; + + SECTION("Inserting unique elements") + { + event_set.insert(&e1); + REQUIRE(event_set.size() == 1); + REQUIRE(event_set.contains(&e1)); + REQUIRE_FALSE(event_set.empty()); + + event_set.insert(&e2); + REQUIRE(event_set.size() == 2); + REQUIRE(event_set.contains(&e2)); + REQUIRE_FALSE(event_set.empty()); + + SECTION("Check contains inserted elements") + { + REQUIRE(event_set.contains(&e1)); + REQUIRE(event_set.contains(&e2)); + REQUIRE_FALSE(event_set.contains(&e3)); + } + } + + SECTION("Inserting duplicate elements") + { + event_set.insert(&e1); + REQUIRE(event_set.size() == 1); + REQUIRE(event_set.contains(&e1)); + REQUIRE_FALSE(event_set.empty()); + + event_set.insert(&e1); + REQUIRE(event_set.size() == 1); + REQUIRE(event_set.contains(&e1)); + REQUIRE_FALSE(event_set.empty()); + + SECTION("Check contains inserted elements") + { + REQUIRE(event_set.contains(&e1)); + REQUIRE_FALSE(event_set.contains(&e2)); + REQUIRE_FALSE(event_set.contains(&e3)); + } + } +} + +TEST_CASE("simgrid::mc::udpor::EventSet: Deletions") +{ + UnfoldingEvent e1, e2, e3, e4; + EventSet event_set({&e1, &e2, &e3}); + + SECTION("Remove an element already present") + { + REQUIRE(event_set.contains(&e1)); + + // event_set = {e2, e3} + event_set.remove(&e1); + + // Check that + // 1. the size decreases by exactly 1 + // 2. the set remains unempty + // 3. the other elements are still contained in the set + REQUIRE(event_set.size() == 2); + REQUIRE_FALSE(event_set.contains(&e1)); + REQUIRE(event_set.contains(&e2)); + REQUIRE(event_set.contains(&e3)); + REQUIRE_FALSE(event_set.empty()); + + SECTION("Remove a single element more than once") + { + // event_set = {e2, e3} + event_set.remove(&e1); + REQUIRE(event_set.size() == 2); + REQUIRE_FALSE(event_set.contains(&e1)); + REQUIRE(event_set.contains(&e2)); + REQUIRE(event_set.contains(&e3)); + REQUIRE_FALSE(event_set.empty()); + } + + SECTION("Remove more than one element") + { + // event_set = {e3} + event_set.remove(&e2); + + REQUIRE(event_set.size() == 1); + REQUIRE_FALSE(event_set.contains(&e1)); + REQUIRE_FALSE(event_set.contains(&e2)); + REQUIRE(event_set.contains(&e3)); + REQUIRE_FALSE(event_set.empty()); + + // event_set = {} + event_set.remove(&e3); + + REQUIRE(event_set.size() == 0); + REQUIRE_FALSE(event_set.contains(&e1)); + REQUIRE_FALSE(event_set.contains(&e2)); + REQUIRE_FALSE(event_set.contains(&e3)); + REQUIRE(event_set.empty()); + } + } + + SECTION("Remove an element absent from the set") + { + REQUIRE_FALSE(event_set.contains(&e4)); + + // event_set = {e1, e2, e3} + event_set.remove(&e4); + REQUIRE(event_set.size() == 3); + REQUIRE(event_set.contains(&e1)); + REQUIRE(event_set.contains(&e2)); + REQUIRE(event_set.contains(&e3)); + + // Ensure e4 isn't somehow added + REQUIRE_FALSE(event_set.contains(&e4)); + REQUIRE_FALSE(event_set.empty()); + } +} + +TEST_CASE("simgrid::mc::udpor::EventSet: Set Equality") {} + +TEST_CASE("simgrid::mc::udpor::EventSet: Unions and Set Difference") +{ + UnfoldingEvent e1, e2, e3, e4; + + EventSet A{&e1, &e2, &e3}, B{&e2, &e3, &e4}, C{&e2, &e3, &e4}; + + SECTION("Self-union (A union A)") {} +} \ No newline at end of file