add: 这就是完全的Pascal (#11)
5!8!4!个状态堂堂登场! Co-authored-by: Ichirinko <1621543655@qq.com> Reviewed-on: PostGuard/Canon#11
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user