protected void EvalExpression(string expr, double?expected, bool hasEvaluationError = false, Dictionary <string, ushort> symbols = null) { var assembler = new Z80Assembler(); assembler.Compile(""); if (symbols != null) { foreach (var pair in symbols) { assembler.SetSymbolValue(pair.Key, new ExpressionValue(pair.Value)); } } var exprNode = ParseExpr(expr); var result = assembler.Eval(null, exprNode); if (expected == null) { result.ShouldBeNull(); } else { Math.Abs(Math.Round(result.AsReal(), 8) - Math.Round(expected.Value, 8)).ShouldBeLessThanOrEqualTo(10 * double.Epsilon); } if (hasEvaluationError) { exprNode.EvaluationError.ShouldNotBeNull(); } }
protected void EvalExpression(string expr, ushort?expected, bool hasEvaluationError = false, Dictionary <string, ushort> symbols = null) { var assembler = new Z80Assembler(); assembler.Compile(""); if (symbols != null) { foreach (var pair in symbols) { assembler.SetSymbolValue(pair.Key, new ExpressionValue(pair.Value)); } } var exprNode = ParseExpr(expr); var result = assembler.Eval(null, exprNode); if (expected == null) { result.ShouldBeNull(); } else { result.Value.ShouldBe(expected.Value); } if (hasEvaluationError) { exprNode.EvaluationError.ShouldNotBeNull(); } }
protected ExpressionValue EvalImmediate(string expr, bool hasEvaluationError = false, Dictionary <string, ushort> symbols = null) { var assembler = new Z80Assembler(); assembler.Compile(""); if (symbols != null) { foreach (var pair in symbols) { assembler.SetSymbolValue(pair.Key, new ExpressionValue(pair.Value)); } } var exprNode = ParseExpr(expr); return(assembler.EvalImmediate(null, exprNode)); }
protected void RemainsUnevaluated(string expr, bool hasEvaluationError = false, Dictionary <string, ushort> symbols = null) { var assembler = new Z80Assembler(); assembler.Compile(""); if (symbols != null) { foreach (var pair in symbols) { assembler.SetSymbolValue(pair.Key, new ExpressionValue(pair.Value)); } } var exprNode = ParseExpr(expr); var result = assembler.Eval(null, exprNode); result.ShouldBe(ExpressionValue.NonEvaluated); }