updated turn restriction tests. use correct .osrm.restrictions file during tests. add tests for no-right-turn

This commit is contained in:
Emil Tin
2012-03-02 13:35:30 +01:00
parent 9fdb6eb2c5
commit b0ecb869f2
3 changed files with 230 additions and 58 deletions
+228 -56
View File
@@ -1,95 +1,267 @@
@routing @restrictions
Feature: Turn restrictions
Handle turn restrictions as defined by http://wiki.openstreetmap.org/wiki/Relation:restriction
How this plays with u-turns can be tricky.
Scenario: No left turn
Note that if u-turns are allowed, turn restrictions can lead to suprising, but correct, routes.
#left side
@restriction_left @no_left_turn @no_turn
Scenario: No left turn, no way to reach destination
Given the nodes
| | t | |
| a | j | b |
| | s | |
| w | j |
| | s |
And the ways
| nodes |
| bj |
| aj |
| sj |
| tj |
| wj |
And the relations
| from | to | via | restriction |
| sj | aj | j | no_left_turn |
| sj | wj | j | no_left_turn |
When I route I should get
| from | to | route |
| s | a | |
| s | b | sj,jb |
| s | t | sj,tj |
| a | b | aj,bj |
| a | a | aj,sj |
| a | t | aj,tj |
| b | b | jb,aj |
| b | s | bj,sj |
| b | t | bj,tj |
| s | w | |
| w | s | wj,sj |
Scenario: No left turn, go counter-clockwise around the block instead
@restriction_left @no_left_turn @no_turn
Scenario: No left turn, don't use u-turns to reach destination
Given the nodes
| x | t | |
| a | j | b |
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes |
| bj |
| aj |
| nj |
| ej |
| sj |
| tj |
| axt |
| wj |
And the relations
| from | to | via | restriction |
| sj | aj | j | no_left_turn |
| sj | wj | j | no_left_turn |
When I route I should get
| from | to | route |
| s | a | sj,tj,axt |
| s | b | sj,jb |
| s | t | sj,tj |
| a | b | aj,bj |
| a | a | aj,sj |
| a | t | aj,tj |
| b | b | jb,aj |
| b | s | bj,sj |
| b | t | bj,tj |
Scenario: No left turn, go clockwise around the block instead
| from | to | route |
| s | w | |
| s | n | sj,nj |
| s | e | sj,ej |
| w | n | wj,nj |
| w | e | wj,ej |
| w | s | wj,sj |
| n | e | nj,ej |
| n | s | nj,sj |
| n | w | nj,wj |
| e | s | ej,sj |
| e | w | ej,wj |
| e | n | ej,nj |
@restriction_left @no_left_turn @no_turn
Scenario: No left turn, go around the block instead
Given the nodes
| | | t | |
| z | a | j | b |
| x | | s | |
| y | n | |
| w | j | e |
| | s | |
And the ways
| nodes |
| bj |
| aj |
| nj |
| ej |
| sj |
| tj |
| sxza |
| wj |
| wyn |
And the relations
| from | to | via | restriction |
| sj | aj | j | no_left_turn |
| sj | wj | j | no_left_turn |
When I route I should get
| from | to | route |
| s | a | sxza |
| s | b | sj,jb |
| s | t | sj,tj |
| a | b | aj,bj |
| a | a | aj,sj |
| a | t | aj,tj |
| b | b | jb,aj |
| b | s | bj,sj |
| b | t | bj,tj |
| s | w | sj,nj,wyn |
| s | n | sj,nj |
| s | e | sj,ej |
| w | n | wj,nj |
| w | e | wj,ej |
| w | s | wj,sj |
| n | e | nj,ej |
| n | s | nj,sj |
| n | w | nj,wj |
| e | s | ej,sj |
| e | w | ej,wj |
| e | n | ej,nj |
@restriction_left @only_left_turn @must_turn
Scenario: Only left turn, don't use u-turns to reach destination
Given the nodes
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes |
| nj |
| ej |
| sj |
| wj |
And the relations
| from | to | via | restriction |
| sj | wj | j | only_restriction_left |
When I route I should get
| from | to | route |
| s | w | sj,wj |
| s | n | |
| s | e | |
| w | n | wj,nj |
| w | e | wj,ej |
| w | s | wj,sj |
| n | e | nj,ej |
| n | s | nj,sj |
| n | w | nj,wj |
| e | s | ej,sj |
| e | w | ej,wj |
| e | n | ej,nj |
#right side
@restriction_right @no_right_turn @no_turn
Scenario: No right turn, no way to reach destination
Given the nodes
| j | e |
| s | |
And the ways
| nodes |
| ej |
| sj |
And the relations
| from | to | via | restriction |
| sj | ej | j | no_right_turn |
When I route I should get
| from | to | route |
| s | e | |
| e | s | ej,sj |
@restriction_right @no_right_turn @no_turn
Scenario: No right turn, don't use u-turns to reach destination
Given the nodes
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes |
| nj |
| ej |
| sj |
| wj |
And the relations
| from | to | via | restriction |
| sj | ej | j | no_right_turn |
When I route I should get
| from | to | route |
| s | w | sj,wj |
| s | n | sj,nj |
| s | e | |
| w | n | wj,nj |
| w | e | wj,ej |
| w | s | wj,sj |
| n | e | nj,ej |
| n | s | nj,sj |
| n | w | nj,wj |
| e | s | ej,sj |
| e | w | ej,wj |
| e | n | ej,nj |
@restriction_right @no_right_turn @no_turn
Scenario: No right turn, go around the block instead
Given the nodes
| | n | y |
| w | j | e |
| | s | |
And the ways
| nodes |
| nj |
| ej |
| sj |
| wj |
| nye |
And the relations
| from | to | via | restriction |
| sj | ej | j | no_right_turn |
When I route I should get
| from | to | route |
| s | w | sj,wj |
| s | n | sj,nj |
| s | e | sj,nj,nye |
| w | n | wj,nj |
| w | e | wj,ej |
| w | s | wj,sj |
| n | e | nj,ej |
| n | s | nj,sj |
| n | w | nj,wj |
| e | s | ej,sj |
| e | w | ej,wj |
| e | n | ej,nj |
@restriction_right @only_right_turn @must_turn
Scenario: Right turn only, don't use u-turns to reach destination
Given the nodes
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes |
| nj |
| ej |
| sj |
| wj |
And the relations
| from | to | via | restriction |
| sj | ej | j | only_right_turn |
When I route I should get
| from | to | route |
| s | w | |
| s | n | |
| s | e | sj,ej |
| w | n | wj,nj |
| w | e | wj,ej |
| w | s | wj,sj |
| n | e | nj,ej |
| n | s | nj,sj |
| n | w | nj,wj |
| e | s | ej,sj |
| e | w | ej,wj |
| e | n | ej,nj |
@no_u_turn
Scenario: No U-turn
Given the nodes
| | b | |
| | | |
| c | | a |
And the ways
| nodes |
| ab |
| bc |
And the relations
| from | to | via | restriction |
| ab | bc | b | no_u_turn |
When I route I should get
| from | to | route |
| a | c | |
| c | a | bc,ab |