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); }
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)); }
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; }
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 }
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 }
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 }
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(); } }
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)); }
public void MultiplyStrategy_Compute_HandlesNullInput() { MultiplyStrategy strategy = new MultiplyStrategy(); Assert.ThrowsAsync <CalculatorException>(() => strategy.Compute(MockInputs.NullList)); }