added tests for distance calculations (some are failing)
This commit is contained in:
parent
b897b5d0e2
commit
ef9c3c8431
279
features/distance.feature
Normal file
279
features/distance.feature
Normal file
@ -0,0 +1,279 @@
|
||||
@routing @distance
|
||||
Feature: Distance calculation
|
||||
|
||||
Scenario: Distance of a winding south-north path
|
||||
Given a grid size of 10 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| d | c |
|
||||
| e | f |
|
||||
| h | g |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abcdefg |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abcdefg | 10 |
|
||||
| a | c | abcdefg | 20 |
|
||||
| a | d | abcdefg | 30 |
|
||||
| a | e | abcdefg | 40 |
|
||||
| a | f | abcdefg | 50 |
|
||||
| a | g | abcdefg | 60 |
|
||||
| a | h | abcdefg | 70 |
|
||||
|
||||
Scenario: Distance of a winding east-west path
|
||||
Given a grid size of 10 meters
|
||||
Given the nodes
|
||||
| a | d | e | h |
|
||||
| b | c | f | g |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abcdefg |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abcdefg | 10 |
|
||||
| a | c | abcdefg | 20 |
|
||||
| a | d | abcdefg | 30 |
|
||||
| a | e | abcdefg | 40 |
|
||||
| a | f | abcdefg | 50 |
|
||||
| a | g | abcdefg | 60 |
|
||||
| a | h | abcdefg | 70 |
|
||||
|
||||
Scenario: Distances when traversing part of a way
|
||||
Given a grid size of 100 meters
|
||||
Given the nodes
|
||||
| a | 0 | 1 | 2 |
|
||||
| 9 | | | 3 |
|
||||
| 8 | | | 4 |
|
||||
| 7 | 6 | 5 | b |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| ab |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | 0 | ab | 70 |
|
||||
| a | 1 | ab | 140 |
|
||||
| a | 2 | ab | 210 |
|
||||
| a | 3 | ab | 280 |
|
||||
| a | 4 | ab | 350 |
|
||||
| a | b | ab | 420 |
|
||||
| a | 5 | ab | 350 |
|
||||
| a | 6 | ab | 280 |
|
||||
| a | 7 | ab | 210 |
|
||||
| a | 8 | ab | 140 |
|
||||
| a | 9 | ab | 70 |
|
||||
| b | 5 | ab | 70 |
|
||||
| b | 6 | ab | 140 |
|
||||
| b | 7 | ab | 210 |
|
||||
| b | 8 | ab | 280 |
|
||||
| b | 9 | ab | 350 |
|
||||
| b | a | ab | 420 |
|
||||
| b | 0 | ab | 350 |
|
||||
| b | 1 | ab | 280 |
|
||||
| b | 2 | ab | 210 |
|
||||
| b | 3 | ab | 140 |
|
||||
| b | 4 | ab | 70 |
|
||||
|
||||
Scenario: Geometric distances
|
||||
Given a grid size of 1000 meters
|
||||
Given the nodes
|
||||
| v | w | y | a | b | c | d |
|
||||
| u | | | | | | e |
|
||||
| t | | | | | | f |
|
||||
| s | | | x | | | g |
|
||||
| r | | | | | | h |
|
||||
| q | | | | | | i |
|
||||
| p | o | n | m | l | k | j |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| xa |
|
||||
| xb |
|
||||
| xc |
|
||||
| xd |
|
||||
| xe |
|
||||
| xf |
|
||||
| xg |
|
||||
| xh |
|
||||
| xi |
|
||||
| xj |
|
||||
| xk |
|
||||
| xl |
|
||||
| xm |
|
||||
| xn |
|
||||
| xo |
|
||||
| xp |
|
||||
| xq |
|
||||
| xr |
|
||||
| xs |
|
||||
| xt |
|
||||
| xu |
|
||||
| xv |
|
||||
| xw |
|
||||
| xy |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| x | a | xa | 3000 |
|
||||
| x | b | xb | 3160 |
|
||||
| x | c | xc | 3600 |
|
||||
| x | d | xd | 4240 |
|
||||
| x | e | xe | 3600 |
|
||||
| x | f | xf | 3160 |
|
||||
| x | g | xg | 3000 |
|
||||
| x | h | xh | 3160 |
|
||||
| x | i | xi | 3600 |
|
||||
| x | j | xj | 4240 |
|
||||
| x | k | xk | 3600 |
|
||||
| x | l | xl | 3160 |
|
||||
| x | m | xm | 3000 |
|
||||
| x | n | xn | 3160 |
|
||||
| x | o | xo | 3600 |
|
||||
| x | p | xp | 4240 |
|
||||
| x | q | xq | 3600 |
|
||||
| x | r | xr | 3160 |
|
||||
| x | s | xs | 3000 |
|
||||
| x | t | xt | 3160 |
|
||||
| x | u | xu | 3600 |
|
||||
| x | v | xv | 4240 |
|
||||
| x | w | xw | 3600 |
|
||||
| x | y | xy | 3160 |
|
||||
|
||||
Scenario: 1m distances
|
||||
Given a grid size of 1 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 1 |
|
||||
| b | a | abc | 1 |
|
||||
| b | c | abc | 1 |
|
||||
| c | b | abc | 1 |
|
||||
| a | c | abc | 2 |
|
||||
| c | a | abc | 2 |
|
||||
|
||||
Scenario: 10m distances
|
||||
Given a grid size of 10 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 10 |
|
||||
| b | a | abc | 10 |
|
||||
| b | c | abc | 10 |
|
||||
| c | b | abc | 10 |
|
||||
| a | c | abc | 20 |
|
||||
| c | a | abc | 20 |
|
||||
|
||||
Scenario: 100m distances
|
||||
Given a grid size of 100 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 100 |
|
||||
| b | a | abc | 100 |
|
||||
| b | c | abc | 100 |
|
||||
| c | b | abc | 100 |
|
||||
| a | c | abc | 200 |
|
||||
| c | a | abc | 200 |
|
||||
|
||||
Scenario: 1km distance
|
||||
Given a grid size of 1000 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 1000 |
|
||||
| b | a | abc | 1000 |
|
||||
| b | c | abc | 1000 |
|
||||
| c | b | abc | 1000 |
|
||||
| a | c | abc | 2000 |
|
||||
| c | a | abc | 2000 |
|
||||
|
||||
Scenario: 10km distances
|
||||
Given a grid size of 10000 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 10000 |
|
||||
| b | a | abc | 10000 |
|
||||
| b | c | abc | 10000 |
|
||||
| c | b | abc | 10000 |
|
||||
| a | c | abc | 20000 |
|
||||
| c | a | abc | 20000 |
|
||||
|
||||
Scenario: 100km distances
|
||||
Given a grid size of 100000 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 100000 |
|
||||
| b | a | abc | 100000 |
|
||||
| b | c | abc | 100000 |
|
||||
| c | b | abc | 100000 |
|
||||
| a | c | abc | 200000 |
|
||||
| c | a | abc | 200000 |
|
||||
|
||||
Scenario: 1000km distances
|
||||
Given a grid size of 1000000 meters
|
||||
Given the nodes
|
||||
| a | b |
|
||||
| | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| abc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route | distance |
|
||||
| a | b | abc | 1000000 |
|
||||
| b | a | abc | 1000000 |
|
||||
| b | c | abc | 1000000 |
|
||||
| c | b | abc | 1000000 |
|
||||
| a | c | abc | 2000000 |
|
||||
| c | a | abc | 2000000 |
|
@ -84,3 +84,25 @@ Feature: Snap start/end point to the nearest way
|
||||
| b | j | jkla |
|
||||
| b | k | jkla |
|
||||
| b | l | jkla |
|
||||
|
||||
Scenario: Snap to correct way at large scales
|
||||
Given a grid size of 1000 meters
|
||||
Given the nodes
|
||||
| | | | a |
|
||||
| x | | | b |
|
||||
| | | | c |
|
||||
|
||||
And the ways
|
||||
| nodes |
|
||||
| xa |
|
||||
| xb |
|
||||
| xc |
|
||||
|
||||
When I route I should get
|
||||
| from | to | route |
|
||||
| x | a | xa |
|
||||
| x | b | xb |
|
||||
| x | c | xc |
|
||||
| a | x | xa |
|
||||
| b | x | xb |
|
||||
| c | x | xc |
|
||||
|
@ -209,9 +209,12 @@ When /^I route I should get$/ do |table|
|
||||
if table.headers.include? 'route'
|
||||
got['route'] = (instructions || '').strip
|
||||
end
|
||||
|
||||
if got['route'] != row['route'] || got['start'] != row['start'] || got['end'] != row['end']
|
||||
failed = { :attempt => 'Backward', :query => @query, :response => response }
|
||||
if table.headers.include? 'distance'
|
||||
got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil
|
||||
end
|
||||
|
||||
if row != got
|
||||
failed = { :attempt => 'route', :query => @query, :response => response }
|
||||
log_fail row,got,[failed]
|
||||
end
|
||||
actual << got
|
||||
|
Loading…
Reference in New Issue
Block a user