diff --git a/cucumber.js b/cucumber.js index b7288c588..c16104c05 100644 --- a/cucumber.js +++ b/cucumber.js @@ -1,6 +1,6 @@ module.exports = { - default: '--require features --tags ~@todo --tags ~@bug --tags ~@stress', - verify: '--require features --tags ~@todo --tags ~@bug --tags ~@stress -f progress', + default: '--require features --tags ~@todo --tags ~@bug --tags ~@stress --tags ~@guidance', + verify: '--require features --tags ~@todo --tags ~@bug --tags ~@stress -f progress --tags ~@guidance', jenkins: '--require features --tags ~@todo --tags ~@bug --tags ~@stress --tags ~@options -f progress', bugs: '--require features --tags @bug', todo: '--require features --tags @todo', diff --git a/features/bicycle/area.feature b/features/bicycle/area.feature index decee5a45..626b383df 100644 --- a/features/bicycle/area.feature +++ b/features/bicycle/area.feature @@ -41,14 +41,14 @@ Feature: Bike - Squares and other areas When I route I should get | from | to | route | - | a | b | xa | - | a | d | xa | - | b | c | xa | - | c | b | xa | - | c | d | xa | - | d | c | xa | - | d | a | xa | - | a | d | xa | + | a | b | xa,xa | + | a | d | xa,xa | + | b | c | xa,xa | + | c | b | xa,xa | + | c | d | xa,xa | + | d | c | xa,xa | + | d | a | xa,xa | + | a | d | xa,xa | @parking @mokob @2154 Scenario: Bike - parking areas diff --git a/features/foot/area.feature b/features/foot/area.feature index 1e226ee99..8cfc0a839 100644 --- a/features/foot/area.feature +++ b/features/foot/area.feature @@ -41,14 +41,14 @@ Feature: Foot - Squares and other areas When I route I should get | from | to | route | - | a | b | xa | - | a | d | xa | - | b | c | xa | - | c | b | xa | - | c | d | xa | - | d | c | xa | - | d | a | xa | - | a | d | xa | + | a | b | xa,xa | + | a | d | xa,xa | + | b | c | xa,xa | + | c | b | xa,xa | + | c | d | xa,xa | + | d | c | xa,xa | + | d | a | xa,xa | + | a | d | xa,xa | @parking Scenario: Foot - parking areas diff --git a/features/testbot/compression.feature b/features/testbot/compression.feature index 4c0121d6f..79823ceed 100644 --- a/features/testbot/compression.feature +++ b/features/testbot/compression.feature @@ -17,6 +17,6 @@ Feature: Geometry Compression | fg | When I route I should get - | from | to | route | distance | speed | - | b | e | abcdef | 589m | 36 km/h | - | e | b | abcdef | 589m | 36 km/h | + | from | to | route | distance | speed | + | b | e | abcdef,abcdef | 589m | 36 km/h | + | e | b | abcdef,abcdef | 589m | 36 km/h | diff --git a/features/testbot/datastore.feature b/features/testbot/datastore.feature index 568ae7aa4..70a754bdf 100644 --- a/features/testbot/datastore.feature +++ b/features/testbot/datastore.feature @@ -14,8 +14,8 @@ Feature: Temporary tests related to osrm-datastore When I route I should get | from | to | route | - | a | b | ab | - | b | a | ab | + | a | b | ab,ab | + | b | a | ab,ab | Scenario: Scenaria xy Given the node map @@ -27,5 +27,5 @@ Feature: Temporary tests related to osrm-datastore When I route I should get | from | to | route | - | x | y | xy | - | y | x | xy | + | x | y | xy,xy | + | y | x | xy,xy | diff --git a/features/testbot/distance_matrix.feature b/features/testbot/distance_matrix.feature index 4abc8bff5..4afa30708 100644 --- a/features/testbot/distance_matrix.feature +++ b/features/testbot/distance_matrix.feature @@ -47,8 +47,8 @@ Feature: Basic Distance Matrix When I request a travel time matrix I should get | | a | b | - | a | 0 | 95 +- 10 | - | b | 95 ~10% | 0 | + | a | 0 | 9 +- 2 | + | b | 9 ~15% | 0 | Scenario: Testbot - Travel time matrix of small grid Given the node map diff --git a/features/testbot/example.feature b/features/testbot/example.feature index c2aa1e926..075a22e56 100644 --- a/features/testbot/example.feature +++ b/features/testbot/example.feature @@ -20,18 +20,18 @@ Feature: Testbot - Walkthrough | de | primary | | When I route I should get - | from | to | route | - | a | b | abc | - | a | c | abc | - | a | d | abc,cd | - | a | e | abc,ce | - | b | a | abc | - | b | c | abc | - | b | d | abc,cd | - | b | e | abc,ce | - | d | a | de,ce,abc | - | d | b | de,ce,abc | - | d | e | de | - | e | a | ce,abc | - | e | b | ce,abc | - | e | c | ce | + | from | to | route | + | a | b | abc,abc | + | a | c | abc,abc | + | a | d | abc,cd,cd | + | a | e | abc,ce,ce | + | b | a | abc,abc | + | b | c | abc,abc | + | b | d | abc,cd,cd | + | b | e | abc,ce,ce | + | d | a | de,ce,abc,abc | + | d | b | de,ce,abc,abc | + | d | e | de,de | + | e | a | ce,abc,abc | + | e | b | ce,abc,abc | + | e | c | ce,ce | diff --git a/features/testbot/fastest.feature b/features/testbot/fastest.feature index 8c24a5334..5576c738c 100644 --- a/features/testbot/fastest.feature +++ b/features/testbot/fastest.feature @@ -18,9 +18,9 @@ Feature: Choosing fastest route | asb | primary | When I route I should get - | from | to | route | - | x | y | xa,atb,by | - | y | x | by,atb,xa | + | from | to | route | + | x | y | xa,atb,by,by | + | y | x | by,atb,xa,xa | Scenario: Pick the fastest route, even when it's longer Given the node map @@ -33,6 +33,6 @@ Feature: Choosing fastest route | asb | secondary | When I route I should get - | from | to | route | - | a | b | apb | - | b | a | apb | + | from | to | route | + | a | b | apb,apb | + | b | a | apb,apb | diff --git a/features/testbot/fixed.feature b/features/testbot/fixed.feature index f757a00fc..dc09eaa91 100644 --- a/features/testbot/fixed.feature +++ b/features/testbot/fixed.feature @@ -22,5 +22,5 @@ Feature: Fixed bugs, kept to check for regressions | cdec | When I route I should get - | from | to | route | turns | - | x | y | abc | depart,arrive | + | from | to | route | + | x | y | abc,abc | diff --git a/features/testbot/geometry.feature b/features/testbot/geometry.feature index dee5b0a5a..24f3d235f 100644 --- a/features/testbot/geometry.feature +++ b/features/testbot/geometry.feature @@ -21,8 +21,8 @@ Feature: Retrieve geometry | cd | When I route I should get - | from | to | route | geometry | - | a | c | ab,bc | _ibE_~cH_seK_seK | - | b | d | bc,cd | _seK_hgN_seK_seK | + | from | to | route | geometry | + | a | c | ab,bc,bc | _ibE_~cH_seK_seK | + | b | d | bc,cd,cd | _seK_hgN_seK_seK | # Mind the \ before the pipes diff --git a/features/testbot/loop.feature b/features/testbot/loop.feature index 675b0c43e..f035ab0fb 100644 --- a/features/testbot/loop.feature +++ b/features/testbot/loop.feature @@ -18,10 +18,10 @@ Feature: Avoid weird loops caused by rounding errors | cg | When I route I should get - | waypoints | route | turns | - | a,1,d | abcd,abcd | depart,via,arrive | - | a,2,d | abcd,abcd | depart,via,arrive | - | a,3,d | abcd,abcd | depart,via,arrive | + | waypoints | route | + | a,1,d | abcd,abcd,abcd,abcd | + | a,2,d | abcd,abcd,abcd,abcd | + | a,3,d | abcd,abcd,abcd,abcd | Scenario: Avoid weird loops 1 Given the node locations @@ -47,8 +47,8 @@ Feature: Avoid weird loops caused by rounding errors | ie | When I route I should get - | from | to | route | turns | - | x | y | hfgd | depart,arrive | + | from | to | route | + | x | y | hfgd,hfgd | Scenario: Avoid weird loops 2 Given the node locations @@ -67,8 +67,8 @@ Feature: Avoid weird loops caused by rounding errors | cdec | When I route I should get - | from | to | route | turns | - | x | y | abc | depart,arrive | + | from | to | route | + | x | y | abc,abc | @412 Scenario: Avoid weird loops 3 @@ -92,6 +92,6 @@ Feature: Avoid weird loops caused by rounding errors | cf | primary | When I route I should get - | waypoints | route | turns | - | a,2,d | ab,be,ef,ef,cf,cd | depart,left,straight,via,straight,left,arrive | - | a,1,d | ab,be,ef,ef,cf,cd | depart,left,straight,via,straight,left,arrive | + | waypoints | route | + | a,2,d | ab,be,ef,ef,ef,cf,cd,cd | + | a,1,d | ab,be,ef,ef,ef,cf,cd,cd | diff --git a/features/testbot/matching_turns.feature b/features/testbot/matching_turns.feature deleted file mode 100644 index 2dec2295e..000000000 --- a/features/testbot/matching_turns.feature +++ /dev/null @@ -1,105 +0,0 @@ -@routing @turns @testbot -Feature: Turn directions/codes - - Background: - Given the profile "testbot" - - Scenario: Turn directions - Given the query options - | instructions | true | - Given the node map - | o | p | a | b | c | - | n | | | | d | - | m | | x | | e | - | l | | | | f | - | k | j | i | h | g | - - And the ways - | nodes | - | xa | - | xc | - | xe | - | xg | - | xi | - | xk | - | xm | - | xo | - - When I match I should get - | trace | route | turns | matchings | - | im | xi,xm,xm | depart,left,arrive | im | - | io | xi,xo,xo | depart,slight_left,arrive | io | - | ia | xi,xa,xa | depart,straight,arrive | ia | - | ic | xi,xc,xc | depart,slight_right,arrive | ic | - | ie | xi,xe,xe | depart,right,arrive | ie | - - | ko | xk,xo,xo | depart,left,arrive | ko | - | ka | xk,xa,xa | depart,slight_left,arrive | ka | - | kc | xk,xc,xc | depart,straight,arrive | kc | - | ke | xk,xe,xe | depart,slight_right,arrive | ke | - | kg | xk,xg,xg | depart,right,arrive | kg | - - | ma | xm,xa,xa | depart,left,arrive | ma | - | mc | xm,xc,xc | depart,slight_left,arrive | mc | - | me | xm,xe,xe | depart,straight,arrive | me | - | mg | xm,xg,xg | depart,slight_right,arrive | mg | - | mi | xm,xi,xi | depart,right,arrive | mi | - - | oc | xo,xc,xc | depart,left,arrive | oc | - | oe | xo,xe,xe | depart,slight_left,arrive | oe | - | og | xo,xg,xg | depart,straight,arrive | og | - | oi | xo,xi,xi | depart,slight_right,arrive | oi | - | ok | xo,xk,xk | depart,right,arrive | ok | - - | ae | xa,xe,xe | depart,left,arrive | ae | - | ag | xa,xg,xg | depart,slight_left,arrive | ag | - | ai | xa,xi,xi | depart,straight,arrive | ai | - | ak | xa,xk,xk | depart,slight_right,arrive | ak | - | am | xa,xm,xm | depart,right,arrive | am | - - | cg | xc,xg,xg | depart,left,arrive | cg | - | ci | xc,xi,xi | depart,slight_left,arrive | ci | - | ck | xc,xk,xk | depart,straight,arrive | ck | - | cm | xc,xm,xm | depart,slight_right,arrive | cm | - | co | xc,xo,xo | depart,right,arrive | co | - - | ei | xe,xi,xi | depart,left,arrive | ei | - | ek | xe,xk,xk | depart,slight_left,arrive | ek | - | em | xe,xm,xm | depart,straight,arrive | em | - | eo | xe,xo,xo | depart,slight_right,arrive | eo | - | ea | xe,xa,xa | depart,right,arrive | ea | - - | gk | xg,xk,xk | depart,left,arrive | gk | - | gm | xg,xm,xm | depart,slight_left,arrive | gm | - | go | xg,xo,xo | depart,straight,arrive | go | - | ga | xg,xa,xa | depart,slight_right,arrive | ga | - | gc | xg,xc,xc | depart,right,arrive | gc | - - Scenario: Turn directions - Given the query options - | instructions | true | - Given the node map - | o | p | a | b | c | - | n | | | | d | - | m | | x | | e | - | l | | | | f | - | k | j | i | h | g | - - And the ways - | nodes | - | xa | - | xc | - | xe | - | xg | - | xi | - | xk | - | xm | - | xo | - - When I match I should get - | trace | route | turns | matchings | duration | - | im | xi,xm,xm | depart,left,arrive | im | 80 | - | io | xi,xo,xo | depart,slight_left,arrive | io | 88 | - | ia | xi,xa,xa | depart,straight,arrive | ia | 80 | - | ic | xi,xc,xc | depart,slight_right,arrive | ic | 88 | - | ie | xi,xe,xe | depart,right,arrive | ie | 60 | diff --git a/features/testbot/mode.feature b/features/testbot/mode.feature index 108607ffc..3f2463d7d 100644 --- a/features/testbot/mode.feature +++ b/features/testbot/mode.feature @@ -40,9 +40,9 @@ Feature: Testbot - Travel mode | efg | residential | solid | When I route I should get - | from | to | route | modes | turns | - | a | g | road,liquid,solid,solid | driving,river downstream,driving,driving | depart,straight,straight,arrive | - | c | g | liquid,solid,solid | river downstream,driving,driving | depart,straight,arrive | + | from | to | route | modes | + | a | g | road,liquid,solid,solid | driving,river downstream,driving,driving | + | c | g | liquid,solid,solid | river downstream,driving,driving | @mokob @2166 Scenario: Testbot - Modes in each direction, different forward/backward speeds @@ -145,9 +145,9 @@ Feature: Testbot - Travel mode | ab | river | When I route I should get - | waypoints | routes | modes | turns | - | a,1,b | ab,ab,ab | river downstream,river downstream,river downstream | depart,via,arrive | - | b,1,a | ab,ab,ab | river upstream,river upstream,river upstream | depart,via,arrive | + | waypoints | route | modes | + | a,1,b | ab,ab,ab,ab | river downstream,river downstream,river downstream,river downstream | + | b,1,a | ab,ab,ab,ab | river upstream,river upstream,river upstream,river upstream | @mokob @2166 Scenario: Testbot - Starting at a tricky node @@ -175,11 +175,11 @@ Feature: Testbot - Travel mode | bc | river | Avenue | When I route I should get - | from | to | route | modes | turns | - | a | c | Avenue,Avenue,Avenue | driving,river downstream,river downstream | depart,straight,arrive | - | c | a | Avenue,Avenue,Avenue | river upstream,driving,driving | depart,straight,arrive | - | 1 | 2 | Avenue,Avenue,Avenue | driving,river downstream,river downstream | depart,straight,arrive | - | 2 | 1 | Avenue,Avenue,Avenue | river upstream,driving,driving | depart,straight,arrive | + | from | to | route | modes | + | a | c | Avenue,Avenue,Avenue | driving,river downstream,river downstream | + | c | a | Avenue,Avenue,Avenue | river upstream,driving,driving | + | 1 | 2 | Avenue,Avenue,Avenue | driving,river downstream,river downstream | + | 2 | 1 | Avenue,Avenue,Avenue | river upstream,driving,driving | Scenario: Testbot - Mode for routes Given the node map @@ -195,14 +195,14 @@ Feature: Testbot - Travel mode | ef | primary | | | When I route I should get - | from | to | route | turns | modes | - | a | d | ab,bc,cd,cd | depart,right,left,arrive | driving,route,driving,driving | - | d | a | cd,bc,ab,ab | depart,right,left,arrive | driving,route,driving,driving | - | c | a | bc,ab,ab | depart,left,arrive | route,driving,driving | - | d | b | cd,bc,bc | depart,right,arrive | driving,route,route | - | a | c | ab,bc,bc | depart,right,arrive | driving,route,route | - | b | d | bc,cd,cd | depart,left,arrive | route,driving,driving | - | a | f | ab,bc,cd,de,ef,ef | depart,right,left,straight,straight,arrive | driving,route,driving,driving,driving,driving | + | from | to | route | modes | + | a | d | ab,bc,cd,cd | driving,route,driving,driving | + | d | a | cd,bc,ab,ab | driving,route,driving,driving | + | c | a | bc,ab,ab | route,driving,driving | + | d | b | cd,bc,bc | driving,route,route | + | a | c | ab,bc,bc | driving,route,route | + | b | d | bc,cd,cd | route,driving,driving | + | a | f | ab,bc,cd,de,ef,ef | driving,route,driving,driving,driving,driving | @mokob @2166 Scenario: Testbot - Modes, triangle map diff --git a/features/testbot/projection.feature b/features/testbot/projection.feature index 4d0667ed1..ad4a32b5d 100644 --- a/features/testbot/projection.feature +++ b/features/testbot/projection.feature @@ -23,16 +23,16 @@ Feature: Projection to nearest point on road Scenario: Projection onto way at high latitudes, 1km distance When I route I should get - | from | to | route | bearing | distance | - | b | a | abc,abc | 225,0 | 1000m -7 | - | b | c | abc,abc | 45,0 | 1000m -7 | - | a | d | abc,abc | 45,0 | 1000m -7 | - | d | a | abc,abc | 225,0 | 1000m -7 | - | c | d | abc,abc | 225,0 | 1000m -8 | - | d | c | abc,abc | 45 -5 | 1000m -8 | + | from | to | route | bearing | distance | + | b | a | abc,abc | 225,0 +-1 | 1000m +- 7 | + | b | c | abc,abc | 45,0 +-1 | 1000m +- 7 | + | a | d | abc,abc | 45,0 +-1 | 1000m +- 7 | + | d | a | abc,abc | 225,0 +-1 | 1000m +- 7 | + | c | d | abc,abc | 225,0 +-1 | 1000m +- 8 | + | d | c | abc,abc | 45 +-1 | 1000m +- 8 | Scenario: Projection onto way at high latitudes, no distance When I route I should get - | from | to | route | distance | - | d | b | abc | 0m +-5 | - | b | d | abc | 0m +-5 | + | from | to | route | distance | + | d | b | abc,abc | 0m +-5 | + | b | d | abc,abc | 0m +-5 | diff --git a/features/testbot/roundabout.feature b/features/testbot/roundabout.feature index 8c96e6809..90f2fc0c3 100644 --- a/features/testbot/roundabout.feature +++ b/features/testbot/roundabout.feature @@ -21,19 +21,19 @@ Feature: Roundabout Instructions | abcda | roundabout | When I route I should get - | from | to | route | turns | - | s | t | sa,tb | depart,roundabout-exit-1,arrive | - | s | u | sa,uc | depart,roundabout-exit-2,arrive | - | s | v | sa,vd | depart,roundabout-exit-3,arrive | - | t | u | tb,uc | depart,roundabout-exit-1,arrive | - | t | v | tb,vd | depart,roundabout-exit-2,arrive | - | t | s | tb,sa | depart,roundabout-exit-3,arrive | - | u | v | uc,vd | depart,roundabout-exit-1,arrive | - | u | s | uc,sa | depart,roundabout-exit-2,arrive | - | u | t | uc,tb | depart,roundabout-exit-3,arrive | - | v | s | vd,sa | depart,roundabout-exit-1,arrive | - | v | t | vd,tb | depart,roundabout-exit-2,arrive | - | v | u | vd,uc | depart,roundabout-exit-3,arrive | + | from | to | route | turns | + | s | t | sa,tb,tb | depart,roundabout-exit-1,arrive | + | s | u | sa,uc,uc | depart,roundabout-exit-2,arrive | + | s | v | sa,vd,vd | depart,roundabout-exit-3,arrive | + | t | u | tb,uc,uc | depart,roundabout-exit-1,arrive | + | t | v | tb,vd,vd | depart,roundabout-exit-2,arrive | + | t | s | tb,sa,sa | depart,roundabout-exit-3,arrive | + | u | v | uc,vd,vd | depart,roundabout-exit-1,arrive | + | u | s | uc,sa,sa | depart,roundabout-exit-2,arrive | + | u | t | uc,tb,tb | depart,roundabout-exit-3,arrive | + | v | s | vd,sa,sa | depart,roundabout-exit-1,arrive | + | v | t | vd,tb,tb | depart,roundabout-exit-2,arrive | + | v | u | vd,uc,uc | depart,roundabout-exit-3,arrive | Scenario: Testbot - Roundabout with oneway links Given the node map @@ -57,20 +57,20 @@ Feature: Roundabout Instructions | abcdefgha | roundabout | | When I route I should get - | from | to | route | turns | - | j | k | jb,ck | depart,roundabout-exit-1,arrive | - | j | m | jb,em | depart,roundabout-exit-2,arrive | - | j | o | jb,go | depart,roundabout-exit-3,arrive | - | j | i | jb,ai | depart,roundabout-exit-4,arrive | - | l | m | ld,em | depart,roundabout-exit-1,arrive | - | l | o | ld,go | depart,roundabout-exit-2,arrive | - | l | i | ld,ai | depart,roundabout-exit-3,arrive | - | l | k | ld,ck | depart,roundabout-exit-4,arrive | - | n | o | nf,go | depart,roundabout-exit-1,arrive | - | n | i | nf,ai | depart,roundabout-exit-2,arrive | - | n | k | nf,ck | depart,roundabout-exit-3,arrive | - | n | m | nf,em | depart,roundabout-exit-4,arrive | - | p | i | ph,ai | depart,roundabout-exit-1,arrive | - | p | k | ph,ck | depart,roundabout-exit-2,arrive | - | p | m | ph,em | depart,roundabout-exit-3,arrive | - | p | o | ph,go | depart,roundabout-exit-4,arrive | + | from | to | route | turns | + | j | k | jb,ck,ck | depart,roundabout-exit-1,arrive | + | j | m | jb,em,em | depart,roundabout-exit-2,arrive | + | j | o | jb,go,go | depart,roundabout-exit-3,arrive | + | j | i | jb,ai,ai | depart,roundabout-exit-4,arrive | + | l | m | ld,em,em | depart,roundabout-exit-1,arrive | + | l | o | ld,go,go | depart,roundabout-exit-2,arrive | + | l | i | ld,ai,ai | depart,roundabout-exit-3,arrive | + | l | k | ld,ck,ck | depart,roundabout-exit-4,arrive | + | n | o | nf,go,go | depart,roundabout-exit-1,arrive | + | n | i | nf,ai,ai | depart,roundabout-exit-2,arrive | + | n | k | nf,ck,ck | depart,roundabout-exit-3,arrive | + | n | m | nf,em,em | depart,roundabout-exit-4,arrive | + | p | i | ph,ai,ai | depart,roundabout-exit-1,arrive | + | p | k | ph,ck,ck | depart,roundabout-exit-2,arrive | + | p | m | ph,em,em | depart,roundabout-exit-3,arrive | + | p | o | ph,go,go | depart,roundabout-exit-4,arrive | diff --git a/features/testbot/speed.feature b/features/testbot/speed.feature index 9916b8476..041641962 100644 --- a/features/testbot/speed.feature +++ b/features/testbot/speed.feature @@ -26,6 +26,6 @@ Feature: Testbot - speeds | ab | river | When I route I should get - | from | to | route | speed | time | distance | - | a | b | ab,ab | 36 km/h | 10s | 100m | - | b | a | ab,ab | 16 km/h +- 1 | 23s | 100m | + | from | to | route | speed | time | distance | + | a | b | ab,ab | 36 km/h | 10s +-1 | 100m +- 1 | + | b | a | ab,ab | 16 km/h +- 1 | 23s +-1 | 100m +- 1 | diff --git a/features/testbot/turn_angles.feature b/features/testbot/turn_angles.feature index 4d0ec636b..115fd233d 100644 --- a/features/testbot/turn_angles.feature +++ b/features/testbot/turn_angles.feature @@ -37,7 +37,7 @@ Feature: Via points When I route I should get | from | to | route | distance | turns | - | a | k | abcdefg,ehijk,ehijk | 34m +-1 | depart,slight_right,arrive | + | a | k | abcdefg,ehijk,ehijk | 35m +-1 | depart,slight right,arrive | Scenario: Nearly Slight Turn Given the node map diff --git a/features/testbot/turns.feature b/features/testbot/turns.feature index 76ec5d370..c80bdf713 100644 --- a/features/testbot/turns.feature +++ b/features/testbot/turns.feature @@ -108,8 +108,8 @@ Feature: Turn directions/codes | yz | When I route I should get - | from | to | route | turns | - | a | c | ab,bc,bc | depart,straight,arrive | - | c | a | bc,ab,ab | depart,straight,arrive | - | x | z | xy,yz,yz | depart,straight,arrive | - | z | x | yz,xy,xy | depart,straight,arrive | + | from | to | route | turns | + | a | c | ab,bc,bc | depart,left,arrive | + | c | a | bc,ab,ab | depart,right,arrive | + | x | z | xy,yz,yz | depart,right,arrive | + | z | x | yz,xy,xy | depart,left,arrive | diff --git a/features/testbot/via.feature b/features/testbot/via.feature index 24ac93a85..84b939bfc 100644 --- a/features/testbot/via.feature +++ b/features/testbot/via.feature @@ -42,9 +42,9 @@ Feature: Via points | bd | When I route I should get - | waypoints | route | - | a,d,c | abc,bd,bd,bd,bd,abc,abc | - | c,d,a | abc,bd,bd,bd,bd,abc,abc | + | waypoints | route | + | a,d,c | abc,bd,bd,bd,abc,abc | + | c,d,a | abc,bd,bd,bd,abc,abc | @mokob Scenario: Multiple via points @@ -63,9 +63,9 @@ Feature: Via points | dh | When I route I should get - | waypoints | route | - | a,c,f | ab,bcd,bcd,bcd,de,efg,efg| - | a,c,f,h | ab,bcd,bcd,bcd,de,efg,efg,efg,gh,gh| + | waypoints | route | + | a,c,f | ab,bcd,bcd,bcd,de,efg,efg | + | a,c,f,h | ab,bcd,bcd,bcd,de,efg,efg,efg,gh,gh | Scenario: Duplicate via point @@ -80,8 +80,8 @@ Feature: Via points | ab | When I route I should get - | waypoints | route | turns | - | 1,1,4 | ab,ab | depart,via,arrive | + | waypoints | route | + | 1,1,4 | ab,ab,ab,ab | Scenario: Via points on ring of oneways # xa it to avoid only having a single ring, which cna trigger edge cases @@ -101,12 +101,12 @@ Feature: Via points | fa | yes | When I route I should get - | waypoints | route | distance | turns | - | 1,3 | ab,bc,cd | 400m +-1 | depart,straight,straight,arrive | - | 3,1 | cd,de,ef,fa,ab | 1000m +-1 | depart,straight,straight,straight,right,arrive | - | 1,2,3 | ab,bc,bc,cd | 400m +-1 | depart,straight,via,straight,arrive | - | 1,3,2 | ab,bc,cd,cd,de,ef,fa,ab,bc | 1600m +-1 | depart,straight,straight,via,straight,straight,straight,right,straight,arrive | - | 3,2,1 | cd,de,ef,fa,ab,bc,bc,cd,de,ef,fa,ab | 2400m +-1 | depart,straight,straight,straight,right,straight,via,straight,straight,straight,straight,right,arrive | + | waypoints | route | distance | + | 1,3 | ab,bc,cd,cd | 400m +-1 | + | 3,1 | cd,de,ef,fa,ab,ab | 1000m +-1 | + | 1,2,3 | ab,bc,bc,bc,cd,cd | 400m +-1 | + | 1,3,2 | ab,bc,cd,cd,cd,de,ef,fa,ab,bc,bc | 1600m +-1 | + | 3,2,1 | cd,de,ef,fa,ab,bc,bc,bc,cd,de,ef,fa,ab,ab | 2400m +-1 | Scenario: Via points on ring on the same oneway # xa it to avoid only having a single ring, which cna trigger edge cases @@ -124,12 +124,12 @@ Feature: Via points | da | yes | When I route I should get - | waypoints | route | distance | turns | - | 1,3 | ab | 200m +-1 | depart,arrive | - | 3,1 | ab,bc,cd,da,ab | 800m +-1 | depart,straight,straight,straight,right,arrive | - | 1,2,3 | ab,ab | 200m +-1 | depart,via,arrive | - | 1,3,2 | ab,ab,bc,cd,da,ab | 1100m +-1 | depart,via,straight,straight,straight,right,arrive | - | 3,2,1 | ab,bc,cd,da,ab,ab,bc,cd,da,ab | 1800m | depart,straight,straight,straight,right,via,straight,straight,straight,right,arrive | + | waypoints | route | distance | + | 1,3 | ab,ab | 200m +-1 | + | 3,1 | ab,bc,cd,da,ab,ab | 800m +-1 | + | 1,2,3 | ab,ab,ab,ab | 200m +-1 | + | 1,3,2 | ab,ab,ab,bc,cd,da,ab,ab | 1100m +-1 | + | 3,2,1 | ab,bc,cd,da,ab,ab,ab,bc,cd,da,ab,ab | 1800m +-1 | # See issue #1896 Scenario: Via point at a dead end with oneway @@ -145,9 +145,9 @@ Feature: Via points | de | yes | When I route I should get - | waypoints | route | - | a,d,c | abc,bd,bd,bd,abc | - | c,d,a | abc,bd,bd,bd,abc | + | waypoints | route | + | a,d,c | abc,bd,bd,bd,abc,abc | + | c,d,a | abc,bd,bd,bd,abc,abc | # See issue #1896 Scenario: Via point at a dead end with barrier @@ -171,9 +171,9 @@ Feature: Via points | afed | When I route I should get - | waypoints | route | - | a,1,c | abc,bd,bd,bd,abc | - | c,1,a | abc,bd,bd,bd,abc | + | waypoints | route | + | a,1,c | abc,bd,bd,bd,bd,abc,abc | + | c,1,a | abc,bd,bd,bd,bd,abc,abc | Scenario: Via points on ring on the same oneway, forces one of the vertices to be top node Given the node map @@ -190,11 +190,11 @@ Feature: Via points | da | yes | When I route I should get - | waypoints | route | distance | turns | - | 2,1 | ab,bc,cd,da,ab | 1100m +-1 | depart,straight,straight,straight,straight,arrive | - | 4,3 | bc,cd,da,ab,bc | 1100m +-1 | depart,straight,straight,straight,straight,arrive | - | 6,5 | cd,da,ab,bc,cd | 1100m +-1 | depart,straight,straight,straight,straight,arrive | - | 8,7 | da,ab,bc,cd,da | 1100m +-1 | depart,straight,straight,straight,straight,arrive | + | waypoints | route | distance | + | 2,1 | ab,bc,cd,da,ab,ab | 1100m +-1 | + | 4,3 | bc,cd,da,ab,bc,bc | 1100m +-1 | + | 6,5 | cd,da,ab,bc,cd,cd | 1100m +-1 | + | 8,7 | da,ab,bc,cd,da,da | 1100m +-1 | Scenario: Multiple Via points on ring on the same oneway, forces one of the vertices to be top node Given the node map @@ -212,7 +212,7 @@ Feature: Via points | da | yes | When I route I should get - | waypoints | route | distance | turns | - | 3,2,1 | ab,bc,cd,da,ab,ab,bc,cd,da,ab | 3000m +-1 | depart,straight,straight,straight,straight,via,straight,straight,straight,straight,arrive | - | 6,5,4 | bc,cd,da,ab,bc,bc,cd,da,ab,bc | 3000m +-1 | depart,straight,straight,straight,straight,via,straight,straight,straight,straight,arrive | - | 9,8,7 | cd,da,ab,bc,cd,cd,da,ab,bc,cd | 3000m +-1 | depart,straight,straight,straight,straight,via,straight,straight,straight,straight,arrive | + | waypoints | route | distance | + | 3,2,1 | ab,bc,cd,da,ab,ab,ab,bc,cd,da,ab,ab | 3000m +-1 | + | 6,5,4 | bc,cd,da,ab,bc,bc,bc,cd,da,ab,bc,bc | 3000m +-1 | + | 9,8,7 | cd,da,ab,bc,cd,cd,cd,da,ab,bc,cd,cd | 3000m +-1 | diff --git a/include/engine/routing_algorithms/routing_base.hpp b/include/engine/routing_algorithms/routing_base.hpp index 04fc925f2..0a9b1f28a 100644 --- a/include/engine/routing_algorithms/routing_base.hpp +++ b/include/engine/routing_algorithms/routing_base.hpp @@ -328,62 +328,42 @@ template class BasicRoutingInterface BOOST_ASSERT(unpacked_path.size() > 0); unpacked_path.back().turn_instruction = turn_instruction; unpacked_path.back().duration_until_turn += (ed.distance - total_weight); - - if (is_first_segment) - { - auto source_weight = start_traversed_in_reverse - ? phantom_node_pair.source_phantom.reverse_weight - : phantom_node_pair.source_phantom.forward_weight; - // Given this geometry: - // U---v---w---x---Z - // s - // The above code will create segments for (v, w), (w,x) and (x, Z). - // However the first segment duration needs to be adjusted to the fact that the - // source phantom is in the middle of the segment. - // We do this by subtracting v--s from the duration. - - BOOST_ASSERT(unpacked_path.front().duration_until_turn >= source_weight); - unpacked_path.front().duration_until_turn -= source_weight; - } } } + std::size_t start_index = 0, end_index = 0; std::vector id_vector; - facade->GetUncompressedGeometry(phantom_node_pair.target_phantom.forward_packed_geometry_id, - id_vector); std::vector weight_vector; - facade->GetUncompressedWeights(phantom_node_pair.target_phantom.forward_packed_geometry_id, - weight_vector); const bool is_local_path = (phantom_node_pair.source_phantom.forward_packed_geometry_id == phantom_node_pair.target_phantom.forward_packed_geometry_id) && unpacked_path.empty(); - std::size_t start_index = 0; - if (is_local_path) + if (target_traversed_in_reverse) { - if (target_traversed_in_reverse) + facade->GetUncompressedGeometry( + phantom_node_pair.target_phantom.reverse_packed_geometry_id, id_vector); + + facade->GetUncompressedWeights( + phantom_node_pair.target_phantom.reverse_packed_geometry_id, weight_vector); + + if (is_local_path) { start_index = id_vector.size() - phantom_node_pair.source_phantom.fwd_segment_position - 1; } - else + end_index = id_vector.size() - phantom_node_pair.target_phantom.fwd_segment_position - 1; + } + else + { + if (is_local_path) { start_index = phantom_node_pair.source_phantom.fwd_segment_position; } - } + end_index = phantom_node_pair.target_phantom.fwd_segment_position; + facade->GetUncompressedGeometry( + phantom_node_pair.target_phantom.forward_packed_geometry_id, id_vector); - std::size_t end_index = phantom_node_pair.target_phantom.fwd_segment_position; - const std::size_t delta = target_traversed_in_reverse ? 1 : 0; - if (target_traversed_in_reverse) - { - start_index += 1; - std::reverse(id_vector.begin(), id_vector.end()); - std::reverse(weight_vector.begin(), weight_vector.end()); - end_index = id_vector.size() - phantom_node_pair.target_phantom.fwd_segment_position; - } - - if (start_index > end_index) - { - start_index = std::min(start_index, id_vector.size() - 1); + facade->GetUncompressedWeights( + phantom_node_pair.target_phantom.forward_packed_geometry_id, weight_vector); } // Given the following compressed geometry: @@ -393,21 +373,22 @@ template class BasicRoutingInterface // t: fwd_segment 3 // -> (U, v), (v, w), (w, x) // note that (x, t) is _not_ included but needs to be added later. - for (std::size_t i = start_index; i != end_index; (start_index < end_index ? ++i : --i)) + BOOST_ASSERT(start_index <= end_index); + for (std::size_t i = start_index; i != end_index; ++i) { BOOST_ASSERT(i < id_vector.size()); BOOST_ASSERT(phantom_node_pair.target_phantom.forward_travel_mode > 0); unpacked_path.push_back( PathData{id_vector[i], phantom_node_pair.target_phantom.name_id, - weight_vector[i - delta], + weight_vector[i], extractor::guidance::TurnInstruction::NO_TURN(), target_traversed_in_reverse ? phantom_node_pair.target_phantom.backward_travel_mode : phantom_node_pair.target_phantom.forward_travel_mode}); } - if (is_local_path && unpacked_path.size() > 0) + if (unpacked_path.size() > 0) { const auto source_weight = start_traversed_in_reverse ? phantom_node_pair.source_phantom.reverse_weight diff --git a/profiles/bicycle.lua b/profiles/bicycle.lua index a2b090842..426929226 100644 --- a/profiles/bicycle.lua +++ b/profiles/bicycle.lua @@ -347,7 +347,7 @@ function way_function (way, result) if impliedOneway then result.forward_mode = mode.cycling result.backward_speed = bicycle_speeds["cycleway"] - result.backward_mode = mode.cycling + result.backward_mode = mode.inaccessible end elseif oneway == "-1" then result.forward_mode = mode.inaccessible diff --git a/profiles/testbot.lua b/profiles/testbot.lua index 5402c561f..aecffae35 100644 --- a/profiles/testbot.lua +++ b/profiles/testbot.lua @@ -70,13 +70,13 @@ function way_function (way, result) if highway == "river" then local temp_speed = speed_forw - result.forward_mode = mode.river_up - result.backward_mode = mode.river_down + result.forward_mode = mode.river_down + result.backward_mode = mode.river_up speed_forw = temp_speed*1.5 speed_back = temp_speed/1.5 elseif highway == "steps" then - result.forward_mode = mode.steps_up - result.backward_mode = mode.steps_down + result.forward_mode = mode.steps_down + result.backward_mode = mode.steps_up end if maxspeed_forward ~= nil and maxspeed_forward > 0 then diff --git a/src/engine/guidance/post_processing.cpp b/src/engine/guidance/post_processing.cpp index 9f0da02eb..0f3fc34ad 100644 --- a/src/engine/guidance/post_processing.cpp +++ b/src/engine/guidance/post_processing.cpp @@ -301,7 +301,7 @@ void trimShortSegments(std::vector &steps, LegGeometry &geometry) // few seconds of inaccuracy at both ends. This is acceptable, however, since the turn should // usually not be as relevant. - if (steps.size() < 2) + if (steps.size() < 2 || geometry.locations.size() <= 2) return; // if phantom node is located at the connection of two segments, either one can be selected as @@ -320,7 +320,8 @@ void trimShortSegments(std::vector &steps, LegGeometry &geometry) BOOST_ASSERT(geometry.locations.size() >= steps.size()); // Look for distances under 1m const bool zero_length_step = steps.front().distance <= 1; - const bool duplicated_coordinate = geometry.locations[0] == geometry.locations[1]; + const bool duplicated_coordinate = util::coordinate_calculation::haversineDistance( + geometry.locations[0], geometry.locations[1]) <= 1; if (zero_length_step || duplicated_coordinate) { // fixup the coordinate @@ -381,7 +382,7 @@ void trimShortSegments(std::vector &steps, LegGeometry &geometry) } // make sure we still have enough segments - if (steps.size() < 2) + if (steps.size() < 2 || geometry.locations.size() == 2) return; BOOST_ASSERT(geometry.locations.size() >= steps.size()); @@ -410,8 +411,9 @@ void trimShortSegments(std::vector &steps, LegGeometry &geometry) next_to_last_step.mode = new_next_to_last.mode; // the geometry indices of the last step are already correct; } - else if (geometry.locations[geometry.locations.size() - 2] == - geometry.locations[geometry.locations.size() - 1]) + else if (util::coordinate_calculation::haversineDistance( + geometry.locations[geometry.locations.size() - 2], + geometry.locations[geometry.locations.size() - 1]) <= 1) { // correct steps but duplicated coordinate in the end. // This can happen if the last coordinate snaps to a node in the unpacked geometry diff --git a/src/extractor/guidance/turn_analysis.cpp b/src/extractor/guidance/turn_analysis.cpp index 45a95867d..0281e16ed 100644 --- a/src/extractor/guidance/turn_analysis.cpp +++ b/src/extractor/guidance/turn_analysis.cpp @@ -749,6 +749,9 @@ TurnInstruction TurnAnalysis::getInstructionForObvious(const std::size_t num_roa const ConnectedRoad &road) const { const auto type = findBasicTurnType(via_edge, road); + // handle travel modes: + const auto in_mode = node_based_graph.GetEdgeData(via_edge).travel_mode; + const auto out_mode = node_based_graph.GetEdgeData(road.turn.eid).travel_mode; if (type == TurnType::Ramp) { return {TurnType::Ramp, getTurnDirection(road.turn.angle)}; @@ -767,9 +770,18 @@ TurnInstruction TurnAnalysis::getInstructionForObvious(const std::size_t num_roa name_table.GetNameForID(out_data.name_id))) return {TurnType::NewName, getTurnDirection(road.turn.angle)}; else - return {TurnType::Suppressed, getTurnDirection(road.turn.angle)}; + { + if (in_mode == out_mode) + return {TurnType::Suppressed, getTurnDirection(road.turn.angle)}; + else + return {TurnType::Notification, getTurnDirection(road.turn.angle)}; + } } BOOST_ASSERT(type == TurnType::Continue); + if (in_mode != out_mode) + { + return {TurnType::Notification, getTurnDirection(road.turn.angle)}; + } if (num_roads > 2) { return {TurnType::Suppressed, getTurnDirection(road.turn.angle)}; @@ -984,17 +996,9 @@ TurnAnalysis::handleThreeWayTurn(const EdgeID via_edge, } else { - const unsigned in_name_id = node_based_graph.GetEdgeData(via_edge).name_id; - const unsigned out_names[2] = { - node_based_graph.GetEdgeData(intersection[1].turn.eid).name_id, - node_based_graph.GetEdgeData(intersection[2].turn.eid).name_id}; if (isObviousOfTwo(intersection[1], intersection[2])) { - intersection[1].turn.instruction = { - (in_name_id != INVALID_NAME_ID || out_names[0] != INVALID_NAME_ID) - ? TurnType::NewName - : TurnType::NoTurn, - getTurnDirection(intersection[1].turn.angle)}; + intersection[1].turn.instruction = getInstructionForObvious(3,via_edge,intersection[1]); } else { @@ -1004,11 +1008,7 @@ TurnAnalysis::handleThreeWayTurn(const EdgeID via_edge, if (isObviousOfTwo(intersection[2], intersection[1])) { - intersection[2].turn.instruction = { - (in_name_id != INVALID_NAME_ID || out_names[1] != INVALID_NAME_ID) - ? TurnType::NewName - : TurnType::NoTurn, - getTurnDirection(intersection[2].turn.angle)}; + intersection[2].turn.instruction = getInstructionForObvious(3,via_edge,intersection[2]); } else {