예제 #1
0
        public void ConvertSimpleExpression(string input, ConditionCompare compareOperation, int expectedValue)
        {
            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(compareOperation, condition.CompareInstruction.Operation);

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

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

            Assert.IsType <ConstValue>(condition.CompareInstruction.Right);
            Assert.Equal(expectedValue, condition.CompareInstruction.Right.GetValue(null, null));
        }
        public void ShouldParseComparisonOperators(string input, ConditionCompare compareOp)
        {
            Parser parser = new Parser();
            var    tree   = parser.Parse(input);

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

            Assert.Equal(compareOp, 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(MemoryAddressKind.Int8, left.Kind);
            Assert.Equal(OperandType.Standard, left.Type);
            Assert.Equal(OperandFlag.None, left.Flag);

            Assert.Equal(8, right.Value);
        }
예제 #3
0
 public ConditionCompare(ConditionCompare other)
 {
     this.ValueProvider = other.ValueProvider;
     this.Operation     = other.Operation;
     this.Value         = other.Value;
 }