4 Commits
0.2.6 ... 0.2.8

12 changed files with 61 additions and 26 deletions

View File

@@ -241,6 +241,19 @@ namespace VAR.ExpressionEvaluator.Tests
Assert.Equal(4m, result); Assert.Equal(4m, result);
} }
[Fact]
public void Functions__ZeroParameters()
{
EvaluationContext evaluationContex = new EvaluationContext();
evaluationContex.SetFunction("constant", (parameters) =>
{
return 9m;
});
string expression = "constant()";
object result = Parser.EvaluateString(expression, evaluationContex);
Assert.Equal(9m, result);
}
#endregion Functions #endregion Functions
#region Strings #region Strings
@@ -253,6 +266,14 @@ namespace VAR.ExpressionEvaluator.Tests
Assert.Equal("Hello World", result); Assert.Equal("Hello World", result);
} }
[Fact]
public void Strings__Contatenate_Hello_World_SimpleQuotes()
{
string expression = "'Hello' + ' ' +'World'";
object result = Parser.EvaluateString(expression);
Assert.Equal("Hello World", result);
}
[Fact] [Fact]
public void Strings__Contatenate_Hello_World_WithVariables() public void Strings__Contatenate_Hello_World_WithVariables()
{ {
@@ -864,6 +885,17 @@ namespace VAR.ExpressionEvaluator.Tests
Assert.False((bool?)result); Assert.False((bool?)result);
} }
[Fact()]
public void Misc__ProductWithStringDecimals_EqualsFalse()
{
EvaluationContext evaluationContex = new EvaluationContext();
evaluationContex.SetVariable("$1109", "1933");
evaluationContex.SetVariable("$1150", "02.00000");
string expression = "$1109 * $1150";
object result = Parser.EvaluateString(expression, evaluationContex);
Assert.Equal(3866.00000M, result);
}
#endregion Misc #endregion Misc
} }
} }

View File

@@ -18,7 +18,7 @@ namespace VAR.ExpressionEvaluator
if (leftValue is string) if (leftValue is string)
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -26,7 +26,7 @@ namespace VAR.ExpressionEvaluator
} }
if (rightValue is string) if (rightValue is string)
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -44,7 +44,7 @@
// Decimal // Decimal
if (leftValue is string) if (leftValue is string)
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
leftValue = null; leftValue = null;
} }
@@ -55,7 +55,7 @@
} }
if (rightValue is string) if (rightValue is string)
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
rightValue = null; rightValue = null;
} }
@@ -85,7 +85,7 @@
return null; return null;
} }
decimal decValue; decimal decValue;
if (decimal.TryParse(text, out decValue)) if (decimal.TryParse(text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decValue))
{ {
return decValue != 0; return decValue != 0;
} }

View File

@@ -24,7 +24,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -39,7 +39,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -24,7 +24,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -39,7 +39,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -24,7 +24,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -39,7 +39,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -24,7 +24,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -39,7 +39,7 @@ namespace VAR.ExpressionEvaluator
} }
else else
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -18,7 +18,7 @@ namespace VAR.ExpressionEvaluator
if (leftValue is string) if (leftValue is string)
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -26,7 +26,7 @@ namespace VAR.ExpressionEvaluator
} }
if (rightValue is string) if (rightValue is string)
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -18,7 +18,7 @@ namespace VAR.ExpressionEvaluator
if (leftValue is string) if (leftValue is string)
{ {
if (decimal.TryParse((string)leftValue, out decimal dec) == false) if (decimal.TryParse((string)leftValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)leftValue));
} }
@@ -26,7 +26,7 @@ namespace VAR.ExpressionEvaluator
} }
if (rightValue is string) if (rightValue is string)
{ {
if (decimal.TryParse((string)rightValue, out decimal dec) == false) if (decimal.TryParse((string)rightValue, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)rightValue));
} }

View File

@@ -18,7 +18,7 @@ namespace VAR.ExpressionEvaluator
if (value is string) if (value is string)
{ {
if (decimal.TryParse((string)value, out decimal dec) == false) if (decimal.TryParse((string)value, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out decimal dec) == false)
{ {
throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)value)); throw new Exception(string.Format("Can't convert to decimal string value \"{0}\"", (string)value));
} }

View File

@@ -32,7 +32,7 @@ namespace VAR.ExpressionEvaluator
#region Creator #region Creator
private ITokenizer _tokenizer; private readonly ITokenizer _tokenizer;
public Parser(ITokenizer tokenizer) public Parser(ITokenizer tokenizer)
{ {
@@ -239,6 +239,8 @@ namespace VAR.ExpressionEvaluator
{ {
_tokenizer.NextToken(); _tokenizer.NextToken();
var parameters = new List<IExpressionNode>(); var parameters = new List<IExpressionNode>();
if (_tokenizer.Token != Token.ParenthesisEnd)
{
while (true) while (true)
{ {
parameters.Add(ParseBooleanOp()); parameters.Add(ParseBooleanOp());
@@ -249,6 +251,7 @@ namespace VAR.ExpressionEvaluator
} }
break; break;
} }
}
if (_tokenizer.Token != Token.ParenthesisEnd) if (_tokenizer.Token != Token.ParenthesisEnd)
{ {
throw new MissingCloseParenthesisException(); throw new MissingCloseParenthesisException();

View File

@@ -8,7 +8,7 @@
<PropertyGroup> <PropertyGroup>
<PackageId>VAR.ExpressionEvaluator</PackageId> <PackageId>VAR.ExpressionEvaluator</PackageId>
<Title>VAR.ExpressionEvaluator</Title> <Title>VAR.ExpressionEvaluator</Title>
<Version>0.2.6</Version> <Version>0.2.8</Version>
<Description>Expression Evaluation Library</Description> <Description>Expression Evaluation Library</Description>
<Authors>VAR</Authors> <Authors>VAR</Authors>
<Company>VAR</Company> <Company>VAR</Company>