From ef9c3c84319641d5621f4055cfb2e37cf5def149 Mon Sep 17 00:00:00 2001 From: Emil Tin Date: Sat, 18 Feb 2012 17:50:04 +0100 Subject: [PATCH] added tests for distance calculations (some are failing) --- features/distance.feature | 279 +++++++++++++++++++++++++++ features/snap.feature | 22 +++ features/step_definitions/routing.rb | 9 +- 3 files changed, 307 insertions(+), 3 deletions(-) create mode 100644 features/distance.feature diff --git a/features/distance.feature b/features/distance.feature new file mode 100644 index 00000000000..393244aae94 --- /dev/null +++ b/features/distance.feature @@ -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 | \ No newline at end of file diff --git a/features/snap.feature b/features/snap.feature index 8ebe4f24daf..00b665f174f 100644 --- a/features/snap.feature +++ b/features/snap.feature @@ -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 | diff --git a/features/step_definitions/routing.rb b/features/step_definitions/routing.rb index b5ba1431842..e35a8e89458 100644 --- a/features/step_definitions/routing.rb +++ b/features/step_definitions/routing.rb @@ -209,9 +209,12 @@ def computed_route 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