public void ShouldParseMemoryToMemoryComparison(string input, MemoryAddressKind leftKind, long leftAddress, MemoryAddressKind rightKind, long rightAddress)
        {
            Parser parser = new Parser();
            var    tree   = parser.Parse(input);

            var condition = tree.Core.Conditions[0];

            Assert.Equal(ConditionCompare.Equals, condition.CompareOperator);
            Assert.Equal(0, condition.HitCount);
            Assert.IsType <MemoryAddressAST>(condition.Left);
            Assert.IsType <MemoryAddressAST>(condition.Right);

            var left = condition.Left as MemoryAddressAST;

            Assert.Equal(leftAddress, left.Address);
            Assert.Equal(leftKind, left.Kind);
            Assert.Equal(OperandType.Standard, left.Type);
            Assert.Equal(OperandFlag.None, left.Flag);

            var right = condition.Right as MemoryAddressAST;

            Assert.Equal(rightAddress, right.Address);
            Assert.Equal(rightKind, right.Kind);
            Assert.Equal(OperandType.Standard, right.Type);
            Assert.Equal(OperandFlag.None, right.Flag);
        }
Beispiel #2
0
        public void ConvertReadMemoryKind(string input, MemoryAddressKind expectedMemoryKind)
        {
            Parser parser = new Parser();
            var    tree   = parser.Parse(input);

            var achivementInstruction = AstToEvaluator.FromAST(tree);

            Assert.NotNull(achivementInstruction.Core);

            var conditionGroup = achivementInstruction.Core;

            Assert.Single(conditionGroup.Conditions);

            var condition = conditionGroup.Conditions[0];

            Assert.NotNull(condition.CompareInstruction);

            Assert.Equal(ConditionCompare.Equals, condition.CompareInstruction.Operation);

            Assert.IsType <ReadMemoryValue>(condition.CompareInstruction.Left);
            var readMemoryValue = condition.CompareInstruction.Left as ReadMemoryValue;

            Assert.Equal(0x1234, readMemoryValue.Address);
            Assert.Equal(expectedMemoryKind, readMemoryValue.Kind);

            Assert.IsType <ConstValue>(condition.CompareInstruction.Right);
            Assert.Equal(42, condition.CompareInstruction.Right.GetValue(null, null));
        }
        public void ShouldParseMemoryAddressKind(string input, MemoryAddressKind addressKind)
        {
            Parser parser = new Parser();
            var    tree   = parser.Parse(input);

            var condition = tree.Core.Conditions[0];

            Assert.Equal(ConditionCompare.Equals, condition.CompareOperator);
            Assert.Equal(0, condition.HitCount);
            Assert.IsType <MemoryAddressAST>(condition.Left);
            Assert.IsType <NumberAST>(condition.Right);

            var left  = condition.Left as MemoryAddressAST;
            var right = condition.Right as NumberAST;

            Assert.Equal(0x1234, left.Address);
            Assert.Equal(addressKind, left.Kind);
            Assert.Equal(OperandType.Standard, left.Type);
            Assert.Equal(OperandFlag.None, left.Flag);

            Assert.Equal(8, right.Value);
        }