Exemplo n.º 1
0
        public void Calculate_IncorrectExpressionTest()
        {
            //Arrange
            var             stringTokens = "2 + _2".Split();
            TokenCollection tokens       = new TokenCollection();

            //Act
            tokens.AddMany(stringTokens);
            //Assert
            Assert.ThrowsException <NotImplementedException>(() => tokens.CreateRPN());
        }
Exemplo n.º 2
0
        public void Calculate_WithoutRPN_ReturnExceptionTest()
        {
            //Arrange
            var                  stringTokens = "2 + 2".Split();
            TokenCollection      tokens       = new TokenCollection();
            List <ServerFormula> formulas     = new List <ServerFormula>();

            //Act
            tokens.AddMany(stringTokens);
            //Assert
            Assert.ThrowsException <InvalidOperationException>(() => tokens.Calculate(formulas));
        }
Exemplo n.º 3
0
        private static TokenCollection GetTokens(string exp)
        {
            var fplist       = exp.Replace("(", " ( ").Replace(")", " ) ");
            var stringTokens = Operator.GetAll
                               .Aggregate(fplist, (list, op) => list.Replace(op.Name, $" {op.Name} "))
                               .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            var tokens = new TokenCollection();

            tokens.AddMany(stringTokens);

            return(tokens);
        }
Exemplo n.º 4
0
        public void Calculate_DivideByZeroTest()
        {
            //Arrange
            var                  stringTokens = "2 / 0".Split();
            TokenCollection      tokens       = new TokenCollection();
            List <ServerFormula> formulas     = new List <ServerFormula>();

            //Act
            tokens.AddMany(stringTokens);
            tokens.CreateRPN();
            //Assert
            Assert.ThrowsException <DivideByZeroException>(() => tokens.Calculate(formulas));
        }
Exemplo n.º 5
0
        public void AddMany_ManyIsNotValidTest()
        {
            //Arrange
            var             stringTokens      = "( 2 + 3)/ 10".Split();
            TokenCollection tokens            = new TokenCollection();
            const int       summaryTokenCount = 5;
            const int       brokenTokensCount = 1;

            //Act
            tokens.AddMany(stringTokens);
            //Assert
            Assert.AreEqual(summaryTokenCount, tokens.Count);
            Assert.AreEqual(brokenTokensCount, tokens.Where(token => token is UnknownToken).Count());
        }
Exemplo n.º 6
0
        public void CalcuateTest(string expression, double expectedResult)
        {
            //Arrange
            var                  stringTokens = expression.Split();
            TokenCollection      tokens       = new TokenCollection();
            List <ServerFormula> formulas     = new List <ServerFormula>();

            //Act
            tokens.AddMany(stringTokens);
            tokens.CreateRPN();
            var result = tokens.Calculate(formulas);

            //Assert
            Assert.AreEqual(expectedResult, result, 0.01);
        }
Exemplo n.º 7
0
        public void Calcuate_WithIncorrectListOfFormulaTest()
        {
            //Arrange
            var                  stringTokens = "2 + a * c".Split();
            TokenCollection      tokens       = new TokenCollection();
            List <ServerFormula> formulas     = new List <ServerFormula>()
            {
                new ServerFormula {
                    Name = "a", Value = 13
                }
            };

            //Act
            tokens.AddMany(stringTokens);
            tokens.CreateRPN();
            //Assert
            Assert.ThrowsException <ArgumentException>(() => tokens.Calculate(formulas));
        }
Exemplo n.º 8
0
        public TokenCollection ConstructTokens(string exp)
        {
            if (string.IsNullOrEmpty(exp))
            {
                logger.Error("Значение формулы было неопределенным");
                return(null);
            }

            var fplist       = exp.Replace("(", " ( ").Replace(")", " ) ").Replace(".", ",");
            var stringTokens = Operator.GetAll
                               .Aggregate(fplist, (list, op) => list.Replace(op.Name, $" {op.Name} "))
                               .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);

            Tokens = new TokenCollection();
            Tokens.AddMany(stringTokens);

            return(Tokens);
        }
Exemplo n.º 9
0
        public void Calcuate_WithCorrectListOfFormulaTest()
        {
            //Arrange
            var                  stringTokens = "2 + a * 10".Split();
            TokenCollection      tokens       = new TokenCollection();
            List <ServerFormula> formulas     = new List <ServerFormula>()
            {
                new ServerFormula {
                    Name = "a", Value = 13
                }
            };

            //Act
            tokens.AddMany(stringTokens);
            tokens.CreateRPN();
            var result = tokens.Calculate(formulas);

            //Assert
            Assert.AreEqual(132, result, 0.01);
        }