protected void AssertExpressionValue <T>(string code, T expected) { ExprNode expr = this.AssertExpression(code); Assert.That(ConstantExpressionEvaluator.TryEvaluateAs(expr, out T result)); Assert.That(result, Is.Not.Null); Assert.That(result, Is.EqualTo(expected).Within(1e-10)); }
protected IfStatNode AssertIfStatement(string src, object condValue, int thenStatementCount = 1, int?elseStatementCount = null) { IfStatNode node = this.GenerateAST(src).As <IfStatNode>(); Assert.That(node, Is.Not.Null); this.AssertChildrenParentProperties(node); Assert.That(ConstantExpressionEvaluator.Evaluate(node.Condition), Is.EqualTo(condValue)); Assert.That(node.ThenStat.Children, Has.Exactly(thenStatementCount).Items); if (elseStatementCount is { })
protected void AssertLiteralSuffix(string code, string suffix, object value, Type type) { LitExprNode literal = this.GenerateAST(code).As <LitExprNode>(); Assert.That(literal, Is.Not.Null); Assert.That(literal.Value?.GetType(), Is.EqualTo(type)); Assert.That(literal.Suffix, Is.EqualTo(suffix)); Assert.That(ConstantExpressionEvaluator.Evaluate(literal), Is.EqualTo(value).Within(1e-10)); }
protected void AssertEvaluationException(string code) { ExprNode expr = this.AssertExpression(code); Assert.That(() => ConstantExpressionEvaluator.TryEvaluateAs(expr, out object result), Throws.InstanceOf <EvaluationException>()); }