* set and store highway and access classification for the turn function * expose highway turn classification and access turn classification and speed to the lua profile turn function * expose whether connection road at turn is incoming or outgoing * add lua tests for exposed information to turn function * update docs about attributes in process_turn * add turn_classification info to docs * adding warning if uturn and intersection dont match * handle u turns that do not turn into intersection[0] * split OSM link generation in an accessible coordinate function
		
			
				
	
	
		
			177 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Gherkin
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			7.3 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)
 | |
|         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 ('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 ('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 "target_is_motorway true"
 | |
|         And stdout should contain "target_is_link false"
 | |
| 
 | |
| 
 | |
|     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"
 | |
|         # 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/
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |