public static double GetResult(char op, double number1, double number2) { OperatorReguler opReguler = null; switch (op) { case ADDITION: AddOperator add = new AddOperator(number1, number2); opReguler = add; break; case SUBTRACK: SubOperator sub = new SubOperator(number2, number1); opReguler = sub; break; case MULTIPLY: MulOperator mul = new MulOperator(number1, number2); opReguler = mul; break; case DIVISION: DivOperator div = new DivOperator(number2, number1); opReguler = div; break; } return(opReguler.GetResult()); }
public void DivOperator_PrecedenceSetCorrectly() { // Arrange var expected = 2; var sut = new DivOperator(); // Act var actual = sut.Precedence; // Assert Assert.AreEqual(expected, actual); }
public void TakesPrecedenceBoostIntoAccount() { // Arrange var precedenceBoost = 7; var expected = 9; var sut = new DivOperator(precedenceBoost); // Act var actual = sut.Precedence; // Assert Assert.AreEqual(expected, actual); }
public void DivOperator_ReturnsQuotient() { // Arrange var sut = new DivOperator(); var operandLeft = new Operand(20); var operandRight = new Operand(10); var expected = 2; // Act var actual = sut.Compute(operandLeft, operandRight); // Assert Assert.AreEqual(expected, actual); }
public IToken ParseTokens(string[] ops) { var stack = new Stack <ApOperator>(); IToken token = null; for (int i = 0; i < ops.Length; i++) { var op = ops[i]; switch (op) { case "ap": token = new ApOperator(); break; case "inc": token = IncOperator.Acquire(); break; case "dec": token = DecOperator.Acquire(); break; case "neg": token = NegOperator.Acquire(); break; case "add": token = AddOperator.Acquire(); break; case "mul": token = MulOperator.Acquire(); break; //case "l": // token = new LOperator(); // break; case "div": token = DivOperator.Acquire(); break; //case "pwr2": // return (new Pwr2Operator(), index); case "t": token = KComb.Acquire(); break; //case "f": // return (new FComb(), index); case "s": token = SComb.Acquire(); break; case "c": token = CComb.Acquire(); break; case "b": token = BComb.Acquire(); break; case "i": token = IComb.Acquire(); break; case "cons": case "vec": token = ConsOperator.Acquire(); break; case "car": token = CarOperator.Acquire(); break; case "cdr": token = CdrOperator.Acquire(); break; case "nil": token = NilOperator.Acquire(); break; case "isnil": token = IsNilOperator.Acquire(); break; case "eq": token = EqOperator.Acquire(); break; case "if0": token = new If0Operator(); break; case "lt": token = LtOperator.Acquire(); break; //case "mod": // token = new ModOperator(); // break; //case "dem": // token = new DemodOperator(); // break; case "interact": token = new InteractOperator(); break; default: if (decimal.TryParse(op, out var constant)) // int constant { token = ConstantOperator.Acquire(decimal.Parse(op)); } else if (op.StartsWith("x")) { token = VarOperator.Acquire(op); } else if (op.StartsWith(":")) // variable reference { token = LateBoundToken.Acquire(op); } else { throw new InvalidOperationException(); } break; } if (stack.Count == 0) { if (!(token is ApOperator)) { if (i != ops.Length - 1) { throw new InvalidOperationException(); } return(token); } stack.Push((ApOperator)token); } else { var top = stack.Peek(); if (top.f == null) { top.f = token; if (token is ApOperator ap) { stack.Push(ap); } } else if (top.x == null) { top.x = token; if (token is ApOperator ap) { stack.Push(ap); } else { while (stack.Count > 0 && stack.Peek().x != null) { token = stack.Pop(); } } } else { throw new InvalidOperationException(); } } } if (stack.Count == 1) { return(stack.Pop()); } return(token); }
public TypeG Visit(DivOperator node) { VisitBinaryOperator("DIV", node, TypeG.INTEGER); return(TypeG.INTEGER); }