Fix output for itinero 2.0
This commit is contained in:
parent
60c3bec1e0
commit
8e55bd9840
4 changed files with 48 additions and 27 deletions
|
@ -1,7 +1,5 @@
|
||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=46c4a96e_002D61f1_002D4d55_002Da7ff_002D649a683870dc/@EntryIndexedValue"><SessionState ContinuousTestingMode="0" Name="ParseFunction_Duration_TotalMinutes" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
|
||||||
<Project Location="/home/pietervdvn/werk/AspectedRouting/AspectedRouting.Test" Presentation="&lt;AspectedRouting.Test&gt;" />
|
|
||||||
</SessionState></s:String>
|
|
||||||
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=a6a74f48_002D8456_002D43c7_002Dbbee_002Dd3da33a8a4be/@EntryIndexedValue"><SessionState ContinuousTestingMode="0" IsActive="True" Name="Integration_TestExamples" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=a6a74f48_002D8456_002D43c7_002Dbbee_002Dd3da33a8a4be/@EntryIndexedValue"><SessionState ContinuousTestingMode="0" IsActive="True" Name="Integration_TestExamples" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
|
||||||
<TestAncestor>
|
<TestAncestor>
|
||||||
<TestId>xUnit::A1309041-8AAE-42D7-A886-94C9FFC6A28C::.NETCoreApp,Version=v3.1::AspectedRouting.Test.ExamplesTest.Integration_TestExamples</TestId>
|
<TestId>xUnit::A1309041-8AAE-42D7-A886-94C9FFC6A28C::.NETCoreApp,Version=v3.1::AspectedRouting.Test.ExamplesTest.Integration_TestExamples</TestId>
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace AspectedRouting.IO.itinero1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public string GenerateFullTestSuite(List<BehaviourTestSuite> profileTests, List<AspectTestSuite> aspectTests)
|
public string GenerateFullTestSuite(List<BehaviourTestSuite> profileTests, List<AspectTestSuite> aspectTests, bool invertPriority = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
_skeleton.AddDep("inv");
|
_skeleton.AddDep("inv");
|
||||||
|
@ -33,7 +33,7 @@ namespace AspectedRouting.IO.itinero1
|
||||||
string.Join("\n\n", profileTests
|
string.Join("\n\n", profileTests
|
||||||
.Where(x => x != null)
|
.Where(x => x != null)
|
||||||
.Select(
|
.Select(
|
||||||
GenerateProfileTestSuite
|
t => GenerateProfileTestSuite(t, invertPriority)
|
||||||
));
|
));
|
||||||
|
|
||||||
return string.Join("\n\n\n", new List<string>
|
return string.Join("\n\n\n", new List<string>
|
||||||
|
@ -47,15 +47,15 @@ namespace AspectedRouting.IO.itinero1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private string GenerateProfileTestSuite(BehaviourTestSuite testSuite)
|
private string GenerateProfileTestSuite(BehaviourTestSuite testSuite, bool invertPriority)
|
||||||
{
|
{
|
||||||
return string.Join("\n",
|
return string.Join("\n",
|
||||||
testSuite.Tests.Select((test, i) => GenerateProfileUnitTestCall(testSuite, i, test.Item1, test.tags))
|
testSuite.Tests.Select((test, i) => GenerateProfileUnitTestCall(testSuite, i, test.Item1, test.tags, invertPriority))
|
||||||
.ToList());
|
.ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GenerateProfileUnitTestCall(BehaviourTestSuite testSuite, int index, ProfileResult expected,
|
private string GenerateProfileUnitTestCall(BehaviourTestSuite testSuite, int index, ProfileResult expected,
|
||||||
Dictionary<string, string> tags)
|
Dictionary<string, string> tags, bool invertPriority)
|
||||||
{
|
{
|
||||||
_skeleton.AddDep("debug_table");
|
_skeleton.AddDep("debug_table");
|
||||||
var parameters = new Dictionary<string, string>();
|
var parameters = new Dictionary<string, string>();
|
||||||
|
@ -88,13 +88,18 @@ namespace AspectedRouting.IO.itinero1
|
||||||
tags.Remove("#" + paramName);
|
tags.Remove("#" + paramName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var expectedPriority = "" + expected.Priority;
|
||||||
|
if (invertPriority) {
|
||||||
|
expectedPriority = $"inv({expectedPriority})";
|
||||||
|
}
|
||||||
|
|
||||||
// Generates something like:
|
// Generates something like:
|
||||||
// function unit_test_profile(profile_function, profile_name, index, expected, tags)
|
// function unit_test_profile(profile_function, profile_name, index, expected, tags)
|
||||||
return
|
return
|
||||||
$"unit_test_profile(behaviour_{testSuite.Profile.Name.AsLuaIdentifier()}_{testSuite.BehaviourName.AsLuaIdentifier()}, " +
|
$"unit_test_profile(behaviour_{testSuite.Profile.Name.AsLuaIdentifier()}_{testSuite.BehaviourName.AsLuaIdentifier()}, " +
|
||||||
$"\"{testSuite.BehaviourName}\", " +
|
$"\"{testSuite.BehaviourName}\", " +
|
||||||
$"{index}, " +
|
$"{index}, " +
|
||||||
$"{{access = \"{D(expected.Access)}\", speed = {expected.Speed}, oneway = \"{D(expected.Oneway)}\", priority = {expected.Priority} }}, " +
|
$"{{access = \"{D(expected.Access)}\", speed = {expected.Speed}, oneway = \"{D(expected.Oneway)}\", priority = {expectedPriority} }}, " +
|
||||||
tags.ToLuaTable() +
|
tags.ToLuaTable() +
|
||||||
")";
|
")";
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ namespace AspectedRouting.IO.itinero2
|
||||||
|
|
||||||
foreach (var (paramName, expr) in _profile.Priority)
|
foreach (var (paramName, expr) in _profile.Priority)
|
||||||
{
|
{
|
||||||
var paramExpr = parameters[paramName].Evaluate(_context);
|
var weightExpr = parameters[paramName].Evaluate(_context);
|
||||||
if (!(paramExpr is double weight))
|
if (!(weightExpr is double weight))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -37,11 +37,20 @@ namespace AspectedRouting.IO.itinero2
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var expression = _profile.Priority[paramName];
|
// The expression might still have multiple typings,
|
||||||
var exprInLua = _skeleton.ToLua(expression);
|
// which take inputs different from 'Tags', so we specialize the expr first
|
||||||
var subs = new Curry(Typs.Tags, new Var(("a"))).UnificationTable(expression.Types.First());
|
var exprSpecialized = expr;
|
||||||
if (subs != null && subs.TryGetValue("$a", out var resultType) &&
|
var resultType = expr.Types.First();
|
||||||
(resultType.Equals(Typs.Bool) || resultType.Equals(Typs.String)))
|
if (exprSpecialized.Types.Count() >=2) {
|
||||||
|
exprSpecialized = expr.Specialize(new Curry(Typs.Tags, new Var("a")));
|
||||||
|
if (exprSpecialized == null) {
|
||||||
|
throw new Exception("Could not specialize expression to type tags -> $a");
|
||||||
|
}
|
||||||
|
resultType = (exprSpecialized.Types.First() as Curry).ResultType;
|
||||||
|
}
|
||||||
|
|
||||||
|
var exprInLua = _skeleton.ToLua(exprSpecialized);
|
||||||
|
if (resultType.Equals(Typs.Bool) || resultType.Equals(Typs.String))
|
||||||
{
|
{
|
||||||
_skeleton.AddDep("parse");
|
_skeleton.AddDep("parse");
|
||||||
exprInLua = "parse(" + exprInLua + ")";
|
exprInLua = "parse(" + exprInLua + ")";
|
||||||
|
@ -78,7 +87,7 @@ namespace AspectedRouting.IO.itinero2
|
||||||
var code = new List<string>
|
var code = new List<string>
|
||||||
{
|
{
|
||||||
"--[[",
|
"--[[",
|
||||||
_profile.Behaviours[_behaviourName]["description"].Evaluate(_context).ToString(),
|
"Calculate the actual factor.forward and factor.backward for a segment with the given properties",
|
||||||
"]]",
|
"]]",
|
||||||
"function factor(tags, result)",
|
"function factor(tags, result)",
|
||||||
" ",
|
" ",
|
||||||
|
@ -97,15 +106,20 @@ namespace AspectedRouting.IO.itinero2
|
||||||
"",
|
"",
|
||||||
" local oneway = " + _skeleton.ToLua(_profile.Oneway),
|
" local oneway = " + _skeleton.ToLua(_profile.Oneway),
|
||||||
" tags.oneway = oneway",
|
" tags.oneway = oneway",
|
||||||
" -- forward calculation",
|
" -- An aspect describing oneway should give either 'both', 'against' or 'width'",
|
||||||
|
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
" -- forward calculation. We set the meta tag '_direction' to 'width' to indicate that we are going forward. The other functions will pick this up",
|
||||||
" tags[\"_direction\"] = \"with\"",
|
" tags[\"_direction\"] = \"with\"",
|
||||||
" local access_forward = " + _skeleton.ToLua(_profile.Access),
|
" local access_forward = " + _skeleton.ToLua(_profile.Access),
|
||||||
" if(oneway == \"against\") then",
|
" if(oneway == \"against\") then",
|
||||||
|
" -- no 'oneway=both' or 'oneway=with', so we can only go back over this segment",
|
||||||
|
" -- we overwrite the 'access_forward'-value with no; whatever it was...",
|
||||||
" access_forward = \"no\"",
|
" access_forward = \"no\"",
|
||||||
" end",
|
" end",
|
||||||
|
|
||||||
" if(access_forward ~= nil and access_forward ~= \"no\") then",
|
" if(access_forward ~= nil and access_forward ~= \"no\") then",
|
||||||
" tags.access = access_forward",
|
" tags.access = access_forward -- might be relevant, e.g. for 'access=dismount' for bicycles",
|
||||||
" result.forward_speed = " + _skeleton.ToLua(_profile.Speed).Indent(),
|
" result.forward_speed = " + _skeleton.ToLua(_profile.Speed).Indent(),
|
||||||
" tags.speed = result.forward_speed",
|
" tags.speed = result.forward_speed",
|
||||||
" local priority = calculate_priority(parameters, tags, result, access_forward, oneway, result.forward_speed)",
|
" local priority = calculate_priority(parameters, tags, result, access_forward, oneway, result.forward_speed)",
|
||||||
|
@ -117,15 +131,15 @@ namespace AspectedRouting.IO.itinero2
|
||||||
" end",
|
" end",
|
||||||
"",
|
"",
|
||||||
" -- backward calculation",
|
" -- backward calculation",
|
||||||
" tags[\"_direction\"] = \"against\"",
|
" tags[\"_direction\"] = \"against\" -- indicate the backward direction to priority calculation",
|
||||||
" local access_backward = " + _skeleton.ToLua(_profile.Access),
|
" local access_backward = " + _skeleton.ToLua(_profile.Access),
|
||||||
"",
|
|
||||||
" if(oneway == \"with\") then",
|
" if(oneway == \"with\") then",
|
||||||
|
" -- no 'oneway=both' or 'oneway=against', so we can only go forward over this segment",
|
||||||
|
" -- we overwrite the 'access_forward'-value with no; whatever it was...",
|
||||||
" access_backward = \"no\"",
|
" access_backward = \"no\"",
|
||||||
" end",
|
" end",
|
||||||
"",
|
|
||||||
" if(access_backward ~= nil and access_backward ~= \"no\") then",
|
" if(access_backward ~= nil and access_backward ~= \"no\") then",
|
||||||
" tags.access = access_backward" +
|
" tags.access = access_backward",
|
||||||
" result.backward_speed = " + _skeleton.ToLua(_profile.Speed).Indent(),
|
" result.backward_speed = " + _skeleton.ToLua(_profile.Speed).Indent(),
|
||||||
" tags.speed = result.backward_speed",
|
" tags.speed = result.backward_speed",
|
||||||
" local priority = calculate_priority(parameters, tags, result, access_backward, oneway, result.backward_speed)",
|
" local priority = calculate_priority(parameters, tags, result, access_backward, oneway, result.backward_speed)",
|
||||||
|
|
|
@ -55,16 +55,20 @@ namespace AspectedRouting.IO.itinero2
|
||||||
|
|
||||||
public string ToLua()
|
public string ToLua()
|
||||||
{
|
{
|
||||||
|
var profileDescr = _profile.Behaviours[_behaviourName]["description"].Evaluate(_context).ToString();
|
||||||
var header =
|
var header =
|
||||||
new List<string>
|
new List<string>
|
||||||
{
|
{
|
||||||
$"name = \"{_profile.Name}.{_behaviourName}\"",
|
$"name = \"{_profile.Name}.{_behaviourName}\"",
|
||||||
$"generationDate = \"{_lastChangeTime:s}\"",
|
$"generationDate = \"{_lastChangeTime:s}\"",
|
||||||
$"description = \"{_profile.Description}\""
|
$"description = \"{profileDescr} ({_profile.Description})\""
|
||||||
};
|
};
|
||||||
|
|
||||||
var tests = new LuaTestPrinter(_skeleton, new List<string>() {"unitTestProfile2"}).GenerateFullTestSuite(
|
var tests = new LuaTestPrinter(_skeleton,
|
||||||
_behaviourTestSuite.ToList(), new List<AspectTestSuite>());
|
new List<string>() {"unitTestProfile2"}).GenerateFullTestSuite(
|
||||||
|
_behaviourTestSuite.ToList(),
|
||||||
|
new List<AspectTestSuite>(),
|
||||||
|
true);
|
||||||
var all = new List<string>
|
var all = new List<string>
|
||||||
{
|
{
|
||||||
header.Lined(),
|
header.Lined(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue