From e842c7b28b4bf925cf45dac84a419aed10621e9d Mon Sep 17 00:00:00 2001 From: Emil Tin Date: Sat, 18 Feb 2012 22:47:35 +0100 Subject: [PATCH 1/4] fix an invalid cuke test --- features/snap.feature | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/features/snap.feature b/features/snap.feature index 00b665f17..5fbb0eb51 100644 --- a/features/snap.feature +++ b/features/snap.feature @@ -61,29 +61,17 @@ Feature: Snap start/end point to the nearest way | jkla | When I route I should get - | from | to | route | - | a | b | abcd | - | a | c | abcd | - | a | d | abcd | - | a | e | abcd | - | a | f | abcd | - | a | g | abcd | - | a | h | jkla | - | a | i | jkla | - | a | j | jkla | - | a | k | jkla | - | a | l | jkla | - | b | a | abcd | - | b | c | abcd | - | b | d | abcd | - | b | e | abcd | - | b | f | abcd | - | b | g | abcd | - | b | h | jkla | - | b | i | jkla | - | b | j | jkla | - | b | k | jkla | - | b | l | jkla | + | from | to | route | + | a | b | abcd | + | a | c | abcd | + | a | d | abcd | + | a | e | abcd,defg | + | a | f | abcd,defg | + | a | h | jkla,ghij | + | a | i | jkla,ghij | + | a | j | jkla | + | a | k | jkla | + | a | l | jkla | Scenario: Snap to correct way at large scales Given a grid size of 1000 meters From 7aa2700d8f42d7150feeacb81e6c11838598fb5b Mon Sep 17 00:00:00 2001 From: Emil Tin Date: Sun, 19 Feb 2012 09:31:30 +0100 Subject: [PATCH 2/4] update web frontend to use ? instead of & to separete query params in urls --- Docs/WebFrontend/Route.js | 2 +- Docs/WebFrontend/ViaRoute.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Docs/WebFrontend/Route.js b/Docs/WebFrontend/Route.js index 804af32c7..c04f8fcbb 100644 --- a/Docs/WebFrontend/Route.js +++ b/Docs/WebFrontend/Route.js @@ -139,7 +139,7 @@ function showResultsRoute(response) { routelink += '\');" value="Get Link">'; //Link for the GPX Download - var gpxLink = '( row['from'], 'to' => row['to'] } if table.headers.include? 'start' got['start'] = instructions ? json['route_summary']['start_point'] : nil @@ -213,15 +214,20 @@ When /^I route I should get$/ do |table| end if table.headers.include? 'route' got['route'] = (instructions || '').strip - end - if table.headers.include? 'distance' - got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil + if table.headers.include? 'distance' + got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil + end + if table.headers.include? 'time' + 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 end if row != got failed = { :attempt => 'route', :query => @query, :response => response } log_fail row,got,[failed] end + actual << got end end diff --git a/features/time.feature b/features/time.feature new file mode 100644 index 000000000..24f0a448b --- /dev/null +++ b/features/time.feature @@ -0,0 +1,182 @@ +@routing @time +Feature: Estimation of travel time + Note: + 15km/h = 15000m/3600s = 150m/36s = 100m/24s + 5km/h = 5000m/3600s = 50m/36s = 100m/72s + + Background: Use specific speeds + Given the speedprofile "bicycle" + And the speedprofile settings + | primary | 15 | + | footway | 5 | + + Scenario: Basic travel time, 1m scale + Given a grid size of 1 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 0s | + | x | b | xb | 0s | + | x | c | xc | 0s | + | x | d | xd | 0s | + | x | e | xe | 0s | + | x | f | xf | 0s | + | x | g | xg | 0s | + | x | h | xh | 0s | + + Scenario: Basic travel time, 100m scale + Given a grid size of 100 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 24s | + | x | b | xb | 34s | + | x | c | xc | 24s | + | x | d | xd | 34s | + | x | e | xe | 24s | + | x | f | xf | 34s | + | x | g | xg | 24s | + | x | h | xh | 34s | + + Scenario: Basic travel time, 10km scale + Given a grid size of 10000 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 2400s | + | x | b | xb | 3400s | + | x | c | xc | 2400s | + | x | d | xd | 3400s | + | x | e | xe | 2400s | + | x | f | xf | 3400s | + | x | g | xg | 2400s | + | x | h | xh | 3400s | + + Scenario: Time of travel depending on way type + Given the nodes + | a | b | + | c | d | + + And the ways + | nodes | highway | + | ab | primary | + | cd | footway | + + When I route I should get + | from | to | route | time | + | a | b | ab | 24s | + | c | d | cd | 72s | + + Scenario: Time of travel on a series of ways + Given the nodes + | a | b | c | d | + + And the ways + | nodes | highway | + | ab | primary | + | bc | primary | + | cd | primary | + + When I route I should get + | from | to | route | time | + | a | b | ab | 24s | + | a | c | ab,bc | 48s | + | a | d | ab,bc,cd | 72s | + + Scenario: Time of travel on a winding way + Given the nodes + | a | b | | | | | + | | c | d | e | | i | + | | | | f | g | h | + + And the ways + | nodes | highway | + | abcdefghi | primary | + + When I route I should get + | from | to | route | time | + | a | b | abcdefghi | 24s | + | a | e | abcdefghi | 96s | + | a | i | abcdefghi | 192s | + + Scenario: Time of travel on combination of road types + Given the nodes + | a | b | c | d | e | + + And the ways + | nodes | highway | + | abc | primary | + | cde | footway | + + When I route I should get + | from | to | route | time | + | b | c | abc | 24s | + | c | e | cde | 72s | + | b | d | abc,cde | 144s | + | a | e | abc,cde | 192s | + + Scenario: Time of travel on part of a way + Given the nodes + | a | 1 | + | | 2 | + | | 3 | + | b | 4 | + + And the ways + | nodes | highway | + | ab | primary | + + When I route I should get + | from | to | route | time | + | 1 | 2 | ab | 24s | + | 1 | 3 | ab | 48s | + | 1 | 4 | ab | 72s | + | 4 | 3 | ab | 24s | + | 4 | 2 | ab | 48s | + | 4 | 1 | ab | 72s | + From 887092bacdb96c315ed4edb907c7c0e97176d004 Mon Sep 17 00:00:00 2001 From: Emil Tin Date: Sat, 18 Feb 2012 15:19:11 +0100 Subject: [PATCH 4/4] allow setting the grid space in tests --- features/step_definitions/data.rb | 6 +++++- features/support/data.rb | 15 +++++++++------ features/support/hooks.rb | 1 + 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/features/step_definitions/data.rb b/features/step_definitions/data.rb index 2e7a2d3a6..58321fd6c 100644 --- a/features/step_definitions/data.rb +++ b/features/step_definitions/data.rb @@ -8,6 +8,10 @@ Given /^the speedprofile settings$/ do |table| end end +Given /^a grid size of (\d+) meters$/ do |meters| + set_grid_size meters +end + Given /^the nodes$/ do |table| table.raw.each_with_index do |row,ri| row.each_with_index do |name,ci| @@ -15,7 +19,7 @@ Given /^the nodes$/ do |table| raise "*** node invalid name '#{name}', must be single characters" unless name.size == 1 raise "*** invalid node name '#{name}', must me alphanumeric" unless name.match /[a-z0-9]/ raise "*** duplicate node '#{name}'" if name_node_hash[name] - node = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+ci*ZOOM, ORIGIN[1]-ri*ZOOM + node = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+ci*@zoom, ORIGIN[1]-ri*@zoom node << { :name => name } node.uid = OSM_UID osm_db << node diff --git a/features/support/data.rb b/features/support/data.rb index 63fcec13e..e8d5a555d 100644 --- a/features/support/data.rb +++ b/features/support/data.rb @@ -12,10 +12,13 @@ LOG_FILE = 'fail.log' OSM_TIMESTAMP = '2000-00-00T00:00:00Z' DEFAULT_SPEEDPROFILE = 'bicycle' WAY_SPACING = 10 +DEFAULT_GRID_SIZE = 100 #meters ORIGIN = [1,1] -NODE_SPACING = 100 #meters -ZOOM = 0.001*(NODE_SPACING.to_f/111.0) + +def set_grid_size meters + @zoom = 0.001*(meters.to_f/111.21) +end def build_ways_from_table table #add one unconnected way for each row @@ -28,10 +31,10 @@ def build_ways_from_table table #instead we place all lines as a string on the same y coordinate. this prevents using neightboring ways. #a few nodes... - node1 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(0+WAY_SPACING*ri)*ZOOM, ORIGIN[1] - node2 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(1+WAY_SPACING*ri)*ZOOM, ORIGIN[1] - node3 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(2+WAY_SPACING*ri)*ZOOM, ORIGIN[1] - node4 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(3+WAY_SPACING*ri)*ZOOM, ORIGIN[1] + node1 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(0+WAY_SPACING*ri)*@zoom, ORIGIN[1] + node2 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(1+WAY_SPACING*ri)*@zoom, ORIGIN[1] + node3 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(2+WAY_SPACING*ri)*@zoom, ORIGIN[1] + node4 = OSM::Node.new make_osm_id, OSM_USER, OSM_TIMESTAMP, ORIGIN[0]+(3+WAY_SPACING*ri)*@zoom, ORIGIN[1] node1.uid = OSM_UID node2.uid = OSM_UID node3.uid = OSM_UID diff --git a/features/support/hooks.rb b/features/support/hooks.rb index 70bbc2df9..30579c52b 100644 --- a/features/support/hooks.rb +++ b/features/support/hooks.rb @@ -4,6 +4,7 @@ Before do |scenario| reset_data @has_logged_preprocess_info = false @has_logged_scenario_info = false + set_grid_size DEFAULT_GRID_SIZE end Around('@routing') do |scenario, block|