コード例 #1
0
        public void GetLastActSymIndex_WhenExpressionIsNull_ReturnMinusOne(string expression)
        {
            //Arrange
            var calc = new CalculateExpression();

            //Action
            var reternedIndex = calc.GetStartIndexOfLastNumber(expression);

            //Assert
            Assert.AreEqual(-1, reternedIndex);
        }
コード例 #2
0
        public void GetLastActSymIndex_WhenActionSymbolExist_ReturnRightIndex(string expression, int index)
        {
            //Arrange
            var calc = new CalculateExpression();

            //Action
            var reternedIndex = calc.GetStartIndexOfLastNumber(expression);

            //Assert
            Assert.AreEqual(index, reternedIndex);
        }
コード例 #3
0
        [DataRow("58+578-2*8", 8, "2")] // When left number from index is last

        public void GetLeftNumber_WhenLeftNumberIsFirstMiddleLast_ReturnLeftNumber(string expression, int index, string leftNumber)
        {
            //Arrange
            var calc = new CalculateExpression();

            //Action
            var returnedLeftNumber = calc.GetLeftNumber(expression, index);

            //Assert
            Assert.AreEqual(leftNumber, returnedLeftNumber);
        }
コード例 #4
0
        public void GetResult_WhenExpressionIsNull_ReturnZero(string expression)
        {
            //Arrange
            var calc = new CalculateExpression();

            //Action
            var calculatedResult = calc.GetResult(expression);

            //Assert
            Assert.AreEqual(calculatedResult, 0);
        }
コード例 #5
0
        public void GetResult_CompareCalculatedResult_ReturnEqualResult(string expression, float result)
        {
            //Arrange
            var calc = new CalculateExpression();

            //Action
            var calculatedResult = calc.GetResult(expression);

            //Assert
            Assert.AreEqual(calculatedResult, result);
        }
コード例 #6
0
        public void GetRightNumber_WhenExpIsNull_ReturnNull(string expression)
        {
            //Arrange
            var calc = new CalculateExpression();

            //Action
            var returnedRightNumber = calc.GetRightNumber(expression, 5);

            //Assert
            Assert.AreEqual(null, returnedRightNumber);
        }
コード例 #7
0
 static void Main()
 {
     while (true)
     {
         Console.WriteLine("Введите математическое  выражение для вычисления. Для выхода напишите exit");
         string s = Console.ReadLine();
         if (s == "exit")
         {
             return;
         }
         double result = CalculateExpression.Calculate(s);
         Console.WriteLine(double.IsNaN(result) ? "Неправильный формат ввода" : $"{result:0.000}");
     }
 }
コード例 #8
0
 private void btnEquals_Click(object sender, EventArgs e)
 {
     if (String.IsNullOrEmpty(_expression.ToString()))
     {
         return;
     }
     try
     {
         textBoxDisplay.Text = CalculateExpression.Calculate(_expression.ToString());
     }
     catch (System.Data.SyntaxErrorException)
     {
         textBoxDisplay.Text = "Syntax error";
     }
 }
        public void TestToFail_TestToFail()
        {
            //Arrange
            CalculateExpression calculateExpression = new CalculateExpression();
            BinaryExpression    ExpressionTree      = null;
            MyExpressionVisitor myExpressionVisitor = new MyExpressionVisitor();
            string TestToPassExpression             = "1 + 1";

            //Act
            ExpressionTree = calculateExpression.CalculateValidExpression(TestToPassExpression, ExpressionTree, myExpressionVisitor);
            var results = Expression.Lambda(ExpressionTree).Compile().DynamicInvoke();

            //Assert
            Assert.Fail();
        }
コード例 #10
0
        public void TestBoundaries()
        {
            //Arrange
            CalculateExpression calculateExpression = new CalculateExpression();
            BinaryExpression    ExpressionTree      = null;
            MyExpressionVisitor myExpressionVisitor = new MyExpressionVisitor();
            string TestToPassExpression             = "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 1 +";

            //Act
            ExpressionTree = calculateExpression.CalculateValidExpression(TestToPassExpression, ExpressionTree, myExpressionVisitor);
            var results = Expression.Lambda(ExpressionTree).Compile().DynamicInvoke();

            //Assert
            Assert.AreEqual(1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00, results);
        }
コード例 #11
0
        public void TestToFail_DivideByZero()
        {
            //Arrange
            CalculateExpression calculateExpression = new CalculateExpression();
            MyExpressionVisitor myExpressionVisitor = new MyExpressionVisitor();
            Validation          validation          = new Validation();

            string TestToFailExpression = "1 1 + 0 /";
            bool   IsValidExpression    = false;

            //Act
            bool results = validation.IsValid(TestToFailExpression, IsValidExpression);

            //Assert
            Assert.AreEqual(false, results);
        }
コード例 #12
0
 public void TestAddingTwoPlusTwo() =>
 Assert.AreEqual("4", CalculateExpression.Calculate("2+2"));
コード例 #13
0
 public void TestConvertingToRpnMoreComplexFormula() =>
 Assert.AreEqual("2 2 2 * + 2 2 / - 4 * 6 + 2 -", CalculateExpression.ConvertToRPN("(2+2*2-2/2)*4+6-2"));
コード例 #14
0
 public void TestConvertingToRpnWithParanthesis() =>
 Assert.AreEqual("2 2 + 2 *", CalculateExpression.ConvertToRPN("(2+2)*2"));
コード例 #15
0
 public void TestWrongEquation() =>
 CalculateExpression.Calculate("(2+4-5");
コード例 #16
0
ファイル: Calculator.cs プロジェクト: BulatAZ/Calculator
        public float GetResult(string expression)
        {
            var calc = new CalculateExpression();

            return(calc.GetResult(expression));
        }
コード例 #17
0
 public void TestOperationPriorityTwoPlusTwoTimesTwoWithParanthesis() =>
 Assert.AreEqual("8", CalculateExpression.Calculate("(2+2)*2"));
コード例 #18
0
ファイル: Calculate24.cs プロジェクト: john-guo/hodgepodge
            public static ArithmeticExpression Calculate(CalculateExpression left, OpFlag op, CalculateExpression right)
            {
                var e = new ArithmeticExpression();
                e.op = op;
                e.Left = left;
                e.Right = right;

                left.Parent = e;
                left.childPos = childLeft;
                right.Parent = e;
                right.childPos = childRight;

                return e;
            }
コード例 #19
0
 public void TestDivisionNineByThree() =>
 Assert.AreEqual("3", CalculateExpression.Calculate("9/3"));
コード例 #20
0
 public void TestMultiplicationNineTimesFive() =>
 Assert.AreEqual("45", CalculateExpression.Calculate("9*5"));
コード例 #21
0
 public void TestSubstractionFourMinusTwo() =>
 Assert.AreEqual("2", CalculateExpression.Calculate("4-2"));
コード例 #22
0
 public async Task <double> Execute(CalculateExpression command)
 {
     return((double)await _handler.Execute(command));
 }
コード例 #23
0
 public void TestCalculationWithDifferentOperations() =>
 Assert.AreEqual("693", CalculateExpression.Calculate("33*22-33"));
コード例 #24
0
 public void TestComplexEquationWithAllOperations() =>
 Assert.AreEqual("24", CalculateExpression.Calculate("(2+2*2-2/2)*4+6-2"));
コード例 #25
0
 public void TestOperationPriorityTwoPlusTwoTimesTwo() =>
 Assert.AreEqual("6", CalculateExpression.Calculate("2+2*2"));
コード例 #26
0
        public string PurchaseSave(Purchase purchase)
        {
            decimal PurchaseSum = 0; //сумма покупки
            int     CoinsSum    = 0; //сумма внесенных монет


            //обновляем напитки
            List <DrinkLine> drinkLines = purchase.DrinkLines;

            for (int i = 0; i < drinkLines.Count; i++)
            {
                Drink drink = db.Drinks.FirstOrDefault(x => x.Id == drinkLines[i].drink.Id);
                if (drink != null)
                {
                    drink.Quantity = drink.Quantity - drinkLines[i].purchaseQuantity;
                    PurchaseSum   += drink.Price;
                    db.Update(drink);
                    db.SaveChanges();
                }
            }

            //обновляем количество монет
            List <CoinLine> coinLines = purchase.CoinLines;

            for (int i = 0; i < coinLines.Count; i++)
            {
                Coin coin = db.Coins.FirstOrDefault(x => x.Name == coinLines[i].coin.Name);
                if (coin != null)
                {
                    coin.Quantity = coin.Quantity + coinLines[i].purchaseQuantity;
                    CoinsSum     += coinLines[i].purchaseQuantity * coin.Name;
                    db.Update(coin);
                    db.SaveChanges();
                }
            }

            string  OutCoinMessage = "";
            decimal outCoinSum     = CoinsSum - PurchaseSum; //сумма сдачи

            if (outCoinSum > 0)
            {
                List <CoinLine> OutCoinList = CalculateExpression.OutCoin(outCoinSum, db.Coins.ToList());

                //обновляем количество монет и формируем строку сдачи
                if (!(OutCoinList == null))
                {
                    coinLines = OutCoinList;

                    for (int i = 0; i < coinLines.Count; i++)
                    {
                        Coin coin = db.Coins.FirstOrDefault(x => x.Name == coinLines[i].coin.Name);
                        if (coin != null)
                        {
                            coin.Quantity  = coin.Quantity - coinLines[i].purchaseQuantity;
                            OutCoinMessage = OutCoinMessage + " Монета: " + coinLines[i].coin.Name + ": количество: " + coinLines[i].purchaseQuantity;
                            db.Update(coin);
                            db.SaveChanges();
                        }
                    }
                }
                else
                {
                    OutCoinMessage = "в автомате не достаточно монет для сдачи.";
                }
            }
            return(OutCoinMessage);
        }