Skip to content

Commit bbba562

Browse files
committed
(FabianNitsche) Interpreter constants fix pieterderycke#72
1 parent 6da2088 commit bbba562

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

Jace.Tests/DecimalCalculationEngineTests.cs

+26
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,32 @@ public void TestVariableCaseFuncInterpreted()
588588
decimal result = formula(variables);
589589
}
590590

591+
[TestMethod]
592+
public void TestConstantBuildCompiled()
593+
{
594+
var engine = CreateEngineHelper<decimal>(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
595+
Func<Dictionary<string, decimal>, decimal> formula = engine.Build("pi");
596+
597+
var variables = new Dictionary<string, decimal>();
598+
599+
decimal result = formula(variables);
600+
601+
Assert.AreEqual((decimal) Math.PI , result);
602+
}
603+
604+
[TestMethod]
605+
public void TestConstantBuildInterpreted()
606+
{
607+
var engine = CreateEngineHelper<decimal>(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
608+
Func<Dictionary<string, decimal>, decimal> formula = engine.Build("pi");
609+
610+
Dictionary<string, decimal> variables = new Dictionary<string, decimal>();
611+
612+
decimal result = formula(variables);
613+
614+
Assert.AreEqual((decimal)Math.PI, result);
615+
}
616+
591617
[TestMethod]
592618
public void TestVariableCaseFuncCompiled()
593619
{

Jace.Tests/DoubleCalculationEngineTests.cs

+26
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,32 @@ public void TestVariableCaseFuncInterpreted()
588588
double result = formula(variables);
589589
}
590590

591+
[TestMethod]
592+
public void TestConstantBuildCompiled()
593+
{
594+
var engine = CreateEngineHelper<double>(CultureInfo.InvariantCulture, ExecutionMode.Compiled);
595+
Func<Dictionary<string, double>, double> formula = engine.Build("pi");
596+
597+
var variables = new Dictionary<string, double>();
598+
599+
double result = formula(variables);
600+
601+
Assert.AreEqual(Math.PI, result);
602+
}
603+
604+
[TestMethod]
605+
public void TestConstantBuildInterpreted()
606+
{
607+
var engine = CreateEngineHelper<double>(CultureInfo.InvariantCulture, ExecutionMode.Interpreted);
608+
Func<Dictionary<string, double>, double> formula = engine.Build("pi");
609+
610+
Dictionary<string, double> variables = new Dictionary<string, double>();
611+
612+
double result = formula(variables);
613+
614+
Assert.AreEqual(Math.PI, result);
615+
}
616+
591617
[TestMethod]
592618
public void TestVariableCaseFuncCompiled()
593619
{

Jace/Execution/Interpreter.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,11 @@ public T Execute(Operation operation,
6969

7070
if (variableFound)
7171
return value;
72-
else
73-
throw new VariableNotDefinedException(string.Format("The variable \"{0}\" used is not defined.", variable.Name));
72+
73+
if (constantRegistry.IsConstantName(variable.Name))
74+
return constantRegistry.GetConstantInfo(variable.Name).Value;
75+
76+
throw new VariableNotDefinedException(string.Format("The variable \"{0}\" used is not defined.", variable.Name));
7477
}
7578
else if (operation.GetType() == typeof(Multiplication))
7679
{

0 commit comments

Comments
 (0)