mirror of
https://github.com/0xJ1M/MathsEngine.git
synced 2026-06-05 05:10:06 +00:00
93 lines
3.2 KiB
C#
93 lines
3.2 KiB
C#
using MathEngine.Parser.Tokeniser;
|
|
using MathEngine.Parser.Parser;
|
|
namespace EngineTests
|
|
{
|
|
/// <summary>
|
|
/// Class for testing the Parser
|
|
/// </summary>
|
|
[TestClass]
|
|
public class ParserTests
|
|
{
|
|
/// <summary>
|
|
/// Test the Parser on a basic List of tokens
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void TestParserBasicExpression()
|
|
{
|
|
//Arrange
|
|
string testString = "3+4";
|
|
List<Token> testList = Tokeniser.Tokenise(testString);
|
|
Token three = new("3", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Token four = new("4", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Assert.IsNotNull(testList);
|
|
Stack<Token> expectedStack = new();
|
|
expectedStack.Push(Token.Plus);
|
|
expectedStack.Push(four);
|
|
expectedStack.Push(three);
|
|
//Act
|
|
Stack<Token> returnedStack = Parser.Parse(testList);
|
|
//Assert
|
|
if (returnedStack.Count != expectedStack.Count)
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
else
|
|
{
|
|
while (returnedStack.Count > 0)
|
|
{
|
|
if (!returnedStack.Pop().Equals(expectedStack.Pop()))
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Test the Parser on a more compilicated basic expression to see if operator precedence is respected
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void TestParserBasicExpressionAllOperators()
|
|
{
|
|
//Arrange
|
|
string testString = "3+4*8-47.2/9";
|
|
List<Token> testList = Tokeniser.Tokenise(testString);
|
|
Token three = new("3", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Token four = new("4", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Token eight = new("8", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Token nine = new("9", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Token fourSevenPoint2 = new("47.2", Token.Type.Numeric, Token.NumericType.Decimal, 0);
|
|
Assert.IsNotNull(testList);
|
|
Stack<Token> expectedStack = new();
|
|
expectedStack.Push(Token.Minus);
|
|
expectedStack.Push(Token.Divide);
|
|
expectedStack.Push(nine);
|
|
expectedStack.Push(fourSevenPoint2);
|
|
expectedStack.Push(Token.Plus);
|
|
expectedStack.Push(Token.Multiply);
|
|
expectedStack.Push(eight);
|
|
expectedStack.Push(four);
|
|
expectedStack.Push(three);
|
|
//Act
|
|
Stack<Token> returnedStack = Parser.Parse(testList);
|
|
//Assert
|
|
if (returnedStack.Count != expectedStack.Count)
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
else
|
|
{
|
|
while (returnedStack.Count > 0)
|
|
{
|
|
if (!returnedStack.Pop().Equals(expectedStack.Pop()))
|
|
{
|
|
Assert.Fail();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|