add: 这就是完全的Pascal (#11)

5!8!4!个状态堂堂登场!

Co-authored-by: Ichirinko <1621543655@qq.com>
Reviewed-on: PostGuard/Canon#11
This commit is contained in:
2024-03-13 23:58:06 +08:00
parent 184604940e
commit 99fdd6438b
7 changed files with 1088 additions and 45 deletions

View File

@@ -6,45 +6,36 @@ namespace Canon.Tests.LexicalParserTests;
public class OperatorTypeTests
{
[Theory]
[InlineData("+ 123", OperatorType.Plus, 0u, 0u, true)]
[InlineData("1 + 123", OperatorType.Plus, 0u, 2u, true)]
[InlineData("+123", OperatorType.Plus, 0u, 0u, true)]
[InlineData("m +123", OperatorType.Plus, 0u, 2u, true)]
[InlineData("-123", OperatorType.Minus, 0u, 0u, true)]
[InlineData("*123", OperatorType.Multiply, 0u, 0u, true)]
[InlineData("/123", OperatorType.Divide, 0u, 0u, true)]
[InlineData("=123", OperatorType.Equal, 0u, 0u, true)]
[InlineData("<123", OperatorType.Less, 0u, 0u, true)]
[InlineData(">123", OperatorType.Greater, 0u, 0u, true)]
[InlineData("<=123", OperatorType.LessEqual, 0u, 0u, true)]
[InlineData(">=123", OperatorType.GreaterEqual, 0u, 0u, true)]
[InlineData("<>123", OperatorType.NotEqual, 0u, 0u, true)]
[InlineData(":=123", OperatorType.Assign, 0u, 0u, true)]
[InlineData("and 123", OperatorType.And, 0u, 0u, true)]
[InlineData("or123", OperatorType.Or, 0u, 0u, true)]
[InlineData("mod123", OperatorType.Mod, 0u, 0u, true)]
[InlineData("and123", OperatorType.And, 0u, 0u, false)]
[InlineData("andasd", OperatorType.And, 0u, 0u, false)]
[InlineData("andand", OperatorType.And, 0u, 0u, false)]
[InlineData("<><123", OperatorType.NotEqual, 0u, 0u, false)]
[InlineData("<><123", OperatorType.Less, 0u, 0u, false)]
[InlineData("<=<123", OperatorType.LessEqual, 0u, 0u, false)]
public void SmokeTest(string input, OperatorType type, uint expectedLinePos, uint expectedCharacterPos, bool expectedResult)
[InlineData("+ 123", OperatorType.Plus)]
[InlineData("1 + 123", OperatorType.Plus)]
[InlineData("+123", OperatorType.Plus)]
[InlineData("m +123", OperatorType.Plus)]
[InlineData("-123", OperatorType.Minus)]
[InlineData("*123", OperatorType.Multiply)]
[InlineData("/123", OperatorType.Divide)]
[InlineData("=123", OperatorType.Equal)]
[InlineData("<123", OperatorType.Less)]
[InlineData(">123", OperatorType.Greater)]
[InlineData("<=123", OperatorType.LessEqual)]
[InlineData(">=123", OperatorType.GreaterEqual)]
[InlineData("<>123", OperatorType.NotEqual)]
[InlineData(":=123", OperatorType.Assign)]
public void ParseTest(string input, OperatorType result)
{
LinkedList<char> content = Utils.GetLinkedList(input);
Assert.Equal(expectedResult, OperatorSemanticToken.TryParse(expectedLinePos, expectedCharacterPos, content.First!,
out OperatorSemanticToken? token));
if (expectedResult)
{
Assert.NotNull(token);
Assert.Equal(type, token.OperatorType);
Assert.Equal(expectedLinePos, token.LinePos);
Assert.Equal(expectedCharacterPos, token.CharacterPos);
}
else
{
Assert.Null(token);
}
Assert.True(OperatorSemanticToken.TryParse(0, 0,
content.First!, out OperatorSemanticToken? token));
Assert.Equal(result, token?.OperatorType);
}
[Theory]
[InlineData("<><123")]
[InlineData("<=<123")]
public void ParseFailedTest(string input)
{
LinkedList<char> content = Utils.GetLinkedList(input);
Assert.False(OperatorSemanticToken.TryParse(0, 0,
content.First!, out OperatorSemanticToken? token));
Assert.Null(token);
}
}