210 lines
9.2 KiB
Gherkin
210 lines
9.2 KiB
Gherkin
@routing @testbot @turn_function
|
|
Feature: Turn Function Information
|
|
|
|
|
|
Background:
|
|
Given the profile file
|
|
"""
|
|
functions = require('car')
|
|
|
|
function test_setup()
|
|
profile = functions.setup()
|
|
profile.highway_turn_classification = {
|
|
['motorway'] = 4,
|
|
['motorway_link'] = 4,
|
|
['trunk'] = 4,
|
|
['trunk_link'] = 4,
|
|
['primary'] = 4,
|
|
['primary_link'] = 4,
|
|
['secondary'] = 3,
|
|
['secondary_link'] = 3,
|
|
['tertiary'] = 2,
|
|
['tertiary_link'] = 2,
|
|
['residential'] = 1,
|
|
['living_street'] = 1,
|
|
}
|
|
|
|
profile.access_turn_classification = {
|
|
['discouraged'] = 1;
|
|
['permissive'] = 1;
|
|
['private'] = 1;
|
|
['customers'] = 1;
|
|
['dismount'] = 1;
|
|
}
|
|
return profile
|
|
end
|
|
|
|
function turn_leg_string (leg)
|
|
return 'speed: ' .. tostring(leg.speed)
|
|
.. ', is_incoming: ' .. tostring(leg.is_incoming)
|
|
.. ', is_outgoing: ' .. tostring(leg.is_outgoing)
|
|
.. ', highway_turn_classification: ' .. tostring(leg.highway_turn_classification)
|
|
.. ', access_turn_classification: ' .. tostring(leg.access_turn_classification)
|
|
.. ', priority_class: ' .. tostring(leg.priority_class)
|
|
end
|
|
|
|
function print_turn (profile, turn)
|
|
print ('source_restricted ' .. string.format("%s", tostring(turn.source_restricted)))
|
|
print ('source_is_motorway ' .. string.format("%s", tostring(turn.source_is_motorway)))
|
|
print ('source_is_link ' .. string.format("%s", tostring(turn.source_is_link)))
|
|
print ('source_number_of_lanes ' .. string.format("%s", tostring(turn.source_number_of_lanes)))
|
|
print ('source_highway_turn_classification ' .. string.format("%s", tostring(turn.source_highway_turn_classification)))
|
|
print ('source_access_turn_classification ' .. string.format("%s", tostring(turn.source_access_turn_classification)))
|
|
print ('source_speed ' .. string.format("%s", tostring(turn.source_speed)))
|
|
print ('source_priority_class ' .. string.format("%s", tostring(turn.source_priority_class)))
|
|
print ('source_mode ' .. string.format("%s", tostring(turn.source_mode)))
|
|
|
|
print ('target_restricted ' .. string.format("%s", tostring(turn.target_restricted)))
|
|
print ('target_is_motorway ' .. string.format("%s", tostring(turn.target_is_motorway)))
|
|
print ('target_is_link ' .. string.format("%s", tostring(turn.target_is_link)))
|
|
print ('target_number_of_lanes ' .. string.format("%s", tostring(turn.target_number_of_lanes)))
|
|
print ('target_highway_turn_classification ' .. string.format("%s", tostring(turn.target_highway_turn_classification)))
|
|
print ('target_access_turn_classification ' .. string.format("%s", tostring(turn.target_access_turn_classification)))
|
|
print ('target_speed ' .. string.format("%s", tostring(turn.target_speed)))
|
|
print ('target_priority_class ' .. string.format("%s", tostring(turn.target_priority_class)))
|
|
print ('target_mode ' .. string.format("%s", tostring(turn.target_mode)))
|
|
|
|
print ('number_of_roads ' .. string.format("%s", tostring(turn.number_of_roads)))
|
|
if not turn.is_u_turn then
|
|
for roadCount, road in ipairs(turn.roads_on_the_right) do
|
|
print('roads_on_the_right [' .. tostring(roadCount) .. '] ' .. turn_leg_string(road))
|
|
end
|
|
|
|
for roadCount, road in ipairs(turn.roads_on_the_left) do
|
|
print('roads_on_the_left [' .. tostring(roadCount) .. '] ' .. turn_leg_string(road))
|
|
end
|
|
end
|
|
end
|
|
|
|
return {
|
|
setup = test_setup,
|
|
process_way = functions.process_way,
|
|
process_node = functions.process_node,
|
|
process_turn = print_turn
|
|
}
|
|
"""
|
|
|
|
Scenario: Turns should have correct information of source and target
|
|
Given the node map
|
|
"""
|
|
|
|
a b c
|
|
|
|
"""
|
|
And the ways
|
|
| nodes | highway |
|
|
| ab | motorway |
|
|
| bc | motorway |
|
|
And the data has been saved to disk
|
|
|
|
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
|
Then it should exit successfully
|
|
And stdout should contain "source_is_motorway true"
|
|
And stdout should contain "target_is_motorway true"
|
|
And stdout should contain "source_is_link false"
|
|
And stdout should contain "source_priority_class 0"
|
|
And stdout should contain "target_is_motorway true"
|
|
And stdout should contain "target_is_link false"
|
|
And stdout should contain "target_priority_class 0"
|
|
|
|
|
|
Scenario: Turns should detect when turn is leaving highway
|
|
Given the node map
|
|
"""
|
|
|
|
a b c
|
|
|
|
"""
|
|
And the ways
|
|
| nodes | highway | lanes |
|
|
| ab | motorway | 3 |
|
|
| bc | motorway_link | |
|
|
|
|
And the data has been saved to disk
|
|
|
|
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
|
Then it should exit successfully
|
|
And stdout should contain "source_is_motorway true"
|
|
And stdout should contain "source_is_link false"
|
|
And stdout should contain "source_number_of_lanes 3"
|
|
And stdout should contain "target_is_motorway false"
|
|
And stdout should contain "target_is_link true"
|
|
And stdout should contain "target_number_of_lanes 0"
|
|
And stdout should contain "number_of_roads 2"
|
|
|
|
Scenario: Turns should have correct information of other roads at intersection I
|
|
Given the node map
|
|
"""
|
|
d
|
|
^
|
|
|
|
|
a->b->c
|
|
"""
|
|
And the ways
|
|
| nodes | highway | oneway |
|
|
| ab | primary | yes |
|
|
| bc | motorway | yes |
|
|
| bd | residential | yes |
|
|
And the data has been saved to disk
|
|
|
|
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
|
Then it should exit successfully
|
|
And stdout should contain "number_of_roads 3"
|
|
And stdout should contain "source_priority_class 4"
|
|
And stdout should contain "target_priority_class 0"
|
|
And stdout should contain "target_priority_class 10"
|
|
# turning abd, give information about bc
|
|
And stdout should contain /roads_on_the_right \[1\] speed: [0-9]+, is_incoming: false, is_outgoing: true, highway_turn_classification: 4, access_turn_classification: 0/
|
|
# turning abc, give information about bd
|
|
And stdout should contain /roads_on_the_left \[1\] speed: [0-9]+, is_incoming: false, is_outgoing: true, highway_turn_classification: 1, access_turn_classification: 0/
|
|
|
|
Scenario: Turns should have correct information of other roads at intersection II
|
|
Given the node map
|
|
"""
|
|
d
|
|
|
|
|
v
|
|
a->b->c
|
|
"""
|
|
And the ways
|
|
| nodes | highway | oneway | access |
|
|
| ab | secondary | yes | |
|
|
| bc | motorway | yes | |
|
|
| db | unclassified | yes | discouraged |
|
|
And the data has been saved to disk
|
|
|
|
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
|
Then it should exit successfully
|
|
And stdout should contain "number_of_roads 3"
|
|
# turning dbc, give information about about ab
|
|
And stdout should contain /roads_on_the_right \[1\] speed: [0-9]+, is_incoming: true, is_outgoing: false, highway_turn_classification: 3, access_turn_classification: 0/
|
|
# turning abc, give information about about db
|
|
And stdout should contain /roads_on_the_left \[1\] speed: [0-9]+, is_incoming: true, is_outgoing: false, highway_turn_classification: 0, access_turn_classification: 1/
|
|
|
|
Scenario: Turns should have correct information of two-way roads at intersection
|
|
Given the node map
|
|
"""
|
|
b
|
|
|
|
|
a-c-d
|
|
|
|
|
e
|
|
"""
|
|
And the ways
|
|
| nodes | highway | oneway |
|
|
| ac | motorway | yes |
|
|
| cd | motorway_link | yes |
|
|
| bc | trunk | yes |
|
|
| cb | trunk_link | yes |
|
|
| ce | primary | yes |
|
|
| ec | primary_link | yes |
|
|
And the data has been saved to disk
|
|
|
|
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
|
Then it should exit successfully
|
|
# Turn acd
|
|
# on the left there should be cb (and bc)
|
|
And stdout should contain /roads_on_the_left \[1\] speed: [0-9]+, is_incoming: true, is_outgoing: true, highway_turn_classification: [0-9]+, access_turn_classification: 0, priority_class: 3/
|
|
# on the right there should be ce and ec
|
|
And stdout should contain /roads_on_the_right \[1\] speed: [0-9]+, is_incoming: true, is_outgoing: true, highway_turn_classification: [0-9]+, access_turn_classification: 0, priority_class: 4/
|