Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/dsf/mobility/FirstOrderDynamics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ namespace dsf::mobility {
m_travelDTs.push_back({pAgent->distance(),
static_cast<double>(this->time_step() - pAgent->spawnTime())});
--m_nAgents;
++m_nKilledAgents;
if (pAgent->isRandom() && !pAgent->hasArrived(this->time_step())) {
++m_nKilledAgents;
}
auto const& streetId = pAgent->streetId();
if (streetId.has_value()) {
auto const& pStreet{this->graph().edge(streetId.value())};
Expand Down
29 changes: 29 additions & 0 deletions test/mobility/Test_dynamics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,35 @@
}
}
SUBCASE("Evolve") {
GIVEN("A dynamics object with one non-random agent that reaches its destination") {
Street s1{0, std::make_pair(0, 1), 13.8888888889};
Street s2{1, std::make_pair(1, 0), 13.8888888889};
RoadNetwork graph2;
graph2.addStreets(s1, s2);
FirstOrderDynamics dynamics{graph2, false, 69};
dynamics.setWeightFunction(dsf::PathWeight::LENGTH);
dynamics.setSpeedFunction(dsf::SpeedFunction::LINEAR, 0.8);
dynamics.addItinerary(1, 1);
dynamics.updatePaths();
dynamics.addAgent(dynamics.itineraries().at(1), 0);

WHEN("We evolve until the agent reaches the destination") {
dynamics.evolve(false);
dynamics.evolve(false);
dynamics.evolve(false);
dynamics.evolve(false);

THEN("The summary counts the agent as arrived but not killed") {
std::ostringstream oss;
dynamics.summary(oss);
const auto summaryStr = oss.str();

CHECK(summaryStr.find("Number of arrived agents: 1") != std::string::npos);
CHECK(summaryStr.find("Number of killed agents: 0") != std::string::npos);
CHECK(summaryStr.find("Current number of agents: 0") != std::string::npos);
}
}
}
GIVEN("A dynamics object and an itinerary") {
Street s1{0, std::make_pair(0, 1), 2.};
Street s2{1, std::make_pair(1, 2), 5.};
Expand Down Expand Up @@ -593,7 +622,7 @@
false); // Enqueues on street 5, goes into destination nodes and gets killed
THEN("And again, reaching the destination") { CHECK_EQ(dynamics.nAgents(), 0); }
}
}

Check notice

Code scanning / Cppcheck (reported by Codacy)

MISRA 12.3 rule Note test

MISRA 12.3 rule
GIVEN("A dynamics object, an itinerary and an agent") {
Street s1{0, std::make_pair(0, 1), 13.8888888889};
Street s2{1, std::make_pair(1, 0), 13.8888888889};
Expand Down Expand Up @@ -628,7 +657,7 @@
RoadNetwork graph2;
graph2.addStreets(s1, s2);
FirstOrderDynamics dynamics{graph2, false, 69};
dynamics.setWeightFunction(dsf::PathWeight::LENGTH);

Check notice

Code scanning / Cppcheck (reported by Codacy)

MISRA 12.3 rule Note test

MISRA 12.3 rule
dynamics.setSpeedFunction(dsf::SpeedFunction::LINEAR, 0.8);
dynamics.addItinerary(std::make_shared<Itinerary>(0, 1));
dynamics.updatePaths();
Expand Down
Loading