Canon/Canon.Tests/CodeGeneratorTests/ReadTest.cs
Lan_G 5ca947125b feat-generater (#69)
Reviewed-on: PostGuard/Canon#69
Co-authored-by: Lan_G <2911328695@qq.com>
Co-committed-by: Lan_G <2911328695@qq.com>
2024-04-30 14:43:14 +08:00

41 lines
1.2 KiB
C#

using Canon.Core.SemanticParser;
using Canon.Core.SyntaxNodes;
using Canon.Tests.Utils;
using Xunit.Abstractions;
namespace Canon.Tests.CodeGeneratorTests;
public class ReadTest
{
private readonly ITestOutputHelper _output;
public ReadTest(ITestOutputHelper output)
{
_output = output;
}
[Fact]
public void SimpleReadTest()
{
const string program = """
program main;
var a, b:integer;
begin
read(a);
write(b + 1);
end.
""";
ProgramStruct root = CompilerHelpers.Analyse(program);
SyntaxTreeTraveller traveller = new();
CCodeGenerateVisitor visitor = new();
traveller.Travel(root, visitor);
string result = visitor.Builder.Build();
_output.WriteLine(result);
Assert.Equal("#include <stdbool.h>\n#include <stdio.h>\nint b, a;\n" +
"bool tag, flag;\nint main()\n{\na = 1;\nb = a + b * 1 /(double)1 - 1 / 1 - (-2);" +
"\ntag = flag || tag;\n;\n\nreturn 0;\n}\n", visitor.Builder.Build());
}
}