public void TestTimeZoneOffsetNonDST() { TimeZoneInfo tzInfo = TimeZoneInfo.Local; var testDate = new DateTime(2021, 6, 1); var tzOffsetDays = tzInfo.GetUtcOffset(testDate).TotalDays * -1; var numberValue = engine.Eval("TimeZoneOffset(Date(2021, 6, 1))") as NumberValue; Assert.NotNull(numberValue); Assert.Equal(numberValue.Value, tzOffsetDays); }
public void BasicEval() { var engine = new RecalcEngine(); engine.UpdateVariable("M", 10.0); engine.UpdateVariable("M2", -4); var result = engine.Eval("M + Abs(M2)"); Assert.Equal(14.0, ((NumberValue)result).Value); }
public void EvalWithGlobals() { var engine = new RecalcEngine(); var context = FormulaValue.NewRecord(new { x = 15 }); var result = engine.Eval("With({y:2}, x+y)", context); Assert.Equal(17.0, ((NumberValue)result).Value); }
public void CustomFunction() { var engine = new RecalcEngine(); engine.AddFunction(new TestCustomFunction()); // Shows up in enuemeration var func = engine.GetAllFunctionNames().First(name => name == "TestCustom"); Assert.NotNull(func); // Can be invoked. var result = engine.Eval("TestCustom(2,3)"); Assert.Equal(6.0, result.ToObject()); }
public override Task <FormulaValue> RunAsync(string expr) { var result = _engine.Eval(expr); return(Task.FromResult(result)); }