[routing] Fixed RouteSegment params calculation. #2868
No reviewers
Labels
No labels
Accessibility
Accessibility
Address
Address
Android
Android
Android Auto
Android Auto
Android Automotive (AAOS)
Android Automotive (AAOS)
API
API
AppGallery
AppGallery
AppStore
AppStore
Battery and Performance
Battery and Performance
Blocker
Blocker
Bookmarks and Tracks
Bookmarks and Tracks
Borders
Borders
Bug
Bug
Build
Build
CarPlay
CarPlay
Classificator
Classificator
Community
Community
Core
Core
CrashReports
CrashReports
Cycling
Cycling
Desktop
Desktop
DevEx
DevEx
DevOps
DevOps
dev_sandbox
dev_sandbox
Directions
Directions
Documentation
Documentation
Downloader
Downloader
Drape
Drape
Driving
Driving
Duplicate
Duplicate
Editor
Editor
Elevation
Elevation
Enhancement
Enhancement
Epic
Epic
External Map Datasets
External Map Datasets
F-Droid
F-Droid
Fonts
Fonts
Frequently User Reported
Frequently User Reported
Fund
Fund
Generator
Generator
Good first issue
Good first issue
Google Play
Google Play
GPS
GPS
GSoC
GSoC
iCloud
iCloud
Icons
Icons
iOS
iOS
Legal
Legal
Linux Desktop
Linux Desktop
Linux packaging
Linux packaging
Linux Phone
Linux Phone
Mac OS
Mac OS
Map Data
Map Data
Metro
Metro
Navigation
Navigation
Need Feedback
Need Feedback
Night Mode
Night Mode
NLnet 2024-06-281
NLnet 2024-06-281
No Feature Parity
No Feature Parity
Opening Hours
Opening Hours
Outdoors
Outdoors
POI Info
POI Info
Privacy
Privacy
Public Transport
Public Transport
Raw Idea
Raw Idea
Refactoring
Refactoring
Regional
Regional
Regression
Regression
Releases
Releases
RoboTest
RoboTest
Route Planning
Route Planning
Routing
Routing
Ruler
Ruler
Search
Search
Security
Security
Styles
Styles
Tests
Tests
Track Recording
Track Recording
Translations
Translations
TTS
TTS
UI
UI
UX
UX
Walk Navigation
Walk Navigation
Watches
Watches
Web
Web
Wikipedia
Wikipedia
Windows
Windows
Won't fix
Won't fix
World Map
World Map
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference: organicmaps/organicmaps-tmp#2868
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "vng-fix"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
CC @AntonM030481
Running route_tests.cpp::FinshRouteOnSomeDistanceToTheFinishPointTest
TID(1) ASSERT FAILED
routing/routing_helpers.cpp:26
CHECK(times.size() == routeSegments.size()) 6 5
routing_tests: /home/runner/work/organicmaps/organicmaps/routing/routing_helpers.cpp:26: void routing::FillSegmentInfo(const vector &, vectorrouting::RouteSegment &): Assertion `false' failed.
Aborted (core dumped)
2022-06-29 10:49:42,613 coding_tests --data_path=./data --user_resource_path=./data
2022-06-29 10:49:42,615 Pid: 18309
Как-то много правок. Как будем тестировать?
Почему закомменчено?
коммент в (), куда копать если свалится?
Будет unused warning в релизе. #ifdef DEBUG? Или в ассерт вставить loadedSegments.front() ?
@ -42,2 +41,3 @@
return kImpossibleDrivingFactor;
// impossible driving factor
return 1.0E4;
}
С константой же было норм. Зачем убрал?
Зачем убирать именованные переменные? Они же constexpr, компилятор сам подставит и будет оптимально.
@ -106,2 +106,4 @@
virtual void Load(uint32_t featureId, RoadGeometry & road) = 0;
/// Used in client-app only for the final route preparation.
virtual SpeedInUnits GetSavedMaxspeed(uint32_t featureId, bool forward);
= 0?
Это обязательно в разных классах делать идентичные методы? Можно запутаться.
Что по-русски хотел сказать? Я ничего не понял. flase => false тут и ниже.
Чтобы меньше памяти занимала структура?
Потому что валится тут.
Я так понимаю, @AntonM030481 расставлял ассерты по "наитию", чтобы понять алгоритмы. Но тут это не работает.
Здесь строки вылета достаточно, и какие дополнительные коменты не имеют смысла. Копать везде :)
@ -42,2 +41,3 @@
return kImpossibleDrivingFactor;
// impossible driving factor
return 1.0E4;
}
Потому что она не несет никакой смысловой нагрузки. Лучше бы развернутое пояснение, тебе стало понятнее от "kTimePenalty"?
@ -106,2 +106,4 @@
virtual void Load(uint32_t featureId, RoadGeometry & road) = 0;
/// Used in client-app only for the final route preparation.
virtual SpeedInUnits GetSavedMaxspeed(uint32_t featureId, bool forward);
много добавлять лишних заглушек
Потом один вызывает второй, и все логично
prevWeight - время когда юзер будет в конце from (to)
Хотя этот давай попробуем оставить, я не воспроизвожу сейчас, но вылетал например около недели назад
Тогда уже и точка в конце)
Если условие не выполняется, это баг, надо искать причину и фиксить, а не комментить.
Я не уверен, что тут нет баги в самом условии. Оно никак не проверяет, что выполняется потом.
Сейчас CarEstimator::CalcSegment() используется только в CarEstimator::CalcSegmentWeight()
может, отдельный метод вообще не нужен?
@ -106,2 +106,4 @@
virtual void Load(uint32_t featureId, RoadGeometry & road) = 0;
/// Used in client-app only for the final route preparation.
virtual SpeedInUnits GetSavedMaxspeed(uint32_t featureId, bool forward);
Я так и не понял, почему от дополнительного = 0 класс становится абстрактным и не хочет инстанцироваться. Почему для Load() все ОК?
@ -106,2 +106,4 @@
virtual void Load(uint32_t featureId, RoadGeometry & road) = 0;
/// Used in client-app only for the final route preparation.
virtual SpeedInUnits GetSavedMaxspeed(uint32_t featureId, bool forward);
Load нужен во всех производных, GetSavedMaxspeed достаточно только в одной (по крайней мере пока)
@ -1559,3 +1560,4 @@
for (size_t i = 0; i <= segsCount; ++i)
junctions.emplace_back(starter.GetRouteJunction(segments, i).ToPointWithAltitude());
IndexRoadGraph roadGraph(starter, segments, junctions, m_dataSource);
может
geometry::PointWithAltitude LatLonWithAltitude::ToPointWithAltitude()
превратить в
operator geometry::PointWithAltitude()
?
тут вообще больше не нужен m_maxSpeed.
У меня это все перестало вылетать после фикса
7f23b24c5e/routing/car_directions.cpp (L105)
ну давай попробуем
@vng оставляем как есть?
Running bicycle_turn_test.cpp::RussiaMoscowSevTushinoParkBicycleOnePointOnewayRoadTurnTest
Avoid next roads: RoutingOptions: {}
routing section for Russia_Moscow loaded in 1.00523 seconds
Routing in mode: Joints
Route build time: 0 ms
TID(1) ASSERT FAILED
routing/directions_engine.cpp:217
CHECK(m_adjacentEdges.emplace(segmentRange, move(adjacentEdges)).second)
Assertion failed: (false), function FillPathSegmentsAndAdjacentEdgesMap, file directions_engine.cpp, line 217.
Data 220515, 220613 - the same.
assert in AsyncGuiThreadTestWithRoutingSession_TestRouteRebuildingMovingAway
Remove 1st element
ed7bae9081/routing/routing_tests/routing_session_test.cpp (L41)
todo?
@ -42,0 +41,4 @@
std::unique_ptr<TransitInfo> WorldGraph::GetTransitInfo(Segment const &)
{
return nullptr;
}
Чисто виртуальные методы были нагляднее и более безопасные. Чем пустые значения лучше?
Я позапускал интеграционные тесты, тут мой believe откатывется назад и ставится todo.
@ -42,0 +41,4 @@
std::unique_ptr<TransitInfo> WorldGraph::GetTransitInfo(Segment const &)
{
return nullptr;
}
Тем, что вместо 3-х заглушек пишется одна. По сути, это все равно не фонтан интерфейсное решение, потому не вижу смысла плодить заглушки пусть и ради наглядного = 0.