コード例 #1
0
        public IStrategy CreateStrategy(char @operator)
        {
            IStrategy strategy = null;

            switch (@operator)
            {
            case '+':
                strategy = new AdditionStrategy();
                break;

            case '-':
                strategy = new SubtractionStrategy();
                break;

            case '*':
                strategy = new MultiplyStrategy();
                break;

            case '/':
                strategy = new DevideStrategy();
                break;
            }

            return(strategy);
        }
コード例 #2
0
        public void MultiplyStrategy_Compute_HandlesDoubleMaxValues()
        {
            MultiplyStrategy strategy = new MultiplyStrategy();
            List <double>    inputs   = new List <double> {
                -double.MaxValue, double.MaxValue
            };

            Assert.ThrowsAsync <CalculatorException>(() => strategy.Compute(inputs));
        }
コード例 #3
0
 public PrimitiveCalculator(AdditionStrategy additionStrategy, SubtractionStrategy subtractionStrategy,
                            MultiplyStrategy multiplyStrategy, DivideStrategy divideStrategy)
 {
     this.additionStrategy    = additionStrategy;
     this.subtractionStrategy = subtractionStrategy;
     this.multiplyStrategy    = multiplyStrategy;
     this.divideStrategy      = divideStrategy;
     this.additionValue       = additionStrategy;
 }
コード例 #4
0
        public async Task MultiplyStrategy_Compute_HandlesZero()
        {
            MultiplyStrategy strategy = new MultiplyStrategy();
            List <double>    inputs   = new List <double> {
                -1, 2, -4, 1, 7, 0, 8, 12, 5730203
            };
            var result = await strategy.Compute(inputs);

            Assert.AreEqual(0, result, 0.00000001); // The tolerance delta used here is due to the fact that double is used instead of decimal for speed
        }
コード例 #5
0
        public async Task MultiplyStrategy_Compute_HandlesAllPositiveValues()
        {
            MultiplyStrategy strategy = new MultiplyStrategy();
            List <double>    inputs   = new List <double> {
                1, 2, 3, 4, 5
            };
            var result = await strategy.Compute(inputs);

            Assert.AreEqual(120, result, 0.00000001); // The tolerance delta used here is due to the fact that double is used instead of decimal for speed
        }
コード例 #6
0
        public async Task MultiplyStrategy_Compute_ReturnsCorrectResult()
        {
            MultiplyStrategy strategy = new MultiplyStrategy();
            List <double>    inputs   = new List <double> {
                3, 4.2, 6
            };
            var result = await strategy.Compute(inputs);

            Assert.AreEqual(75.6, result, 0.00000001); // The tolerance delta used here is due to the fact that double is used instead of decimal for speed
        }
コード例 #7
0
    static void Main()
    {
        PrimitiveCalculator calculator = new PrimitiveCalculator();

        string input = Console.ReadLine();

        while (input != "End")
        {
            string[] commandTokens = input.Split(' ', StringSplitOptions.RemoveEmptyEntries);

            if (commandTokens[0] == "mode")
            {
                ICalculatable strategy = null;
                switch (commandTokens[1])
                {
                case "+":
                    strategy = new AdditionStrategy();
                    break;

                case "-":
                    strategy = new SubtractionStrategy();
                    break;

                case "*":
                    strategy = new MultiplyStrategy();
                    break;

                case "/":
                    strategy = new DivisionStrategy();
                    break;
                }

                calculator.ChangeStrategy(strategy);
            }
            else
            {
                int leftOperand  = int.Parse(commandTokens[0]);
                int rightOperand = int.Parse(commandTokens[1]);

                int result = calculator.PerformCalculation(leftOperand, rightOperand);

                Console.WriteLine(result);
            }

            input = Console.ReadLine();
        }
    }
コード例 #8
0
        public IDataFrameView Multiply(int nb, MultiplyStrategy multType = MultiplyStrategy.Block)
        {
            int[] rows = new int[Length * nb];
            switch (multType)
            {
            case MultiplyStrategy.Block:
                for (int i = 0; i < rows.Length; ++i)
                {
                    rows[i] = i % Length;
                }
                break;

            case MultiplyStrategy.Row:
                for (int i = 0; i < rows.Length; ++i)
                {
                    rows[i] = i / nb;
                }
                break;

            default:
                throw new DataValueError($"Unkown multiplication strategy '{multType}'.");
            }
            return(new DataFrameView(this, rows, null));
        }
コード例 #9
0
        public void MultiplyStrategy_Compute_HandlesNullInput()
        {
            MultiplyStrategy strategy = new MultiplyStrategy();

            Assert.ThrowsAsync <CalculatorException>(() => strategy.Compute(MockInputs.NullList));
        }