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); }
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); }