summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2025-05-12 04:03:25 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2025-05-12 04:03:25 +0100
commit58ee1221d47fbcd3b86ad85f26f6eb65579999fa (patch)
tree112665ad2ef7ad9d7946c52074c11fdff3d993fc
parentAdd network helpers for easily adding a chain of links (diff)
downloadilt-58ee1221d47fbcd3b86ad85f26f6eb65579999fa.tar.bz2
ilt-58ee1221d47fbcd3b86ad85f26f6eb65579999fa.tar.xz
ilt-58ee1221d47fbcd3b86ad85f26f6eb65579999fa.zip
Update test link creation code to use new interface(s)
-rw-r--r--application/main.cpp17
-rw-r--r--test/test-network.cpp64
-rw-r--r--test/test-render.cpp23
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<Angle> 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> train = world.create<Train>(l3, 0);
+ const std::shared_ptr<Train> train = world.create<Train>(chain.front(), 0);
auto b47 = assets.at("brush-47").dynamicCast<RailVehicleClass>();
for (int N = 0; N < 6; N++) {
train->create<RailVehicle>(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<TestLinkS>(P000, P100, 1.F, 0);
- addLink<TestLinkS>(P100, P200, 1.F, 0);
- addLink<TestLinkS>(P200, P300, 1.F, 0);
- addLink<TestLinkS>(P000, P110, 2.F, 0);
- addLink<TestLinkS>(P200, P110, 2.F, 0);
- addLink<TestLinkS>(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<GlobalPosition3D, 3> {{
+ {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<GlobalPosition3D, 5> {{
+ {20000, 10000, 0},
+ {100000, 100000, 0},
+ {100000, 120000, 0},
+ {40000, 40000, 0},
+ {10000, 20000, 0},
+ }}));
}
void