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 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(); } }
public void CurrentAddressEvaluatesProperly() { // --- Arrange var assembler = new Z80Assembler(); assembler.Compile("nop \n nop \n nop"); // --- Act var exprNode = ParseExpr("$"); var result = assembler.Eval(null, exprNode); // --- Assert result.Value.ShouldBe((ushort)0x8002); }
public void RndWorksWithNoArgument() { // --- Arrange var assembler = new Z80Assembler(); assembler.Compile(""); // --- Act var exprNode = ParseExpr("rnd()"); // --- Assert var result = assembler.Eval(null, exprNode); result.IsValid.ShouldBeTrue(); result.Type.ShouldBe(ExpressionValueType.Integer); }
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); }
public void CurrentAddressEvaluatesProperlyWithStartAddress() { // --- Arrange var assembler = new Z80Assembler(); assembler.Compile(""); assembler.GetCurrentAssemblyAddress(); assembler.CurrentSegment.StartAddress = 0x6800; assembler.EmitByte(0x00); assembler.EmitByte(0x00); // --- Act var exprNode = ParseExpr("$"); var result = assembler.Eval(exprNode); // --- Assert result.ShouldBe((ushort)0x6802); }
public void RndWorksWithArgument(string source, int lower, int upper) { // --- Arrange var assembler = new Z80Assembler(); assembler.Compile(""); // --- Act var exprNode = ParseExpr(source); // --- Assert var result = assembler.Eval(null, exprNode); result.IsValid.ShouldBeTrue(); result.Type.ShouldBe(ExpressionValueType.Integer); var value = result.AsLong(); value.ShouldBeGreaterThanOrEqualTo(lower); value.ShouldBeLessThanOrEqualTo(upper); }