Example #1
0
        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());
        }
Example #5
0
        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);
Example #8
0
        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);
                }
            }
        }