Parser: Variables and functions.
This commit is contained in:
@@ -14,7 +14,7 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
operation: (a, b) => (decimal)a + (decimal)b
|
||||
);
|
||||
|
||||
var result = expr.Eval();
|
||||
var result = expr.Eval(null);
|
||||
|
||||
Assert.AreEqual(30m, result);
|
||||
}
|
||||
@@ -28,7 +28,7 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
operation: (a, b) => (decimal)a - (decimal)b
|
||||
);
|
||||
|
||||
var result = expr.Eval();
|
||||
var result = expr.Eval(null);
|
||||
|
||||
Assert.AreEqual(-10m, result);
|
||||
}
|
||||
@@ -42,7 +42,7 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
operation: (a, b) => (decimal)a * (decimal)b
|
||||
);
|
||||
|
||||
var result = expr.Eval();
|
||||
var result = expr.Eval(null);
|
||||
|
||||
Assert.AreEqual(200m, result);
|
||||
}
|
||||
@@ -56,7 +56,7 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
operation: (a, b) => (decimal)a / (decimal)b
|
||||
);
|
||||
|
||||
var result = expr.Eval();
|
||||
var result = expr.Eval(null);
|
||||
|
||||
Assert.AreEqual(2m, result);
|
||||
}
|
||||
|
||||
@@ -9,21 +9,21 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
public void ExpressionNumberNode__One()
|
||||
{
|
||||
IExpressionNode node = new ExpressionNumberNode(1);
|
||||
Assert.AreEqual(1m, node.Eval());
|
||||
Assert.AreEqual(1m, node.Eval(null));
|
||||
}
|
||||
|
||||
[TestMethod()]
|
||||
public void ExpressionNumberNode__Two()
|
||||
{
|
||||
IExpressionNode node = new ExpressionNumberNode(2);
|
||||
Assert.AreEqual(2m, node.Eval());
|
||||
Assert.AreEqual(2m, node.Eval(null));
|
||||
}
|
||||
|
||||
[TestMethod()]
|
||||
public void ExpressionNumberNode__OneHundredDotFortyFive()
|
||||
{
|
||||
IExpressionNode node = new ExpressionNumberNode(100.45m);
|
||||
Assert.AreEqual(100.45m, node.Eval());
|
||||
Assert.AreEqual(100.45m, node.Eval(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,22 +9,21 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
public void ExpressionNumberNode__Hello()
|
||||
{
|
||||
IExpressionNode node = new ExpressionStringNode("Hello");
|
||||
Assert.AreEqual("Hello", node.Eval());
|
||||
Assert.AreEqual("Hello", node.Eval(null));
|
||||
}
|
||||
|
||||
[TestMethod()]
|
||||
public void ExpressionNumberNode__World()
|
||||
{
|
||||
IExpressionNode node = new ExpressionStringNode("World");
|
||||
Assert.AreEqual("World", node.Eval());
|
||||
Assert.AreEqual("World", node.Eval(null));
|
||||
}
|
||||
|
||||
[TestMethod()]
|
||||
public void ExpressionNumberNode__Hello_World()
|
||||
{
|
||||
IExpressionNode node = new ExpressionStringNode("Hello World");
|
||||
Assert.AreEqual("Hello World", node.Eval());
|
||||
Assert.AreEqual("Hello World", node.Eval(null));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Linq;
|
||||
|
||||
namespace VAR.ExpressionEvaluator.Tests
|
||||
{
|
||||
@@ -145,5 +146,48 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
|
||||
#endregion Multiplication and division
|
||||
|
||||
#region Variables
|
||||
|
||||
[TestMethod()]
|
||||
public void ParseString__Var1PlusVar2()
|
||||
{
|
||||
EvaluationContext evaluationContex = new EvaluationContext();
|
||||
evaluationContex.SetVariable("v1", 1m);
|
||||
evaluationContex.SetVariable("v2", 1m);
|
||||
string expression = "v1 + v2";
|
||||
object result = Parser.EvaluateString(expression, evaluationContex);
|
||||
Assert.AreEqual(2m, result);
|
||||
}
|
||||
|
||||
[TestMethod()]
|
||||
public void ParseString__Var1MultiplyVar2()
|
||||
{
|
||||
EvaluationContext evaluationContex = new EvaluationContext();
|
||||
evaluationContex.SetVariable("v1", 10m);
|
||||
evaluationContex.SetVariable("v2", 5m);
|
||||
string expression = "v1 * v2";
|
||||
object result = Parser.EvaluateString(expression, evaluationContex);
|
||||
Assert.AreEqual(50m, result);
|
||||
}
|
||||
|
||||
#endregion Variables
|
||||
|
||||
#region Funcitions
|
||||
|
||||
[TestMethod()]
|
||||
public void ParseString__MaxFunction()
|
||||
{
|
||||
EvaluationContext evaluationContex = new EvaluationContext();
|
||||
evaluationContex.SetFunction("max", (parameters) =>
|
||||
{
|
||||
return parameters.Max(p => (decimal)p);
|
||||
});
|
||||
string expression = "max(1,2,10,5)";
|
||||
object result = Parser.EvaluateString(expression, evaluationContex);
|
||||
Assert.AreEqual(10m, result);
|
||||
}
|
||||
|
||||
#endregion Functions
|
||||
|
||||
}
|
||||
}
|
||||
@@ -96,17 +96,17 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
var t = new Tokenizer(new StringReader(testString));
|
||||
|
||||
// "null"
|
||||
Assert.AreEqual(t.Token, Token.Keyword);
|
||||
Assert.AreEqual(t.Token, Token.Identifier);
|
||||
Assert.AreEqual(t.Text, "null");
|
||||
t.NextToken();
|
||||
|
||||
// "true"
|
||||
Assert.AreEqual(t.Token, Token.Keyword);
|
||||
Assert.AreEqual(t.Token, Token.Identifier);
|
||||
Assert.AreEqual(t.Text, "true");
|
||||
t.NextToken();
|
||||
|
||||
// "false"
|
||||
Assert.AreEqual(t.Token, Token.Keyword);
|
||||
Assert.AreEqual(t.Token, Token.Identifier);
|
||||
Assert.AreEqual(t.Text, "false");
|
||||
t.NextToken();
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace VAR.ExpressionEvaluator.Tests
|
||||
t.NextToken();
|
||||
|
||||
// "false"
|
||||
Assert.AreEqual(t.Token, Token.Keyword);
|
||||
Assert.AreEqual(t.Token, Token.Identifier);
|
||||
Assert.AreEqual(t.Text, "false");
|
||||
t.NextToken();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user