示例#1
0
        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();
            }
        }
示例#2
0
        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();
            }
        }
示例#3
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }