786 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			Gherkin
		
	
	
	
	
	
			
		
		
	
	
			786 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			Gherkin
		
	
	
	
	
	
| @routing @guidance @turn-lanes
 | ||
| Feature: Turn Lane Guidance
 | ||
| 
 | ||
|     Background:
 | ||
|         Given the profile "car"
 | ||
|         Given a grid size of 20 meters
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Anticipate Lane Change for subsequent multi-lane intersections
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c – d – z
 | ||
|                 |   |
 | ||
|                 y   e
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward           |
 | ||
|             | ab    | through\|right\|right\|right |
 | ||
|             | bx    |                              |
 | ||
|             | bc    | left\|left\|through          |
 | ||
|             | cd    | through\|right               |
 | ||
|             | cy    |                              |
 | ||
|             | dz    |                              |
 | ||
|             | de    |                              |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route          | turns                                         | lanes                                                                                                             | #      |
 | ||
|             | a,d       | ab,bc,cd,cd    | depart,turn right,turn left,arrive            | ,straight:false right:true right:true right:false,left:true left:true straight:false,                             | 2 hops |
 | ||
|             | a,e       | ab,bc,cd,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:false right:true right:false,left:false left:true straight:false,straight:false right:true, | 3 hops |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Anticipate Lane Change for quick same direction turns, staying on the same street
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c
 | ||
|                 |
 | ||
|             e – d – y
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward    | turn:lanes:backward | name |
 | ||
|             | ab    | through\|right\|right |                     | MySt |
 | ||
|             | bx    |                       |                     | XSt  |
 | ||
|             | bc    |                       | left\|right         | MySt |
 | ||
|             | cd    | left\|right           | through\|through    | MySt |
 | ||
|             | de    |                       | left\|left\|through | MySt |
 | ||
|             | dy    |                       |                     | YSt  |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route               | turns                                   | lanes                                                         |
 | ||
|             | a,e       | MySt,MySt,MySt,MySt | depart,continue right,turn right,arrive | ,straight:false right:false right:true,left:false right:true, |
 | ||
|             | e,a       | MySt,MySt,MySt,MySt | depart,continue left,turn left,arrive   | ,left:true left:false straight:false,left:true right:false,   |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Anticipate Lane Change for quick same direction turns, changing between streets
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c
 | ||
|                 |
 | ||
|             e – d – y
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward    | turn:lanes:backward | name |
 | ||
|             | ab    | through\|right\|right |                     | AXSt |
 | ||
|             | bx    |                       |                     | AXSt |
 | ||
|             | bc    |                       | left\|right         | BDSt |
 | ||
|             | cd    | left\|right           | through\|through    | BDSt |
 | ||
|             | de    |                       | left\|left\|through | EYSt |
 | ||
|             | dy    |                       |                     | EYSt |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route               | turns                               | lanes                                                         |
 | ||
|             | a,e       | AXSt,BDSt,EYSt,EYSt | depart,turn right,turn right,arrive | ,straight:false right:false right:true,left:false right:true, |
 | ||
|             | e,a       | EYSt,BDSt,AXSt,AXSt | depart,turn left,turn left,arrive   | ,left:true left:false straight:false,left:true right:false,   |
 | ||
| 
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Anticipate Lane Change for quick turns during a merge
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a
 | ||
|               \
 | ||
|             x – b – c – y
 | ||
|                     |
 | ||
|                     d
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward       | name | highway       | oneway |
 | ||
|             | ab    | slight_left\|slight_left | On   | motorway_link | yes    |
 | ||
|             | xb    |                          | Hwy  | motorway      |        |
 | ||
|             | bc    | through\|slight_right    | Hwy  | motorway      |        |
 | ||
|             | cd    |                          | Off  | motorway_link | yes    |
 | ||
|             | cy    |                          | Hwy  | motorway      |        |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route          | turns                                           | lanes                                                                 |
 | ||
|             | a,d       | On,Hwy,Off,Off | depart,merge slight right,off ramp right,arrive | ,slight left:false slight left:true,straight:false slight right:true, |
 | ||
| 
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Schoenefelder Kreuz
 | ||
|     # https://www.openstreetmap.org/way/264306388#map=16/52.3202/13.5568
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a b – x
 | ||
|                 \       / i
 | ||
|                   c – d
 | ||
|                         \ j
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward                                  | lanes | highway       | oneway | name |
 | ||
|             | ab    | none\|none\|none\|slight_right\|slight_right        |   5   | motorway      |        | abx  |
 | ||
|             | bx    |                                                     |   3   | motorway      |        | abx  |
 | ||
|             | bc    |                                                     |   2   | motorway_link | yes    | bcd  |
 | ||
|             | cd    | slight_left\|slight_left;slight_right\|slight_right |   3   | motorway_link | yes    | bcd  |
 | ||
|             | di    | slight_left\|slight_right                           |   2   | motorway_link | yes    | di   |
 | ||
|             | dj    |                                                     |   2   | motorway_link | yes    | dj   |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route         | turns                                          | lanes                                                                                                                                    |
 | ||
|             | a,i       | abx,bcd,di,di | depart,off ramp right,fork slight left,arrive  | ,none:false none:false none:false slight right:true slight right:true,slight left:true slight left;slight right:true slight right:false, |
 | ||
|             | a,j       | abx,bcd,dj,dj | depart,off ramp right,fork slight right,arrive | ,none:false none:false none:false slight right:true slight right:true,slight left:false slight left;slight right:true slight right:true, |
 | ||
| 
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Kreuz Oranienburg
 | ||
|     # https://www.openstreetmap.org/way/4484007#map=18/52.70439/13.20269
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             i               a
 | ||
|               ' .       . '
 | ||
|             j – – c – b – – x
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward | lanes | highway       | oneway | name |
 | ||
|             | ab    |                    | 1     | motorway_link | yes    | ab   |
 | ||
|             | xb    |                    | 1     | motorway_link | yes    | xbcj |
 | ||
|             | bc    | none\|slight_right | 2     | motorway_link | yes    | xbcj |
 | ||
|             | ci    |                    | 1     | motorway_link | yes    | ci   |
 | ||
|             | cj    |                    | 1     | motorway_link | yes    | xbcj |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route        | turns                           | lanes                          |
 | ||
|             | a,i       | ab,ci,ci     | depart,turn slight right,arrive | ,none:false slight right:true, |
 | ||
|             | a,j       | ab,xbcj      | depart,arrive                   | ,                              |
 | ||
| 
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Lane anticipation for fan-in
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c – d – z
 | ||
|                 |   |
 | ||
|                 y   e
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward           | name |
 | ||
|             | ab    | through\|right\|right\|right | abx  |
 | ||
|             | bx    |                              | abx  |
 | ||
|             | bc    | left\|left\|through          | bcy  |
 | ||
|             | cy    |                              | bcy  |
 | ||
|             | cd    | through\|right               | cdz  |
 | ||
|             | dz    |                              | cdz  |
 | ||
|             | de    |                              | de   |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route             | turns                                         | lanes                                                                                                             |
 | ||
|             | a,e       | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:false right:true right:false,left:false left:true straight:false,straight:false right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Lane anticipation for fan-out
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c – d – z
 | ||
|                 |   |
 | ||
|                 y   e
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward           | name |
 | ||
|             | ab    | through\|right               | abx  |
 | ||
|             | bx    |                              | abx  |
 | ||
|             | bc    | left\|left\|through          | bcy  |
 | ||
|             | cy    |                              | bcy  |
 | ||
|             | cd    | through\|right\|right\|right | cdz  |
 | ||
|             | dz    |                              | cdz  |
 | ||
|             | de    |                              | de   |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route             | turns                                         | lanes                                                                                                          |
 | ||
|             | a,e       | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:true,left:true left:true straight:false,straight:false right:true right:true right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Lane anticipation for fan-in followed by fan-out
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c – d – z
 | ||
|                 |   |
 | ||
|                 y   e
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward           | name |
 | ||
|             | ab    | through\|right\|right\|right | abx  |
 | ||
|             | bx    |                              | abx  |
 | ||
|             | bc    | left\|left\|through          | bcy  |
 | ||
|             | cy    |                              | bcy  |
 | ||
|             | cd    | through\|right\|right\|right | cdz  |
 | ||
|             | dz    |                              | cdz  |
 | ||
|             | de    |                              | de   |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route             | turns                                         | lanes                                                                                                                                 |
 | ||
|             | a,e       | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:true right:true right:false,left:true left:true straight:false,straight:false right:true right:true right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Lane anticipation for fan-out followed by fan-in
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c – d – z
 | ||
|                 |   |
 | ||
|                 y   e
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward  | name |
 | ||
|             | ab    | through\|right      | abx  |
 | ||
|             | bx    |                     | abx  |
 | ||
|             | bc    | left\|left\|through | bcy  |
 | ||
|             | cy    |                     | bcy  |
 | ||
|             | cd    | through\|right      | cdz  |
 | ||
|             | dz    |                     | cdz  |
 | ||
|             | de    |                     | de   |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route             | turns                                         | lanes                                                                                     |
 | ||
|             | a,e       | abx,bcy,cdz,de,de | depart,turn right,turn left,turn right,arrive | ,straight:false right:true,left:false left:true straight:false,straight:false right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Lane anticipation for multiple hops with same number of lanes
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b – x
 | ||
|                 |
 | ||
|                 c – d – z
 | ||
|                 |   |
 | ||
|                 y   e – f
 | ||
|                     |
 | ||
|                     w
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward           | name |
 | ||
|             | ab    | through\|right\|right\|right | abx  |
 | ||
|             | bx    |                              | abx  |
 | ||
|             | bc    | left\|left\|through          | bcy  |
 | ||
|             | cy    |                              | bcy  |
 | ||
|             | cd    | through\|right\|right        | cdz  |
 | ||
|             | dz    |                              | cdz  |
 | ||
|             | de    | left\|through                | dew  |
 | ||
|             | ew    |                              | dew  |
 | ||
|             | ef    |                              | ef   |
 | ||
| 
 | ||
|        When I route I should get
 | ||
|             | waypoints | route                 | turns                                                   | lanes                                                                                                                                                  |
 | ||
|             | a,f       | abx,bcy,cdz,dew,ef,ef | depart,turn right,turn left,turn right,turn left,arrive | ,straight:false right:true right:false right:false,left:true left:false straight:false,straight:false right:true right:false,left:true straight:false, |
 | ||
| 
 | ||
|        @anticipate
 | ||
|        Scenario: Anticipate Lanes for through, through with lanes
 | ||
|            Given the node map
 | ||
|                """
 | ||
|                          f   g
 | ||
|                         /   /
 | ||
|                a – b – c – d – e
 | ||
|                         \   \
 | ||
|                          h   i
 | ||
|                """
 | ||
| 
 | ||
|            And the ways
 | ||
|                | nodes | turn:lanes:forward                     | name |
 | ||
|                | ab    |                                        | main |
 | ||
|                | bc    | left\|through\|through\|through\|right | main |
 | ||
|                | cd    | left\|through\|right                   | main |
 | ||
|                | de    |                                        | main |
 | ||
|                | cf    |                                        | off  |
 | ||
|                | ch    |                                        | off  |
 | ||
|                | dg    |                                        | off  |
 | ||
|                | di    |                                        | off  |
 | ||
| 
 | ||
|           When I route I should get
 | ||
|                | waypoints | route          | turns                           | lanes                                                                |
 | ||
|                | a,e       | main,main,main | depart,use lane straight,arrive | ,left:false straight:false straight:true straight:false right:false, |
 | ||
| 
 | ||
|        @anticipate
 | ||
|        Scenario: Anticipate Lanes for through and collapse multiple use lanes
 | ||
|            Given the node map
 | ||
|                """
 | ||
|                      e   f   g
 | ||
|                     /   /   /
 | ||
|                a – b – c – d
 | ||
|                     \   \   \
 | ||
|                      h   i   j
 | ||
|                """
 | ||
| 
 | ||
|            And the ways
 | ||
|                | nodes | turn:lanes:forward                     | name |
 | ||
|                | ab    | left\|through\|through\|right          | main |
 | ||
|                | bc    | left\|through\|through\|right          | main |
 | ||
|                | cd    | left\|through\|through\|through\|right | main |
 | ||
|                | be    |                                        | off  |
 | ||
|                | bh    |                                        | off  |
 | ||
|                | cf    |                                        | off  |
 | ||
|                | ci    |                                        | off  |
 | ||
|                | dg    |                                        | off  |
 | ||
|                | dj    |                                        | off  |
 | ||
| 
 | ||
|           When I route I should get
 | ||
|                | waypoints | route     | turns         | lanes |
 | ||
|                | a,c       | main,main | depart,arrive | ,     |
 | ||
|                | a,d       | main,main | depart,arrive | ,     |
 | ||
| 
 | ||
|        @anticipate
 | ||
|        Scenario: Anticipate Lanes for through followed by left/right
 | ||
|            Given the node map
 | ||
|                """
 | ||
|                      f   g   d
 | ||
|                     /   /   /
 | ||
|                a – b – c – x
 | ||
|                     \   \   \
 | ||
|                      h   i   e
 | ||
|                """
 | ||
| 
 | ||
|            And the ways
 | ||
|                | nodes | turn:lanes:forward                              | name  |
 | ||
|                | ab    | left\|through\|through\|through\|through\|right | main  |
 | ||
|                | bc    | left\|through\|through\|right                   | main  |
 | ||
|                | cx    | left\|right                                     | main  |
 | ||
|                | xd    |                                                 | left  |
 | ||
|                | xe    |                                                 | right |
 | ||
|                | bf    |                                                 | off   |
 | ||
|                | bh    |                                                 | off   |
 | ||
|                | cg    |                                                 | off   |
 | ||
|                | ci    |                                                 | off   |
 | ||
| 
 | ||
|           When I route I should get
 | ||
|                | waypoints | route                      | turns                                                        | lanes                                                                                                                                                         |
 | ||
|                | a,d       | main,main,main,left,left   | depart,use lane straight,use lane straight,turn left,arrive  | ,left:false straight:false straight:true straight:false straight:false right:false,left:false straight:true straight:false right:false,left:true right:false, |
 | ||
|                | a,e       | main,main,main,right,right | depart,use lane straight,use lane straight,turn right,arrive | ,left:false straight:false straight:false straight:true straight:false right:false,left:false straight:false straight:true right:false,left:false right:true, |
 | ||
| 
 | ||
|        @anticipate
 | ||
|        Scenario: Anticipate Lanes for through with turn before / after
 | ||
|            Given the node map
 | ||
|                """
 | ||
|                c       g       l
 | ||
|                b – d – e – h - i
 | ||
|                a       f       j
 | ||
|                """
 | ||
| 
 | ||
|            And the ways
 | ||
|                | nodes | turn:lanes:forward                                           | name  | oneway |
 | ||
|                | ab    | right\|right\|right\|right                                   | ab    | yes    |
 | ||
|                | cb    | left\|left\|left\|left                                       | cb    | yes    |
 | ||
|                | bd    |                                                              | bdehi |        |
 | ||
|                | de    | left\|left\|through\|through\|through\|through\|right\|right | bdehi |        |
 | ||
|                | ef    |                                                              | ef    |        |
 | ||
|                | eg    |                                                              | eg    |        |
 | ||
|                | eh    |                                                              | bdehi |        |
 | ||
|                | hi    | left\|left\|right\|right                                     | bdehi |        |
 | ||
|                | ij    |                                                              | ij    |        |
 | ||
|                | il    |                                                              | il    |        |
 | ||
| 
 | ||
|           When I route I should get
 | ||
|                | waypoints | route                | turns                                                 | lanes                                                                                                                                                                                               | #           |
 | ||
|                | a,f       | ab,bdehi,ef,ef       | depart,turn right,turn right,arrive                   | ,right:false right:false right:true right:true,left:false left:false straight:false straight:false straight:false straight:false right:true right:true,                                             |             |
 | ||
|                | a,g       | ab,bdehi,eg,eg       | depart,turn right,turn left,arrive                    | ,right:true right:true right:false right:false,left:true left:true straight:false straight:false straight:false straight:false right:false right:false,                                             |             |
 | ||
|                | a,j       | ab,bdehi,bdehi,ij,ij | depart,turn right,use lane straight,turn right,arrive | ,right:true right:true right:false right:false,left:false left:false straight:false straight:false straight:true straight:true right:false right:false,left:false left:false right:true right:true, |             |
 | ||
|                | a,l       | ab,bdehi,bdehi,il,il | depart,turn right,use lane straight,turn left,arrive  | ,right:false right:false right:true right:true,left:false left:false straight:true straight:true straight:false straight:false right:false right:false,left:true left:true right:false right:false, | not perfect |
 | ||
|                | c,g       | cb,bdehi,eg,eg       | depart,turn left,turn left,arrive                     | ,left:true left:true left:false left:false,left:true left:true straight:false straight:false straight:false straight:false right:false right:false,                                                 |             |
 | ||
|                | c,f       | cb,bdehi,ef,ef       | depart,turn left,turn right,arrive                    | ,left:false left:false left:true left:true,left:false left:false straight:false straight:false straight:false straight:false right:true right:true,                                                 |             |
 | ||
|                | c,l       | cb,bdehi,bdehi,il,il | depart,turn left,use lane straight,turn left,arrive   | ,left:false left:false left:true left:true,left:false left:false straight:true straight:true straight:false straight:false right:false right:false,left:true left:true right:false right:false,     |             |
 | ||
|                | c,j       | cb,bdehi,bdehi,ij,ij | depart,turn left,use lane straight,turn right,arrive  | ,left:true left:true left:false left:false,left:false left:false straight:false straight:false straight:true straight:true right:false right:false,left:false left:false right:true right:true,     | not perfect |
 | ||
| 
 | ||
|        @anticipate
 | ||
|        Scenario: Anticipate Lanes for turns with through before and after
 | ||
|            Given a grid size of 10 meters
 | ||
|            Given the node map
 | ||
|                """
 | ||
|                a – b – q       s   h – i
 | ||
|                      \       /   /
 | ||
|                        e – f – g
 | ||
|                      /       \   \
 | ||
|                c – d – r       t   j – k
 | ||
| 
 | ||
|                """
 | ||
| 
 | ||
|            And the ways
 | ||
|                | nodes | turn:lanes:forward                              | name |
 | ||
|                | ab    | through\|right\|right\|right                    | top  |
 | ||
|                | be    |                                                 | top  |
 | ||
|                | bq    |                                                 | off  |
 | ||
|                | ef    | left\|through\|through\|through\|through\|right | main |
 | ||
|                | fg    | left\|left\|right\|right                        | main |
 | ||
|                | fs    |                                                 | off  |
 | ||
|                | ft    |                                                 | off  |
 | ||
|                | gh    |                                                 | top  |
 | ||
|                | hi    |                                                 | top  |
 | ||
|                | cd    | left\|left\|left\|through                       | bot  |
 | ||
|                | de    |                                                 | bot  |
 | ||
|                | dr    |                                                 | off  |
 | ||
|                | gj    |                                                 | bot  |
 | ||
|                | jk    |                                                 | bot  |
 | ||
| 
 | ||
|           When I route I should get
 | ||
|                | waypoints | route                 | turns                                                  | lanes                                                                                                                                                                           |
 | ||
|                | a,i       | top,main,main,top,top | depart,turn right,use lane straight,turn left,arrive   | ,straight:false right:false right:true right:true,left:false straight:true straight:true straight:false straight:false right:false,left:true left:true right:false right:false, |
 | ||
|                | a,k       | top,main,main,bot,bot | depart,turn right,use lane straight,turn right,arrive  | ,straight:false right:true right:true right:false,left:false straight:false straight:false straight:true straight:true right:false,left:false left:false right:true right:true, |
 | ||
|                | c,i       | bot,main,main,top,top | depart,turn left,use lane straight,turn left,arrive    | ,left:false left:true left:true straight:false,left:false straight:true straight:true straight:false straight:false right:false,left:true left:true right:false right:false,    |
 | ||
|                | c,k       | bot,main,main,bot,bot | depart,turn left,use lane straight,turn right,arrive   | ,left:true left:true left:false straight:false,left:false straight:false straight:false straight:true straight:true right:false,left:false left:false right:true right:true,    |
 | ||
| 
 | ||
|        @anticipate
 | ||
|        Scenario: Anticipate Lanes for turn between throughs
 | ||
|            Given the node map
 | ||
|                """
 | ||
|                    q
 | ||
|                    |
 | ||
|                a – b – c – s
 | ||
|                    |   |
 | ||
|                    r   d – t
 | ||
|                        |
 | ||
|                        e
 | ||
|                """
 | ||
| 
 | ||
|            And the ways
 | ||
|                | nodes | turn:lanes:forward                                       | name |
 | ||
|                | ab    | left\|through\|through\|through\|through\|through\|right | main |
 | ||
|                | bq    |                                                          | off  |
 | ||
|                | br    |                                                          | off  |
 | ||
|                | bc    | through\|through\|right\|right\|right                    | main |
 | ||
|                | cs    |                                                          | off  |
 | ||
|                | cd    | left\|through\|through                                   | main |
 | ||
|                | de    |                                                          | main |
 | ||
|                | dt    |                                                          | off  |
 | ||
| 
 | ||
|           When I route I should get
 | ||
|                | waypoints | route               | turns                                          | lanes                                                                                                                                                             |
 | ||
|                | a,e       | main,main,main,main | depart,use lane straight,continue right,arrive | ,left:false straight:false straight:false straight:false straight:true straight:true right:false,straight:false straight:false right:false right:true right:true, |
 | ||
| 
 | ||
|     @anticipate @todo @2661
 | ||
|     Scenario: Anticipate with lanes in roundabout: roundabouts as the unit of anticipation
 | ||
|         Given the node map
 | ||
|             """
 | ||
|                  /e\
 | ||
|             a – b   d – f
 | ||
|                  \c/
 | ||
|                   |
 | ||
|                  /g\
 | ||
|             k – h   j – l
 | ||
|                  \i/
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward                       | highway | junction   | #   |
 | ||
|             | ab    | slight_right\|slight_right\|slight_right | primary |            |     |
 | ||
|             | bc    | slight_left\|slight_right\|slight_right  | primary | roundabout | top |
 | ||
|             | cd    |                                          | primary | roundabout | top |
 | ||
|             | de    |                                          | primary | roundabout | top |
 | ||
|             | eb    |                                          | primary | roundabout | top |
 | ||
|             | df    |                                          | primary |            |     |
 | ||
|             | cg    | slight_right\|slight_right               | primary |            |     |
 | ||
|             | gh    | slight_left\|slight_right                | primary | roundabout | bot |
 | ||
|             | hi    |                                          | primary | roundabout | bot |
 | ||
|             | ij    | slight_left\|slight_right                | primary | roundabout | bot |
 | ||
|             | jg    |                                          | primary | roundabout | bot |
 | ||
|             | hk    |                                          | primary |            |     |
 | ||
|             | jl    |                                          | primary |            |     |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | #           | waypoints | route       | turns                                             | lanes                                                                                          |
 | ||
|             | right-right | a,k       | ab,cg,hk,hk | depart,roundabout-exit-1,roundabout-exit-1,arrive | ,slight right:false slight right:false slight right:true,slight right:false slight right:true, |
 | ||
|             | right-left  | a,l       | ab,cg,jl,jl | depart,roundabout-exit-1,roundabout-exit-2,arrive | ,slight right:false slight right:false slight right:true,slight right:false slight right:true, |
 | ||
|             | todo exits  | a,f       | ab,df,df    | depart,roundabout-exit-2,arrive                   | ,slight right:false slight right:false slight right:true,                                      |
 | ||
|             | todo exits  | a,e       | ab,bc,eb    | depart,roundabout-exit-undefined,arrive           | ,slight right:true slight right:true slight right:true,                                        |
 | ||
| 
 | ||
|     @anticipate @todo
 | ||
|     Scenario: Roundabout with lanes only tagged on exit
 | ||
|         Given the node map
 | ||
|             """
 | ||
|                  /e\
 | ||
|             a – b   d – f
 | ||
|                  \c/
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward                     | highway | junction   |
 | ||
|             | ab    |                                        | primary |            |
 | ||
|             | bc    |                                        | primary | roundabout |
 | ||
|             | cd    | slight_left\|slight_left\|slight_right | primary | roundabout |
 | ||
|             | de    |                                        | primary | roundabout |
 | ||
|             | eb    |                                        | primary | roundabout |
 | ||
|             | df    |                                        | primary |            |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route    | turns                                                 | lanes                                                    |
 | ||
|             | a,f       | ab,df,df | depart,roundabout-exit-1,use lane slight right,arrive | ,,slight left:false slight left:false slight right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: No Lanes for Roundabouts, see #2626
 | ||
|         Given the node map
 | ||
|             """
 | ||
|                 a
 | ||
|                 |
 | ||
|                /b\
 | ||
|               c   g – h
 | ||
|              /|   |
 | ||
|             | d   f
 | ||
|             |/ \e/ \
 | ||
|             x     \ y
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward         | highway | junction   |
 | ||
|             | ab    | slight_right\|slight_right | primary |            |
 | ||
|             | bc    |                            | primary | roundabout |
 | ||
|             | cd    |                            | primary | roundabout |
 | ||
|             | de    |                            | primary | roundabout |
 | ||
|             | ef    |                            | primary | roundabout |
 | ||
|             | fg    | through\|slight_right      | primary | roundabout |
 | ||
|             | gb    |                            | primary | roundabout |
 | ||
|             | gh    |                            | primary |            |
 | ||
|             | cx    |                            | primary |            |
 | ||
|             | dx    |                            | primary |            |
 | ||
|             | ey    |                            | primary |            |
 | ||
|             | fy    |                            | primary |            |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route    | turns                           | lanes |
 | ||
|             | a,h       | ab,gh,gh | depart,roundabout-exit-5,arrive | ,,    |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: No Lanes for Roundabouts, see #2626
 | ||
|         Given the node map
 | ||
|             """
 | ||
|                  /a\
 | ||
|             x – b   d – y
 | ||
|                  \c/
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward         | highway | junction   | name       |
 | ||
|             | xb    | slight_right\|slight_right | primary |            | xb         |
 | ||
|             | dy    |                            | primary |            | dy         |
 | ||
|             | ab    |                            | primary | roundabout | roundabout |
 | ||
|             | bc    |                            | primary | roundabout | roundabout |
 | ||
|             | cd    | left\|slight_right         | primary | roundabout | roundabout |
 | ||
|             | da    |                            | primary | roundabout | roundabout |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route                    | turns                                   | lanes |
 | ||
|             | x,y       | xb,dy,dy                 | depart,roundabout-exit-1,arrive         | ,,    |
 | ||
|             | x,c       | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,,    |
 | ||
|             | x,a       | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,,    |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: No Lanes for Roundabouts, see #2626
 | ||
|         Given the profile file "car" extended with
 | ||
|         """
 | ||
|         properties.left_hand_driving = true
 | ||
|         """
 | ||
|         And the node map
 | ||
|             """
 | ||
|                   a
 | ||
|                   |
 | ||
|                  /b\
 | ||
|             h – c   g
 | ||
|                 |   |\
 | ||
|                 d   f |
 | ||
|                / \e/ \|
 | ||
|               x /     y
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward         | highway | junction   |
 | ||
|             | ab    | slight_left\|slight_left   | primary |            |
 | ||
|             | bg    |                            | primary | roundabout |
 | ||
|             | gf    |                            | primary | roundabout |
 | ||
|             | fe    |                            | primary | roundabout |
 | ||
|             | ed    |                            | primary | roundabout |
 | ||
|             | dc    | slight_left                | primary | roundabout |
 | ||
|             | cb    |                            | primary | roundabout |
 | ||
|             | ch    |                            | primary |            |
 | ||
|             | ex    |                            | primary |            |
 | ||
|             | dx    |                            | primary |            |
 | ||
|             | gy    |                            | primary |            |
 | ||
|             | fy    |                            | primary |            |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route      | turns                           | lanes |
 | ||
|             | a,h       | ab,ch,ch   | depart,roundabout-exit-5,arrive | ,,    |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: No Lanes for Roundabouts, see #2626
 | ||
|         Given the node map
 | ||
|             """
 | ||
|                  /a\
 | ||
|             x – b   d – y
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                 |   |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                  | |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   |
 | ||
|                   c
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward         | highway | junction   | name       |
 | ||
|             | xb    | slight_right\|slight_right | primary |            | xb         |
 | ||
|             | dy    |                            | primary |            | dy         |
 | ||
|             | ab    |                            | primary | roundabout | roundabout |
 | ||
|             | bc    |                            | primary | roundabout | roundabout |
 | ||
|             | cd    | left\|slight_right         | primary | roundabout | roundabout |
 | ||
|             | da    |                            | primary | roundabout | roundabout |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route                    | turns                                   | lanes |
 | ||
|             | x,y       | xb,dy,dy                 | depart,roundabout-exit-1,arrive         | ,,    |
 | ||
|             | x,c       | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,,    |
 | ||
|             | x,a       | xb,roundabout,roundabout | depart,roundabout-exit-undefined,arrive | ,,    |
 | ||
| 
 | ||
|     @anticipate @todo @2032
 | ||
|     Scenario: No Lanes for Roundabouts, see #2626
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             a – b –x
 | ||
|                 |
 | ||
|                /c\
 | ||
|               d   f – g – z
 | ||
|                \e/    |
 | ||
|                 |     h
 | ||
|                 y
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward                                  | highway | junction   | name  |
 | ||
|             | ab    | through\|right\|right\|right\|right                 | primary |            | abx   |
 | ||
|             | bx    |                                                     | primary |            | abx   |
 | ||
|             | bc    | right\|right\|right\|right                          | primary |            | bc    |
 | ||
|             | cd    |                                                     | primary | roundabout | cdefc |
 | ||
|             | de    | slight_left\|slight_left\|slight_left\|slight_right | primary | roundabout | cdefc |
 | ||
|             | ef    | left\|slight_right\|slight_right                    | primary | roundabout | cdefc |
 | ||
|             | fc    |                                                     | primary | roundabout | cdefc |
 | ||
|             | ey    |                                                     | primary |            | ey    |
 | ||
|             | fg    | through\|right                                      | primary |            | fg    |
 | ||
|             | gz    |                                                     | primary |            | gz    |
 | ||
|             | gh    |                                                     | primary |            | gh    |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route           | turns                                            | lanes                                                                                      |
 | ||
|             | a,h       | abx,bc,fg,gh,gh | depart,turn right,cdefc-exit-2,turn right,arrive | ,straight:false right:false right:false right:false right:true,,straight:false right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Anticipate none tags
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             c       g       l
 | ||
|             b – d – e – h - i
 | ||
|             a       f       j
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward       | highway   | name |
 | ||
|             | ab    | none\|none\|right\|right | primary   | abc  |
 | ||
|             | bc    |                          | primary   | abc  |
 | ||
|             | bd    |                          | primary   | bdeh |
 | ||
|             | de    | left\|none\|none\|right  | primary   | bdeh |
 | ||
|             | eh    |                          | primary   | bdeh |
 | ||
|             | ef    |                          | primary   | feg  |
 | ||
|             | eg    |                          | primary   | feg  |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route            | turns                               | lanes                                                                                      |
 | ||
|             | a,g       | abc,bdeh,feg,feg | depart,turn right,turn left,arrive  | ,none:false none:false right:true right:false,left:true none:false none:false right:false, |
 | ||
|             | a,f       | abc,bdeh,feg,feg | depart,turn right,turn right,arrive | ,none:false none:false right:false right:true,left:false none:false none:false right:true, |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Triple Right keeping Left
 | ||
|         Given the node map
 | ||
|             """
 | ||
|                   a – b – i
 | ||
|                       |
 | ||
|             f – e – g |
 | ||
|                 |     |
 | ||
|                 |     |
 | ||
|             j – d – – c
 | ||
|                       |
 | ||
|                       h
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward | highway   | name   |
 | ||
|             | abi   | \|\|right\|right   | primary   | start  |
 | ||
|             | bch   | \|\|right\|right   | primary   | first  |
 | ||
|             | cdj   | \|\|right\|right   | primary   | second |
 | ||
|             | de    | left\|right\|right | secondary | third  |
 | ||
|             | feg   |                    | tertiary  | fourth |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route                                  | turns                                                     | lanes                                                                                                                                                                      |
 | ||
|             | a,f       | start,first,second,third,fourth,fourth | depart,turn right,turn right,turn right,turn left,arrive  | ,none:false none:false right:true right:false,none:false none:false right:true right:false,none:false none:false right:true right:false,left:true right:false right:false, |
 | ||
|             | a,g       | start,first,second,third,fourth,fourth | depart,turn right,turn right,turn right,turn right,arrive | ,none:false none:false right:true right:true,none:false none:false right:true right:true,none:false none:false right:true right:true,left:false right:true right:true,     |
 | ||
| 
 | ||
|     @anticipate
 | ||
|     Scenario: Tripple Left keeping Right
 | ||
|         Given the node map
 | ||
|             """
 | ||
|             i – b – a
 | ||
|                 |
 | ||
|                 | g – e – f
 | ||
|                 |     |
 | ||
|                 |     |
 | ||
|                 c – – d – j
 | ||
|                 |
 | ||
|                 h
 | ||
|             """
 | ||
| 
 | ||
|         And the ways
 | ||
|             | nodes | turn:lanes:forward | highway   | name   |
 | ||
|             | abi   | left\|left\|\|     | primary   | start  |
 | ||
|             | bch   | left\|left\|\|     | primary   | first  |
 | ||
|             | cdj   | left\|left\|\|     | primary   | second |
 | ||
|             | de    | left\|left\|right  | secondary | third  |
 | ||
|             | feg   |                    | tertiary  | fourth |
 | ||
| 
 | ||
|         When I route I should get
 | ||
|             | waypoints | route                                  | turns                                                  | lanes                                                                                                                                                               |
 | ||
|             | a,f       | start,first,second,third,fourth,fourth | depart,turn left,turn left,turn left,turn right,arrive | ,left:false left:true none:false none:false,left:false left:true none:false none:false,left:false left:true none:false none:false,left:false left:false right:true, |
 | ||
|             | a,g       | start,first,second,third,fourth,fourth | depart,turn left,turn left,turn left,turn left,arrive  | ,left:true left:true none:false none:false,left:true left:true none:false none:false,left:true left:true none:false none:false,left:true left:true right:false,     |
 |