Merge pull request #130 from emiltin/distance_tests
added tests for distance calculations (some are failing)
This commit is contained in:
		
						commit
						f427550bb7
					
				
							
								
								
									
										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