151 lines
3.2 KiB
Lua
151 lines
3.2 KiB
Lua
-- Enable calling our lua profile code directly from the lua command line,
|
|
-- which makes it easier to debug.
|
|
-- We simulate the normal C++ environment by defining the required globals and functions.
|
|
|
|
-- Usage:
|
|
-- > cd profiles
|
|
-- > lua5.1 debug.lua
|
|
|
|
|
|
-- for more convenient printing of tables
|
|
local pprint = require('lib/pprint')
|
|
|
|
-- globals that are normally set from C++
|
|
|
|
-- profiles code modifies this table
|
|
properties = {}
|
|
|
|
-- should match values defined in include/extractor/guidance/road_classification.hpp
|
|
road_priority_class = {
|
|
motorway = 0,
|
|
trunk = 2,
|
|
primary = 4,
|
|
secondary = 6,
|
|
tertiary = 8,
|
|
main_residential = 10,
|
|
side_residential = 11,
|
|
link_road = 14,
|
|
bike_path = 16,
|
|
foot_path = 18,
|
|
connectivity = 31,
|
|
}
|
|
|
|
-- should match values defined in include/extractor/travel_mode.hpp
|
|
mode = {
|
|
inaccessible = 0,
|
|
driving = 1,
|
|
cycling = 2,
|
|
walking = 3,
|
|
ferry = 4,
|
|
train = 5,
|
|
pushing_bike = 6,
|
|
}
|
|
|
|
-- input tags, normally extracted from OSM data
|
|
local way = {
|
|
highway = 'primary',
|
|
name = 'Main Street',
|
|
--access = 'no'
|
|
["access:forward"] = 'no'
|
|
--width = '3',
|
|
--maxspeed = '30',
|
|
--['maxspeed:advisory'] = '25',
|
|
--oneway = '-1',
|
|
--service = 'alley',
|
|
--['oneway:bicycle'] = 'yes',
|
|
--junction = 'roundabout',
|
|
--['name:pronunciation'] = 'fuerloong',
|
|
--route = 'ferry',
|
|
--duration = '00:01:00',
|
|
--hov = 'designated',
|
|
--hov:lanes:forward"] = 'designated',
|
|
|
|
--destination = 'Berlin',
|
|
--["destination:ref"] = 'Nuremberg',
|
|
--["destination:ref:forward"] = 'Hamburg;Dresden',
|
|
}
|
|
-- tag function normally provided via C++
|
|
function way:get_value_by_key(k)
|
|
if not self['_debug'] then
|
|
self['_debug'] = {
|
|
_counts = {}
|
|
}
|
|
end
|
|
|
|
if self['_debug']['_total'] then
|
|
self['_debug']['_total'] = self['_debug']['_total'] + 1
|
|
else
|
|
self['_debug']['_total'] = 1
|
|
end
|
|
|
|
if self['_debug']['_counts'][k] then
|
|
self['_debug']['_counts'][k] = self['_debug']['_counts'][k] + 1
|
|
else
|
|
self['_debug']['_counts'][k] = 1
|
|
end
|
|
|
|
return self[k]
|
|
end
|
|
|
|
-- Mock C++ helper functions which are called from LUA.
|
|
-- FIXME
|
|
-- Debugging LUA code that uses these will not work correctly
|
|
-- unless we reimplement themethods in LUA.
|
|
|
|
function durationIsValid(str)
|
|
return true
|
|
end
|
|
|
|
function parseDuration(str)
|
|
return 1
|
|
end
|
|
|
|
function canonicalizeStringList(str)
|
|
return str
|
|
end
|
|
|
|
-- helpers for sorting associative array
|
|
function get_keys_sorted_by_value(tbl, sortFunction)
|
|
local keys = {}
|
|
for key in pairs(tbl) do
|
|
table.insert(keys, key)
|
|
end
|
|
|
|
table.sort(keys, function(a, b)
|
|
return sortFunction(tbl[a], tbl[b])
|
|
end)
|
|
|
|
return keys
|
|
end
|
|
|
|
-- helper for printing sorted array
|
|
function print_sorted(sorted,associative)
|
|
for _, key in ipairs(sorted) do
|
|
print(associative[key], key)
|
|
end
|
|
end
|
|
|
|
-- start state of result table, normally set form C++
|
|
local result = {
|
|
road_classification = {},
|
|
forward_speed = -1,
|
|
backward_speed = -1,
|
|
}
|
|
|
|
-- the profile we want to debug
|
|
require("car")
|
|
|
|
-- call the way function
|
|
way_function(way,result)
|
|
|
|
-- and print the output
|
|
pprint(way)
|
|
print("=>")
|
|
pprint(result)
|
|
print("\n")
|
|
print("Tag fetches:")
|
|
sorted_counts = get_keys_sorted_by_value(way._debug._counts, function(a, b) return a > b end)
|
|
print_sorted(sorted_counts, way._debug._counts)
|
|
|
|
print(way._debug._total, 'total')
|