Exemple #1
0
        public void CalculateNew_Div_ShouldReturnNewItem()
        {
            MyNumberItem left    = new MyNumberItem(null, null, 1, 21, MyNumberOperators.ADD, 2, 0);
            MyNumberItem right   = new MyNumberItem(null, null, 3, 7, MyNumberOperators.ADD, 28, 1);
            MyNumberItem newItem = left.CalculateNew(right, MyNumberOperators.DIVIDE, 14);

            Assert.AreEqual(3, newItem.currentValue);
        }
        public void FindSolution_ShouldReturnResult(int number, int[] numbers, string expression, int result)
        {
            MyNumberItem myItem = engine.FindSolution(number, numbers);

            Assert.IsNotNull(myItem);
            Assert.AreEqual(result, myItem.currentValue);
            Assert.AreEqual(expression, myItem.ToString());
        }
        public override bool Equals(object obj)
        {
            if (!(obj is MyNumberItem))
            {
                return(false);
            }
            MyNumberItem other = (MyNumberItem)obj;

            return(other.currentValue == currentValue && other.mask == mask);
        }
 public MyNumberItem(MyNumberItem left, MyNumberItem right, int numbersUsed,
                     int currentValue, MyNumberOperators operand, int mask, int startIndex)
 {
     this.left         = left;
     this.right        = right;
     this.currentValue = currentValue;
     this.operand      = operand;
     this.mask         = mask;
     this.numbersUsed  = numbersUsed;
     this.startIndex   = startIndex;
 }
Exemple #5
0
        public void CalculateNew_Add_ShouldReturnNewItem()
        {
            MyNumberItem left    = new MyNumberItem(null, null, 1, 10, MyNumberOperators.ADD, 2, 0);
            MyNumberItem right   = new MyNumberItem(null, null, 1, 19, MyNumberOperators.ADD, 4, 1);
            MyNumberItem newItem = left.CalculateNew(right, MyNumberOperators.ADD, 2);

            Assert.AreEqual(29, newItem.currentValue);
            Assert.AreEqual(2, newItem.numbersUsed);
            Assert.AreEqual(2, newItem.startIndex);
            Assert.AreEqual(6, newItem.mask);
        }
Exemple #6
0
        public void CalculateNew_SubResultLessThan1_ShouldReturnNull()
        {
            MyNumberItem left    = new MyNumberItem(null, null, 1, 1, MyNumberOperators.ADD, 2, 0);
            MyNumberItem right   = new MyNumberItem(null, null, 3, 7, MyNumberOperators.ADD, 28, 1);
            MyNumberItem newItem = left.CalculateNew(right, MyNumberOperators.SUB, 14);

            Assert.IsNull(newItem);
            left    = new MyNumberItem(null, null, 1, 7, MyNumberOperators.ADD, 2, 0);
            newItem = left.CalculateNew(right, MyNumberOperators.SUB, 14);
            Assert.IsNull(newItem);
        }
Exemple #7
0
        public void CalculateNew_DivNotDividable_ShouldReturnNull()
        {
            MyNumberItem left    = new MyNumberItem(null, null, 1, 5, MyNumberOperators.ADD, 2, 0);
            MyNumberItem right   = new MyNumberItem(null, null, 3, 7, MyNumberOperators.ADD, 28, 1);
            MyNumberItem newItem = left.CalculateNew(right, MyNumberOperators.DIVIDE, 14);

            Assert.IsNull(newItem);
            left    = new MyNumberItem(null, null, 1, 13, MyNumberOperators.ADD, 2, 0);
            newItem = left.CalculateNew(right, MyNumberOperators.DIVIDE, 14);
            Assert.IsNull(newItem);
        }
Exemple #8
0
        public void CalculateNew_Mul_ShouldReturnNewItem()
        {
            MyNumberItem left    = new MyNumberItem(null, null, 1, 5, MyNumberOperators.ADD, 2, 0);
            MyNumberItem right   = new MyNumberItem(null, null, 3, 7, MyNumberOperators.ADD, 28, 1);
            MyNumberItem newItem = left.CalculateNew(right, MyNumberOperators.MULTIPLY, 14);

            Assert.AreEqual(35, newItem.currentValue);
            Assert.AreEqual(4, newItem.numbersUsed);
            Assert.AreEqual(14, newItem.startIndex);
            Assert.AreEqual(30, newItem.mask);
        }
Exemple #9
0
        public void CalculateNew_Sub_ShouldReturnNewItem()
        {
            MyNumberItem left    = new MyNumberItem(null, null, 1, 33, MyNumberOperators.ADD, 1, 0);
            MyNumberItem right   = new MyNumberItem(null, null, 2, 19, MyNumberOperators.ADD, 12, 1);
            MyNumberItem newItem = left.CalculateNew(right, MyNumberOperators.SUB, 4);

            Assert.AreEqual(14, newItem.currentValue);
            Assert.AreEqual(3, newItem.numbersUsed);
            Assert.AreEqual(4, newItem.startIndex);
            Assert.AreEqual(13, newItem.mask);
        }
        public MyNumberItem CalculateNew(MyNumberItem right, MyNumberOperators op, int newStartIndex)
        {
            int newValue;

            switch (op)
            {
            case MyNumberOperators.ADD:
                newValue = this.currentValue + right.currentValue;
                break;

            case MyNumberOperators.SUB:
                newValue = this.currentValue - right.currentValue;
                if (newValue <= 0)     // x - (y - z) is same as x + (z - y) and zero does not make any sense
                {
                    return(null);
                }
                break;

            case MyNumberOperators.MULTIPLY:
                newValue = this.currentValue * right.currentValue;
                break;

            case MyNumberOperators.DIVIDE:
                if (right.currentValue == 0)
                {
                    return(null);
                }

                newValue = currentValue / right.currentValue;

                // not fully dividable
                if (newValue * right.currentValue != currentValue)
                {
                    return(null);
                }
                break;

            default:
                return(null);
            }

            MyNumberItem item = new MyNumberItem(this, right, numbersUsed + right.numbersUsed,
                                                 newValue, op, mask | right.mask, newStartIndex);

            return(item);
        }