protected override void Compare(AbstractConditionPart left, AbstractConditionPart right) { var leftElem = (VariableConditionPart)left; var rightElem = (VariableConditionPart)right; Assert.AreEqual(leftElem.VariableName, rightElem.VariableName); }
public static void CompareConditionParts(AbstractConditionPart left, AbstractConditionPart right) { Assert.IsNotNull(left); Assert.IsNotNull(right); Assert.IsTrue(right.GetType().IsInstanceOfType(left)); if (left is LiteralConditionPart) { new LiteralConditionComparator().Compare(left, right); } else if (left is OperationConditionPart) { new OperationConditionComparator().Compare(left, right); } else if (left is VariableConditionPart) { new VariableConditionComparator().Compare(left, right); } else if (left is GroupedConditionPart) { new GroupedConditionComparator().Compare(left, right); } else { throw new NotImplementedException("Unable to compare condition, condition part not supported " + right.GetType()); } }
protected override void Compare(AbstractConditionPart left, AbstractConditionPart right) { var leftElem = (LiteralConditionPart)left; var rightElem = (LiteralConditionPart)right; Assert.AreEqual(leftElem.Value, rightElem.Value); }
protected override void Compare(AbstractConditionPart left, AbstractConditionPart right) { var leftElem = (GroupedConditionPart)left; var rightElem = (GroupedConditionPart)right; Assert.AreEqual(leftElem.Values.Count(), rightElem.Values.Count()); Assert.IsTrue(leftElem.Values.Except(rightElem.Values).Any()); }
protected override void Compare(AbstractConditionPart left, AbstractConditionPart right) { var leftElem = (OperationConditionPart)left; var rightElem = (OperationConditionPart)right; Assert.AreEqual(leftElem.Operator, rightElem.Operator); CompareConditionParts(leftElem.LeftSide, rightElem.LeftSide); CompareConditionParts(leftElem.RightSide, rightElem.RightSide); }
public static string Serialize(AbstractConditionPart cond, IDictionary <string, string> variables, IDictionary <string, IEnumerable <string> > arrays) { var valOp = cond as LiteralConditionPart; if (valOp != null) { return(valOp.Value); } var varOp = cond as VariableConditionPart; if (varOp != null) { if (!variables.ContainsKey(varOp.VariableName)) { return(null); } return(variables[varOp.VariableName]); } var oOp = cond as OperationConditionPart; if (oOp != null) { switch (oOp.Operator) { case ConditionPartOperatorEnum.Multiply: return((int.Parse(Serialize(oOp.LeftSide, variables, arrays)) * int.Parse(Serialize(oOp.RightSide, variables, arrays))).ToString()); case ConditionPartOperatorEnum.Divide: return((int.Parse(Serialize(oOp.LeftSide, variables, arrays)) / int.Parse(Serialize(oOp.RightSide, variables, arrays))).ToString()); case ConditionPartOperatorEnum.Add: return((int.Parse(Serialize(oOp.LeftSide, variables, arrays)) + int.Parse(Serialize(oOp.RightSide, variables, arrays))).ToString()); case ConditionPartOperatorEnum.Subtract: return((int.Parse(Serialize(oOp.LeftSide, variables, arrays)) - int.Parse(Serialize(oOp.RightSide, variables, arrays))).ToString()); default: return(oOp.Evaluate(variables, arrays).ToString()); } } return(null); }
protected abstract void Compare(AbstractConditionPart left, AbstractConditionPart right);
private static void ExtractVar(IDictionary <string, ExtractedVariable> variables, AbstractConditionPart v, ExtractedVariable itVar) { var myVar = v as VariableConditionPart; if (myVar != null) { NoteVar(variables, myVar.VariableName, "0", false, itVar); return; } var opPart = v as OperationConditionPart; if (opPart != null) { var opPartLeft = opPart.LeftSide as OperationConditionPart; var opPartRight = opPart.RightSide as OperationConditionPart; if (opPartLeft != null) { ExtractVar(variables, opPartLeft, itVar); } if (opPartRight != null) { ExtractVar(variables, opPartRight, itVar); } var opPartLeftV = opPart.LeftSide as VariableConditionPart; var opPartRightV = opPart.RightSide as VariableConditionPart; if (opPartLeftV != null && opPartRightV != null) { NoteVar(variables, opPartLeftV.VariableName, "{" + opPartRightV.VariableName + "}", false, itVar); NoteVar(variables, opPartRightV.VariableName, "{" + opPartLeftV.VariableName + "}", false, itVar); } else if (opPartLeftV != null) { NoteVars(opPartLeftV, opPart.RightSide, variables, false, itVar); } else if (opPartRightV != null) { NoteVars(opPartRightV, opPart.LeftSide, variables, false, itVar); } } }