This commit is contained in:
DennisOSRM 2012-05-31 14:50:08 +02:00
commit 82ead0a405
5 changed files with 162 additions and 2 deletions

99
features/bearing.feature Normal file
View File

@ -0,0 +1,99 @@
@routing @bearing
Feature: Compass bearing
@northwest
Scenario: Bearing when going northwest
Given the node map
| b | |
| | a |
And the ways
| nodes |
| ab |
When I route I should get
| from | to | route | compass | bearing |
| a | b | ab | NW | 45 |
@west
Scenario: Bearing when going west
Given the node map
| b | a |
And the ways
| nodes |
| ab |
When I route I should get
| from | to | route | compass | bearing |
| a | b | ab | W | 90 |
Scenario: Bearing af 45 degree intervals
Given the node map
| b | a | h |
| c | x | g |
| d | e | f |
And the ways
| nodes |
| xa |
| xb |
| xc |
| xd |
| xe |
| xf |
| xg |
| xh |
When I route I should get
| from | to | route | compass | bearing |
| x | a | xa | N | 0 |
| x | b | xb | NW | 45 |
| x | c | xc | W | 90 |
| x | d | xd | SW | 135 |
| x | e | xe | S | 180 |
| x | f | xf | SE | 225 |
| x | g | xg | E | 270 |
| x | h | xh | NE | 315 |
Scenario: Bearing in a roundabout
Given the node map
| | d | c | |
| e | | | b |
| f | | | a |
| | g | h | |
And the ways
| nodes | oneway |
| ab | yes |
| bc | yes |
| cd | yes |
| de | yes |
| ef | yes |
| fg | yes |
| gh | yes |
| ha | yes |
When I route I should get
| from | to | route | compass | bearing |
| c | b | cd,de,ef,fg,gh,ha,ab | W,SW,S,SE,E,NE,N | 90,135,180,225,270,0,45 |
| g | f | gh,ha,ab,bc,cd,de,ef | E,NE,N,NW,W,SW,S | 270,315,0,45,90,180,225 |
Scenario: Bearing should stay constant when zig-zagging
Given the node map
| b | d | f | h |
| a | c | e | g |
And the ways
| nodes |
| ab |
| bc |
| cd |
| de |
| ef |
| fg |
| gh |
When I route I should get
| from | to | route | compass | bearing |
| a | h | ab,bc,cd,de,ef,fg,gh | N,SE,N,SE,N,SE,N | 0,225,0,225,0,225,0 |

View File

@ -202,6 +202,8 @@ When /^I route I should get$/ do |table|
json = JSON.parse response.body
if json['status'] == 0
instructions = way_list json['route_instructions']
bearings = bearing_list json['route_instructions']
compasses = compass_list json['route_instructions']
end
end
@ -221,6 +223,12 @@ When /^I route I should get$/ do |table|
raise "*** time must be specied in seconds. (ex: 60s)" unless row['time'] =~ /\d+s/
got['time'] = instructions ? "#{json['route_summary']['total_time'].to_s}s" : nil
end
if table.headers.include? 'bearing'
got['bearing'] = bearings
end
if table.headers.include? 'compass'
got['compass'] = compasses
end
end
if row != got

View File

@ -166,11 +166,11 @@ def reprocess
Dir.chdir TEST_FOLDER do
write_speedprofile
write_osm
#convert_osm_to_pbf
convert_osm_to_pbf
unless extracted?
log_preprocess_info
log "== Extracting #{@osm_file}.osm...", :preprocess
unless system "../osrm-extract #{@osm_file}.osm 1>>#{PREPROCESS_LOG_FILE} 2>>#{PREPROCESS_LOG_FILE}"
unless system "../osrm-extract #{@osm_file}.osm.pbf 1>>#{PREPROCESS_LOG_FILE} 2>>#{PREPROCESS_LOG_FILE}"
log "*** Exited with code #{$?.exitstatus}.", :preprocess
raise "*** osrm-extract exited with code #{$?.exitstatus}. The file preprocess.log might contain more info."
end

View File

@ -69,3 +69,17 @@ def way_list instructions
map { |r| r=="" ? '""' : r }.
join(',')
end
def compass_list instructions
instructions.reject { |r| r[0].to_s=="#{DESTINATION_REACHED}" }.
map { |r| r[6] }.
map { |r| r=="" ? '""' : r }.
join(',')
end
def bearing_list instructions
instructions.reject { |r| r[0].to_s=="#{DESTINATION_REACHED}" }.
map { |r| r[7] }.
map { |r| r=="" ? '""' : r }.
join(',')
end

39
features/weird.feature Normal file
View File

@ -0,0 +1,39 @@
@routing @weird
Feature: Weird routings discovered
Scenario: Routing on a oneway roundabout
Given the node map
| | d | c | |
| e | | | b |
| f | | | a |
| | g | h | |
And the ways
| nodes | oneway |
| ab | yes |
| bc | yes |
| cd | yes |
| de | yes |
| ef | yes |
| fg | yes |
| gh | yes |
| ha | yes |
When I route I should get
| from | to | route |
| a | b | ab |
| b | c | bc |
| c | d | cd |
| d | e | de |
| e | f | ef |
| f | g | fg |
| g | h | gh |
| h | a | ha |
| b | a | bc,cd,de,ef,fg,gh,ha |
| c | b | cd,de,ef,fg,gh,ha,ab |
| d | c | de,ef,fg,gh,ha,ab,bc |
| e | d | ef,fg,gh,ha,ab,bc,cd |
| f | e | fg,gh,ha,ab,bc,cd,de |
| g | f | gh,ha,ab,bc,cd,de,ef |
| h | g | ha,ab,bc,cd,de,ef,fg |
| a | h | ab,bc,cd,de,ef,fg,gh |