Add unfolded generation of lua for better performance
This commit is contained in:
parent
aae20662e2
commit
3f0793ca22
42 changed files with 7629 additions and 325 deletions
108
AspectedRouting.Test/Snippets/SnippetTests.cs
Normal file
108
AspectedRouting.Test/Snippets/SnippetTests.cs
Normal file
|
@ -0,0 +1,108 @@
|
|||
using System.Collections.Generic;
|
||||
using AspectedRouting.IO.LuaSkeleton;
|
||||
using AspectedRouting.IO.LuaSnippets;
|
||||
using AspectedRouting.Language;
|
||||
using AspectedRouting.Language.Expression;
|
||||
using AspectedRouting.Language.Functions;
|
||||
using AspectedRouting.Language.Typ;
|
||||
using Xunit;
|
||||
|
||||
namespace AspectedRouting.Test.Snippets
|
||||
{
|
||||
public class SnippetTests
|
||||
{
|
||||
[Fact]
|
||||
public void DefaultSnippet_SimpleDefault_GetsLua()
|
||||
{
|
||||
var gen = new DefaultSnippet();
|
||||
var lua = new LuaSkeleton(new Context());
|
||||
var code = gen.Convert(lua, "result", new List<IExpression> {
|
||||
new Constant("the_default_value"),
|
||||
Funcs.Id,
|
||||
new Constant("value")
|
||||
});
|
||||
Assert.Contains("if (result == nil) then\n result = \"the_default_value\"", code);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void FirstOfSnippet_SimpleFirstOf_GetLua()
|
||||
{
|
||||
var gen = new FirstMatchOfSnippet();
|
||||
var lua = new LuaSkeleton(new Context());
|
||||
|
||||
// FirstMatchOf: [a] -> (Tags -> [a]) -> Tags -> a
|
||||
|
||||
// Order: [string]
|
||||
var order = new Constant(new List<IExpression> {
|
||||
new Constant("bicycle"),
|
||||
new Constant("access")
|
||||
});
|
||||
|
||||
// Func: (Tags -> [a])
|
||||
var func = new Apply(
|
||||
Funcs.StringStringToTags,
|
||||
new Mapping(
|
||||
new[] {"bicycle", "access"},
|
||||
new IExpression[] {
|
||||
Funcs.Id,
|
||||
Funcs.Id
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
var tags = new LuaLiteral(new[] {Typs.Tags}, "tags");
|
||||
|
||||
var code = gen.Convert(lua, "result",
|
||||
new List<IExpression> {
|
||||
order,
|
||||
func,
|
||||
tags
|
||||
}
|
||||
);
|
||||
Assert.Equal(
|
||||
"if (tags[\"bicycle\"] ~= nil) then\n result = tags[\"bicycle\"]\nelseif (tags[\"access\"] ~= nil) then\n result = tags[\"access\"]\nend\n",
|
||||
code);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void SimpleMappingSnippet_SimpleMapping_GeneratesLua()
|
||||
{
|
||||
var mapping = new Mapping(
|
||||
new[] {"1", "-1"},
|
||||
new IExpression[] {
|
||||
new Constant("with"),
|
||||
new Constant("against")
|
||||
}
|
||||
);
|
||||
var gen = new SimpleMappingSnippet(mapping);
|
||||
var code = gen.Convert(new LuaSkeleton(new Context()), "result", new List<IExpression> {
|
||||
new LuaLiteral(Typs.String, "tags.oneway")
|
||||
});
|
||||
|
||||
var expected =
|
||||
"local v\nv = tags.oneway\nif (v == \"1\") then\n result = \"with\"\nelseif (v == \"-1\") then\n result = \"against\"\nend";
|
||||
Assert.Equal(expected, code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MultiplySnippet_SimpleMultiply_GeneratesLua()
|
||||
{
|
||||
var gen = new MultiplySnippet();
|
||||
var f = new Apply(
|
||||
Funcs.Multiply,
|
||||
null
|
||||
);
|
||||
|
||||
|
||||
var code = gen.Convert(new LuaSkeleton(new Context()),
|
||||
"result", new List<IExpression>()
|
||||
);
|
||||
|
||||
var expected =
|
||||
"local v\nv = tags.oneway\nif (v == \"1\") then\n result = \"with\"\nelseif (v == \"-1\") then\n result = \"against\"\nend";
|
||||
Assert.Equal(expected, code);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue