From bb8d2703bd7537643371b1629a211c74d3a0523c Mon Sep 17 00:00:00 2001 From: Yuri Gorshenin Date: Wed, 22 Apr 2015 18:45:48 +0300 Subject: [PATCH] [pedestrian] Fixed turns test. --- .gitignore | 4 - data/route_test1.mwm | Bin 551 -> 0 bytes data/route_test1.osm.bz2 | Bin 655 -> 0 bytes data/route_test2.mwm | Bin 1206 -> 0 bytes data/route_test2.osm.bz2 | Bin 1230 -> 0 bytes .../features_road_graph_test.cpp | 264 ------------------ .../road_graph_nearest_turns_test.cpp | 101 +++++++ routing/routing_tests/routing_tests.pro | 2 +- 8 files changed, 102 insertions(+), 269 deletions(-) delete mode 100644 data/route_test1.mwm delete mode 100644 data/route_test1.osm.bz2 delete mode 100644 data/route_test2.mwm delete mode 100644 data/route_test2.osm.bz2 delete mode 100644 routing/routing_tests/features_road_graph_test.cpp create mode 100644 routing/routing_tests/road_graph_nearest_turns_test.cpp diff --git a/.gitignore b/.gitignore index 6a20628be9..5307177d39 100644 --- a/.gitignore +++ b/.gitignore @@ -87,10 +87,6 @@ data/*.bz2 data/settings.ini !data/minsk-pass.mwm !data/minsk-pass.osm.bz2 -!data/route_test1.mwm -!data/route_test1.osm.bz2 -!data/route_test2.mwm -!data/route_test2.osm.bz2 data/index.idx data/index.stamp # local statistics storage diff --git a/data/route_test1.mwm b/data/route_test1.mwm deleted file mode 100644 index 28dbc2a025178b952565d9f78cfc6b687baf2cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmdnR$N&b?zfbI0vvS^S$yKv^XC2?O&FI^=?VUG)Gz%9GpCAK^Z@4c5)6&x%G8&AG z4F;@Q=XdX)$T;cjVudT$PKy4z*2mn{FqK^zBx%U1_4s^y=#KvjU5;P6!L;|yFUCDH zZ+P*6m9a+ylfQuaS&dI2b|pfXuW9VkaPW z1!4~%W@m`80^*`g44bSrS!|Mvv5K9*7}w9pkjaw8(#FxrG?k6vH#fsMW(EOfbbFcF z8<_SoE@R{p6b%)WVffFuM;c@#!!u?}5cQrDL^Awkk_AyL4QcELK@e3DR2Hh1mpLV| z#2|q+JvBeqU;-lpm|+NG7{M6EKn7bzYGO)i5r+bEW=h2b#v6>x#VHjpn1WbJiqb(^ ZK{QAwhz4l{(I9>7WvNBQnfZAd901mcedquH diff --git a/data/route_test1.osm.bz2 b/data/route_test1.osm.bz2 deleted file mode 100644 index 20c8cdd3174ef0a367adb2490379ce5daca20b1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x98T4*^jL0KkKS^l(*tL zN!$tPqE$%mRm6vcv%&+y6OS|DVWh_$7RvVNz81cdY@>li7AQV27#;esLO4k$b#B`e zGImK5CvB!A2 zy^4hh$QY!oVIiXAiFoD(yr-x-ryLmsY^|gYKst_}88;Y1MS-KOX$@lp!Gkl;TJdG?s&r zImFa!7ATE|Q=Hl!<3EO@b=jIrmoW{&oQZ~53z?dYXOMF}Mj?UH7c5$u188WGIBYCV zV<4k`1jVjtJ**vRB^yoMp;tHP7bVUEiPvIg8?juJ7@RWh-8pR8yfHnD89_#%p}ElC pI1^-vM)NSYOdSwwB(X?oGC3KY_{ls1jYA{;F64@Ep&|WgB3N3GBUk_c diff --git a/data/route_test2.mwm b/data/route_test2.mwm deleted file mode 100644 index 8d408df8733c6c65f7d7877e541b05779993c1de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1206 zcmaKpe@K*f9LK-Ep6C1A&9l2qowp4uw4Ml>U26*#QP4IRD-wzz_ArDy>Yy|eDv{;5$qmb_x^mo z&-e5FzCWMm4MFCA&yBaFhuc2=IB(+iy^gQ1cKgOBx`#(Wg)<}5L&T1~I|xgRXsh*Y zis=uO1}h|?zx;WR#bQcdo5>!JPSIF(n0``w%axot!wU6nUemgqem@&*Cem+qzJD{QJSqTV>WJ8MlYr0Y2e{Wz^f%rNarJM-t)Hc1a@`0S=5 zoOreV?mKNG!Kw@SkE8CfsC%Kt$H~dhk2@M0O?p1PJQGiSiGA?LeKyq?7TK6?5aips zo7y+At&L}E*!8d{2Uj-=GB%fFU4voq-E0$`I43-~{4ytZ#tt=ugN8Au7gvhZc~jrV zwpN?&6X%po5nh0pRpNVZZ_T` zH9W#=)o5;=B(u-hC&LL(Iks=hhj%N1LO=)B0>? zg(S@kN$m@Y#bg2pOUP@J_#e{hQJVN8l#{Fr<+QdItu*t)m?c&eW7f`wF&khlC_~!Y zC=cjPl)oG<+_EJ0#I5mc>UOeRU!kmV<^S3DjMZvK3KmP_!ff=5U2+NCH_FUwwwq3m7{!!@d|(CDfJ=~N6PnOEh?6x SVkIgT%69|h6~VGnUHcbdicN6< diff --git a/data/route_test2.osm.bz2 b/data/route_test2.osm.bz2 deleted file mode 100644 index 0092c7597ddbc8ce189f993ad76afac6c32340f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1230 zcmV;<1Tp(UT4*^jL0KkKS@b}{d;ka8f{IeG|&P{pcoL)dWJ?u1Zkrn0;BO%41j3J00x1O z00070)S9R=14fzyKmcR_002a#1lpN2$Z4R+XlM^m0000|q)kSt`e~X?DT#z(27no; z8W|YhodcSMh=sC((nQD%QF(n#0~Rozf*FwW)mV`9`ep!&+B$e9+Lba*G`5;*hGvG- zW@4mj)~i}-nW+j3P0%V92bEJCL|Y>E46YlR{TmlaBHhYE4+=sAO^k{7MG%s}k|ePq z5;du85hSSIFrZ`sAO^`ukU>Cz2uP;UNdTBiV1cHX!5>Y-V=Z2V3|aGiS4>O;pOdIKiTJ(}Ykj#>0H!LbiBHSc_V zc0fP}C1Ms?#faoKtVKCRt^>gM>e4Eo3P5JTbRz8<4z*ek0K=I!FwodkbmiK!t?mm|TQ;Ir zXuxNyw93qmRfUw%j~Fm5j$Px7rFy*PaI;rh9WNwvZT7~O=2H<3B!K5Z83?S3_9HGX zwXCD)Xv8W+6Rs@M=1WQ~!*wx_#?*?rX~x?qaDo>Cy@iUGZfraw*?O2>mQ6c|9DL_8?k z=)tg1r7mW`th}nwK&1f!ir0;jGDyW%6j4P56j4P{MNwfz6jf1FQAI%*gS)L*1b`PH zfgarSQ-M;_0|jWsh`=r6Kx_c)9AP4o5)wud43aF1At0j3xgfk;mU7oh`RnMjr>X|B z1Iz)45G{3q(N_Y@ekgbI9nxN?UzqLNlr6bcUGbe-LdNto!Y=|H)Hf%r5h$*b15h2{ zUsZ7Bs{TU)g;o|+t8E&>)P|e0tEg*M`oBn8LhFUjt;N4R9k9B%!oz6}SVOuOJ$rT0 z494doOj4i`GP)Hn1?hYnR% z!MwQDrCK_Pax9V8j6%_)kkD=%Mo4iXtSq`J(3eRrz5^92rdzn91%ZWGyP~OZ7^$>? s#cy3u{y+ne2oH@3rgOn0t#K&ZEce|q!Uv#mBtMI}BAh5ldLUsw0CgE4N&o-= diff --git a/routing/routing_tests/features_road_graph_test.cpp b/routing/routing_tests/features_road_graph_test.cpp deleted file mode 100644 index c12fe7c2cc..0000000000 --- a/routing/routing_tests/features_road_graph_test.cpp +++ /dev/null @@ -1,264 +0,0 @@ -#include "testing/testing.hpp" - -#include "routing/routing_tests/features_road_graph_test.hpp" - -#include "routing/route.hpp" - -#include "indexer/classificator_loader.hpp" -#include "indexer/feature.hpp" -#include "indexer/ftypes_matcher.hpp" - -#include "base/logging.hpp" - - -using namespace routing; - -namespace routing_test -{ - -class EqualPos -{ - RoadPos m_pos; - double m_distance; -public: - EqualPos(RoadPos const & pos, double d) : m_pos(pos), m_distance(d) {} - bool operator() (PossibleTurn const & r) const - { - return r.m_pos == m_pos; - } -}; - -bool TestResult(IRoadGraph::TurnsVectorT const & vec, RoadPos const & pos, double d) -{ - return find_if(vec.begin(), vec.end(), EqualPos(pos, d)) != vec.end(); -} - - - -void Name2IdMapping::operator()(FeatureType const & ft) -{ - if (!ftypes::IsStreetChecker::Instance()(ft)) - return; - - string name; - VERIFY(ft.GetName(0, name), ()); - - m_name2Id[name] = ft.GetID().m_offset; - m_id2Name[ft.GetID().m_offset] = name; -} - -uint32_t Name2IdMapping::GetId(string const & name) -{ - ASSERT(m_name2Id.find(name) != m_name2Id.end(), ()); - return m_name2Id[name]; -} - -string const & Name2IdMapping::GetName(uint32_t id) -{ - ASSERT(m_id2Name.find(id) != m_id2Name.end(), ()); - return m_id2Name[id]; -} - - -FeatureRoadGraphTester::FeatureRoadGraphTester(string const & name) -{ - classificator::Load(); - - pair p = m_index.RegisterMap(name); - if (!p.second) - { - LOG(LERROR, ("MWM file not found")); - return; - } - - m_graph.reset(new FeaturesRoadGraph(&m_index, 0)); - - m_index.ForEachInRect(m_mapping, MercatorBounds::FullRect(), m_graph->GetStreetReadScale()); -} - -void FeatureRoadGraphTester::FeatureID2Name(routing::RoadPos & pos) -{ - string const & name = m_mapping.GetName(pos.GetFeatureId()); - int id = 0; - VERIFY(strings::to_int(name, id), (name)); - - pos = RoadPos(static_cast(id), pos.IsForward(), pos.GetSegId()); -} - -void FeatureRoadGraphTester::FeatureID2Name(IRoadGraph::TurnsVectorT & vec) -{ - for (size_t i = 0; i < vec.size(); ++i) - FeatureID2Name(vec[i].m_pos); -} - -void FeatureRoadGraphTester::FeatureID2Name(vector & vec) -{ - for (size_t i = 0; i < vec.size(); ++i) - FeatureID2Name(vec[i]); -} - -void FeatureRoadGraphTester::Name2FeatureID(vector & vec) -{ - for (size_t i = 0; i < vec.size(); ++i) - vec[i] = RoadPos(m_mapping.GetId(strings::to_string(vec[i].GetFeatureId())), vec[i].IsForward(), - vec[i].GetSegId()); -} - -void FeatureRoadGraphTester::GetPossibleTurns(RoadPos const & pos, IRoadGraph::TurnsVectorT & vec) -{ - m_graph->GetNearestTurns(RoadPos(m_mapping.GetId(strings::to_string(pos.GetFeatureId())), - pos.IsForward(), pos.GetSegId()), - vec); - FeatureID2Name(vec); -} - -template -void FeatureRoadGraphTester::ReconstructPath(routing::RoadPos (&arr)[N], vector & vec) -{ - vector positions(arr, arr + N); - Name2FeatureID(positions); - - Route route("dummy"); - m_graph->ReconstructPath(positions, route); - vec.assign(route.GetPoly().Begin(), route.GetPoly().End()); -} - -} - - -using namespace routing_test; - - -UNIT_TEST(FRG_TurnsTest_MWM1) -{ - FeatureRoadGraphTester tester("route_test1.mwm"); - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(0, true, 1), vec); - TEST_EQUAL(vec.size(), 1, ()); - TEST(TestResult(vec, RoadPos(0, true, 0), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(0, false, 1), vec); - TEST_EQUAL(vec.size(), 7, ()); - TEST(TestResult(vec, RoadPos(0, false, 2), -1), ()); - TEST(TestResult(vec, RoadPos(0, false, 3), -1), ()); - TEST(TestResult(vec, RoadPos(1, true, 1), -1), ()); - TEST(TestResult(vec, RoadPos(1, false, 2), -1), ()); - TEST(TestResult(vec, RoadPos(2, true, 0), -1), ()); - TEST(TestResult(vec, RoadPos(3, false, 0), -1), ()); - TEST(TestResult(vec, RoadPos(3, true, 2), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(1, true, 0), vec); - TEST_EQUAL(vec.size(), 0, ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(1, false, 0), vec); - TEST_EQUAL(vec.size(), 3, ()); - TEST(TestResult(vec, RoadPos(1, false, 2), 10), ()); - TEST(TestResult(vec, RoadPos(0, true, 1), 10), ()); - TEST(TestResult(vec, RoadPos(0, false, 2), 10), ()); - } -} - -UNIT_TEST(FRG_TurnsTest_MWM2) -{ - FeatureRoadGraphTester tester("route_test2.mwm"); - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(0, false, 0), vec); - TEST_EQUAL(vec.size(), 8, ()); - TEST(TestResult(vec, RoadPos(0, false, 1), -1), ()); - TEST(TestResult(vec, RoadPos(0, false, 2), -1), ()); - TEST(TestResult(vec, RoadPos(0, false, 3), -1), ()); - TEST(TestResult(vec, RoadPos(0, false, 4), -1), ()); - TEST(TestResult(vec, RoadPos(2, true, 1), -1), ()); - TEST(TestResult(vec, RoadPos(5, false, 0), -1), ()); - TEST(TestResult(vec, RoadPos(6, false, 0), -1), ()); - TEST(TestResult(vec, RoadPos(4, false, 0), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(8, true, 0), vec); - TEST_EQUAL(vec.size(), 2, ()); - TEST(TestResult(vec, RoadPos(1, true, 1), -1), ()); - TEST(TestResult(vec, RoadPos(8, true, 5), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(2, true, 1), vec); - TEST_EQUAL(vec.size(), 4, ()); - TEST(TestResult(vec, RoadPos(3, true, 0), -1), ()); - TEST(TestResult(vec, RoadPos(3, false, 1), -1), ()); - TEST(TestResult(vec, RoadPos(2, true, 0), -1), ()); - TEST(TestResult(vec, RoadPos(8, true, 4), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(3, false, 0), vec); - TEST_EQUAL(vec.size(), 5, ()); - TEST(TestResult(vec, RoadPos(3, false, 1), -1), ()); - TEST(TestResult(vec, RoadPos(3, false, 2), -1), ()); - TEST(TestResult(vec, RoadPos(2, true, 0), -1), ()); - TEST(TestResult(vec, RoadPos(6, true, 0), -1), ()); - TEST(TestResult(vec, RoadPos(6, false, 1), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(7, false, 0), vec); - TEST_EQUAL(vec.size(), 0, ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(7, true, 0), vec); - TEST_EQUAL(vec.size(), 1, ()); - TEST(TestResult(vec, RoadPos(8, true, 1), -1), ()); - } - - { - IRoadGraph::TurnsVectorT vec; - tester.GetPossibleTurns(RoadPos(8, true, 3), vec); - TEST_EQUAL(vec.size(), 7, ()); - TEST(TestResult(vec, RoadPos(8, true, 2), -1), ()); - TEST(TestResult(vec, RoadPos(5, true, 0), -1), ()); - TEST(TestResult(vec, RoadPos(5, false, 1), -1), ()); - TEST(TestResult(vec, RoadPos(7, false, 0), -1), ()); - TEST(TestResult(vec, RoadPos(8, true, 1), -1), ()); - TEST(TestResult(vec, RoadPos(1, true, 1), -1), ()); - TEST(TestResult(vec, RoadPos(8, true, 5), -1), ()); - } -} - -UNIT_TEST(FRG_ReconstructTest_MWM2) -{ - // Uncomment to see debug log. - //my::g_LogLevel = LDEBUG; - - FeatureRoadGraphTester tester("route_test2.mwm"); - - { - RoadPos arr[] = { - RoadPos(8, true, 4), - RoadPos(2, true, 0), - RoadPos(3, true, 2) - }; - - vector vec; - tester.ReconstructPath(arr, vec); - TEST_EQUAL(vec.size(), 3, ()); - } -} diff --git a/routing/routing_tests/road_graph_nearest_turns_test.cpp b/routing/routing_tests/road_graph_nearest_turns_test.cpp new file mode 100644 index 0000000000..167efd0db2 --- /dev/null +++ b/routing/routing_tests/road_graph_nearest_turns_test.cpp @@ -0,0 +1,101 @@ +#include "testing/testing.hpp" + +#include "routing/road_graph.hpp" +#include "routing/routing_tests/road_graph_builder.hpp" +#include "std/algorithm.hpp" + +namespace routing +{ +UNIT_TEST(RoadGraph_NearestTurns) +{ + // 2nd road + // o + // | + // | + // o + // | + // | 1st road + // o--o--x--o--o + // | + // | + // o + // | + // | + // o + // + // Just two roads intersecting at (0, 0). + routing_test::RoadGraphMockSource graph; + { + IRoadGraph::RoadInfo ri0; + ri0.m_points.emplace_back(2, 0); + ri0.m_points.emplace_back(-1, 0); + ri0.m_points.emplace_back(0, 0); + ri0.m_points.emplace_back(1, 0); + ri0.m_points.emplace_back(2, 0); + ri0.m_speedKMPH = 5; + ri0.m_bidirectional = true; + + IRoadGraph::RoadInfo ri1; + ri1.m_points.emplace_back(0, -2); + ri1.m_points.emplace_back(0, -1); + ri1.m_points.emplace_back(0, 0); + ri1.m_points.emplace_back(0, 1); + ri1.m_points.emplace_back(0, 2); + ri1.m_speedKMPH = 5; + ri1.m_bidirectional = true; + + graph.AddRoad(move(ri0)); + graph.AddRoad(move(ri1)); + } + + // We're standing at: + // ... x--o ... segment and looking to the right. + RoadPos const crossPos(0 /* featureId */, true /* forward */, 2 /* segId */, m2::PointD(0, 0)); + IRoadGraph::RoadPosVectorT expected = { + // It's possible to get to the standing RoadPos from RoadPos'es on + // the first road marked with > and <. + // + // ... + // | + // ...--o>>x<