Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
make test pass. The finalization barrier is needed in this case, which is suboptimal.
[simgrid.git] / src / surf / SplitDuplexLinkImpl_test.cpp
index 25abf74..b36ea8a 100644 (file)
@@ -20,9 +20,9 @@ TEST_CASE("SplitDuplexLink: create", "")
     simgrid::s4u::Link* link_down;
     simgrid::s4u::SplitDuplexLink* link;
     REQUIRE_NOTHROW(link = zone->create_split_duplex_link("link", "100GBps"));
-    REQUIRE(simgrid::s4u::SplitDuplexLink::by_name("link") == link);
-    REQUIRE_NOTHROW(link_up = simgrid::s4u::Link::by_name("link_UP"));
-    REQUIRE_NOTHROW(link_down = simgrid::s4u::Link::by_name("link_DOWN"));
+    REQUIRE(e.split_duplex_link_by_name("link") == link);
+    REQUIRE_NOTHROW(link_up = e.link_by_name("link_UP"));
+    REQUIRE_NOTHROW(link_down = e.link_by_name("link_DOWN"));
     REQUIRE(link_up->get_bandwidth() == 100e9);
     REQUIRE(link_down->get_bandwidth() == 100e9);
     REQUIRE(link_up == link->get_link_up());
@@ -35,10 +35,10 @@ TEST_CASE("SplitDuplexLink: create", "")
 TEST_CASE("SplitDuplexLink: sets", "")
 {
   simgrid::s4u::Engine e("test");
-  auto* zone      = simgrid::s4u::create_star_zone("test");
-  auto* link      = zone->create_split_duplex_link("link", 100e6);
-  auto* link_up   = link->get_link_up();
-  auto* link_down = link->get_link_down();
+  auto* zone            = simgrid::s4u::create_star_zone("test");
+  auto* link            = zone->create_split_duplex_link("link", 100e6);
+  auto const* link_up   = link->get_link_up();
+  auto const* link_down = link->get_link_down();
 
   SECTION("bandwidth")
   {
@@ -72,4 +72,27 @@ TEST_CASE("SplitDuplexLink: sets", "")
     REQUIRE(link_up->get_impl()->get_constraint()->get_concurrency_limit() == 3);
     REQUIRE(link_down->get_impl()->get_constraint()->get_concurrency_limit() == 3);
   }
-}
\ No newline at end of file
+
+  SECTION("sharing_policy: invalid")
+  {
+    REQUIRE_THROWS_AS(link->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::WIFI), std::invalid_argument);
+    REQUIRE_THROWS_AS(link->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::SPLITDUPLEX), std::invalid_argument);
+  }
+
+  SECTION("sharing_policy: fatpipe/shared")
+  {
+    for (const auto& policy : {simgrid::s4u::Link::SharingPolicy::FATPIPE, simgrid::s4u::Link::SharingPolicy::SHARED}) {
+      link->set_sharing_policy(policy);
+      REQUIRE(link_up->get_sharing_policy() == policy);
+      REQUIRE(link_down->get_sharing_policy() == policy);
+    }
+  }
+
+  SECTION("sharing_policy: nonlinear")
+  {
+    link->set_sharing_policy(simgrid::s4u::Link::SharingPolicy::NONLINEAR,
+                             [](double c, int /*n*/) -> double { return c; });
+    REQUIRE(link_up->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::NONLINEAR);
+    REQUIRE(link_down->get_sharing_policy() == simgrid::s4u::Link::SharingPolicy::NONLINEAR);
+  }
+}