From 58ee1221d47fbcd3b86ad85f26f6eb65579999fa Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 12 May 2025 04:03:25 +0100 Subject: Update test link creation code to use new interface(s) --- application/main.cpp | 17 +++----------- test/test-network.cpp | 64 +++++++++++++++++++++++++++++---------------------- test/test-render.cpp | 23 ++++++++++++------ 3 files changed, 56 insertions(+), 48 deletions(-) diff --git a/application/main.cpp b/application/main.cpp index 3536cf7..2afe2cb 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -62,21 +62,10 @@ public: return terrain->positionAt(n); })); - Link::Ptr l3; - for (std::optional previousDir; const auto [fromPos, toPos] : std::views::pairwise(nodes)) { - const auto links = railLinks->create(gameState->terrain.get(), - { - .fromEnd = {.position = fromPos, .direction = previousDir}, - .toEnd = {.position = toPos, .direction = std::nullopt}, - }); - for (const auto & link : links) { - railLinks->add(terrain.get(), link); - } - l3 = links.back(); - previousDir = links.back()->endAt(toPos)->dir; - } + const auto chain = railLinks->createChain(gameState->terrain.get(), nodes); + railLinks->add(gameState->terrain.get(), chain); - const std::shared_ptr train = world.create(l3, 0); + const std::shared_ptr train = world.create(chain.front(), 0); auto b47 = assets.at("brush-47").dynamicCast(); for (int N = 0; N < 6; N++) { train->create(b47); diff --git a/test/test-network.cpp b/test/test-network.cpp index 05e995e..a5e4f75 100644 --- a/test/test-network.cpp +++ b/test/test-network.cpp @@ -102,18 +102,25 @@ namespace { struct TestNetwork : public EmptyNetwork { TestNetwork() { - // 0 1 2 - // p000 <-> p100 <-> p200 <-> p300 - // \ | / - // \ 5 / - // 3 | 4 - // \-> p110 <-/ - addLink(P000, P100, 1.F, 0); - addLink(P100, P200, 1.F, 0); - addLink(P200, P300, 1.F, 0); - addLink(P000, P110, 2.F, 0); - addLink(P200, P110, 2.F, 0); - addLink(P100, P110, 1.F, 0); + /* 0 1 2 + / -> p000 <-> p100 <-> p200 <-> p300 + / / / \. + / 3 5 4 + / \ / / + / --> p110 <------------- */ + add(nullptr, createChain(nullptr, std::array {P000, P100, P200, P300})); + add(nullptr, + create(nullptr, + {.fromEnd = {.position = P000, .direction = -half_pi}, + .toEnd = {.position = P110, .direction = -half_pi}})); + add(nullptr, + create(nullptr, + {.fromEnd = {.position = P200, .direction = half_pi}, + .toEnd = {.position = P110, .direction = half_pi}})); + add(nullptr, + create(nullptr, + {.fromEnd = {.position = P100, .direction = -half_pi}, + .toEnd = {.position = P110, .direction = half_pi}})); } }; @@ -169,26 +176,27 @@ BOOST_DATA_TEST_CASE(NewNodeAtNew, INVALID_NODES, point) BOOST_AUTO_TEST_CASE(NetworkJoins) { + BOOST_REQUIRE_EQUAL(links.size(), 9); // Ends BOOST_CHECK(links[2]->ends[1].nexts.empty()); // Join 0 <-> 1 BOOST_REQUIRE_EQUAL(links[0]->ends[1].nexts.size(), 2); BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[0].first.lock().get(), links[1].get()); - BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[0].second, 0); - BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[1].first.lock().get(), links[5].get()); - BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[1].second, 0); + BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[0].second, 1); + BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[1].first.lock().get(), links[7].get()); + BOOST_CHECK_EQUAL(links[0]->ends[1].nexts[1].second, 1); BOOST_REQUIRE_EQUAL(links[1]->ends[0].nexts.size(), 2); - BOOST_CHECK_EQUAL(links[1]->ends[0].nexts[0].first.lock().get(), links[0].get()); - BOOST_CHECK_EQUAL(links[1]->ends[0].nexts[0].second, 1); + BOOST_CHECK_EQUAL(links[1]->ends[0].nexts[0].first.lock().get(), links[2].get()); + BOOST_CHECK_EQUAL(links[1]->ends[0].nexts[0].second, 0); BOOST_CHECK_EQUAL(links[1]->ends[0].nexts[1].first.lock().get(), links[5].get()); BOOST_CHECK_EQUAL(links[1]->ends[0].nexts[1].second, 0); // Join 1 <-> 2 BOOST_REQUIRE_EQUAL(links[1]->ends[1].nexts.size(), 2); - BOOST_CHECK_EQUAL(links[1]->ends[1].nexts[0].first.lock().get(), links[2].get()); - BOOST_CHECK_EQUAL(links[1]->ends[1].nexts[0].second, 0); + BOOST_CHECK_EQUAL(links[1]->ends[1].nexts[0].first.lock().get(), links[0].get()); + BOOST_CHECK_EQUAL(links[1]->ends[1].nexts[0].second, 1); BOOST_REQUIRE_EQUAL(links[2]->ends[0].nexts.size(), 2); BOOST_CHECK_EQUAL(links[2]->ends[0].nexts[0].first.lock().get(), links[1].get()); - BOOST_CHECK_EQUAL(links[2]->ends[0].nexts[0].second, 1); + BOOST_CHECK_EQUAL(links[2]->ends[0].nexts[0].second, 0); } BOOST_DATA_TEST_CASE(RouteToNodeNotInNetwork, INVALID_NODES, dest) @@ -234,19 +242,21 @@ BOOST_AUTO_TEST_CASE(RouteToUpStream3to300) { const auto & start = links[3]->ends[1]; auto route = this->routeFromTo(start, P300); - BOOST_REQUIRE_EQUAL(route.size(), 2); - BOOST_CHECK_EQUAL(route[0].first.lock().get(), links[4].get()); - BOOST_CHECK_EQUAL(route[1].first.lock().get(), links[2].get()); + BOOST_REQUIRE_EQUAL(route.size(), 3); + BOOST_CHECK_EQUAL(route[0].first.lock().get(), links[0].get()); + BOOST_CHECK_EQUAL(route[1].first.lock().get(), links[1].get()); + BOOST_CHECK_EQUAL(route[2].first.lock().get(), links[2].get()); } BOOST_AUTO_TEST_CASE(RouteToDownStream3to300) { const auto & start = links[3]->ends[0]; auto route = this->routeFromTo(start, P300); - BOOST_REQUIRE_EQUAL(route.size(), 3); - BOOST_CHECK_EQUAL(route[0].first.lock().get(), links[0].get()); - BOOST_CHECK_EQUAL(route[1].first.lock().get(), links[1].get()); - BOOST_CHECK_EQUAL(route[2].first.lock().get(), links[2].get()); + BOOST_REQUIRE_EQUAL(route.size(), 4); + BOOST_CHECK_EQUAL(route[0].first.lock().get(), links[4].get()); + BOOST_CHECK_EQUAL(route[1].first.lock().get(), links[6].get()); + BOOST_CHECK_EQUAL(route[2].first.lock().get(), links[5].get()); + BOOST_CHECK_EQUAL(route[3].first.lock().get(), links[2].get()); } BOOST_AUTO_TEST_SUITE_END() diff --git a/test/test-render.cpp b/test/test-render.cpp index 90fa894..6869a7d 100644 --- a/test/test-render.cpp +++ b/test/test-render.cpp @@ -69,8 +69,13 @@ namespace { .rot = {0, rotationDistribution(randomdev), 0}}); } } - rail.addLinksBetween({42000, 50000, 1000}, {65000, 50000, 1000}); - rail.addLinksBetween({65000, 50000, 1000}, {75000, 45000, 2000}); + rail.add(nullptr, + rail.createChain(nullptr, + std::array {{ + {42000, 50000, 1000}, + {65000, 50000, 1000}, + {75000, 45000, 2000}, + }})); } void @@ -218,11 +223,15 @@ BOOST_AUTO_TEST_CASE(RailNetwork) public: TestRail() { - net.addLinksBetween({20000, 10000, 0}, {100000, 100000, 0}); - net.addLinksBetween({20000, 10000, 0}, {10000, 10000, 0}); - net.addLinksBetween({10000, 20000, 0}, {100000, 120000, 0}); - net.addLinksBetween({10000, 20000, 0}, {10000, 10000, 0}); - net.addLinksBetween({100000, 100000, 0}, {100000, 120000, 0}); + net.add(nullptr, + net.createChain(nullptr, + std::array {{ + {20000, 10000, 0}, + {100000, 100000, 0}, + {100000, 120000, 0}, + {40000, 40000, 0}, + {10000, 20000, 0}, + }})); } void -- cgit v1.2.3