public MControler(IVisualizator visualizator, INumberParser converter, IInnerDataValidator innerDataParser, string [] arr)
 {
     _visualizator       = visualizator;
     _parser             = converter;
     _innerDataValidator = innerDataParser;
     _arr = arr;
 }
Exemple #2
0
        // Attempts to parse a number from the beginning of the given input string. Returns the character size of the matched string.
        static (double, int) GetNextNumber(string input, INumberParser numberParser)
        {
            // Attempt to parse anything before an operator or space as a number
            Regex regex = new Regex("^-?([^-+/*\\(\\)\\^\\s]+)");
            var   match = regex.Match(input);

            if (match.Success)
            {
                // Might be a number
                var matchLength = match.Groups[0].Length;
                var parsedNum   = ApiInformation.IsTypePresent(numberParser?.GetType().FullName)
                                        ? numberParser.ParseDouble(input.Substring(0, matchLength))
                                        : double.TryParse(input.Substring(0, matchLength), out var d)
                                                ? (double?)d
                                                : null;

                if (parsedNum != null)
                {
                    // Parsing was successful
                    return(parsedNum.Value, matchLength);
                }
            }

            return(double.NaN, 0);
        }
 public MarketSeriesPatternPreparer(string filename, INumberParser parser, int seriesLength = 5, int forecastLength = 3, int priceShift = -10000)
 {
     _parser = parser;
     _seriesLength = seriesLength;
     _forecastLength = forecastLength;
     _priceShift = priceShift;
     _patterns = Load(filename);
 }
 public UniversalDecoratedNumberParser(INumberParser numberParser)
 {
     _parsers = new List <BaseDecoratedNumberParser>
     {
         new BracketDecoratedNumberParser(numberParser),
         new UndecoratedAndDelimiterDecoratedNumberParser(numberParser),
     };
 }
 public Calculator(
     INumberNamer numberNamer,
     INumberParser numberParser,
     IOperatorParser operatorParser)
 {
     _numberNamer    = numberNamer;
     _numberParser   = numberParser;
     _operatorParser = operatorParser;
 }
Exemple #6
0
        public void ManuallyCreateSubstitutes()
        {
            // create both subs
            factory = Substitute.For <INumberParserFactory>();
            parser  = Substitute.For <INumberParser>();

            // now set up both separately
            factory.Create(',').Returns(parser);
            parser.Parse("an expression").Returns(new[] { 1, 2, 3 });

            Assert.AreEqual(
                factory.Create(',').Parse("an expression"),
                new[] { 1, 2, 3 });
        }
        public List <string> GenerateResultsBetween(int rangeStart, int rangeEnd)
        {
            var resultSet  = new List <string>();
            var inputRange = Enumerable.Range(rangeStart, rangeEnd).ToList();

            inputRange.ForEach(i =>
            {
                INumberParser numberParser
                    = Parsers
                      .First(p => i % p.Divisor == 0);

                resultSet.Add(numberParser.Parse(i));
            });

            return(resultSet);
        }
Exemple #8
0
        public static double?Compute(string expr, INumberParser numberParser)
        {
            // Tokenize the input string
            var tokens = GetTokens(expr, numberParser);

            if (tokens.Count > 0)
            {
                // Rearrange to postfix notation
                var postfixTokens = ConvertInfixToPostfix(tokens);
                if (postfixTokens.Count > 0)
                {
                    // Compute expression
                    return(ComputePostfixExpression(postfixTokens));
                }
            }

            return(null);
        }
Exemple #9
0
        // Attempts to parse a number from the beginning of the given input string. Returns the character size of the matched string.
        private static Tuple <double, int> GetNextNumber(string input, INumberParser numberParser)
        {
            // Attempt to parse anything before an operator or space as a number
            string regex = "^-?([^-+/*\\(\\)\\^\\s]+)";
            Match  match = Regex.Match(input, regex);

            if (match.Success)
            {
                // Might be a number
                var parsedNum = numberParser.ParseDouble(match.Value);
                if (parsedNum.HasValue)
                {
                    // Parsing was successful
                    return(new Tuple <double, int>(parsedNum.Value, match.Length));
                }
            }

            return(new Tuple <double, int>(double.NaN, 0));
        }
 public BmiCalculator(ICsvRowParser csvParser, INumberParser numberParser)
 {
     this.numberParser = numberParser;
     this.csvParser    = csvParser;
 }
Exemple #11
0
 public UndecoratedAndDelimiterDecoratedNumberParser(INumberParser numberParser) : base(numberParser)
 {
 }
Exemple #12
0
        // Returns list of MathTokens from expression input string. If there are any parsing errors, it returns an empty vector.
        private static List <MathToken> GetTokens(string input, INumberParser numberParser)
        {
            var tokens = new List <MathToken>();

            var expectNumber = true;

            while (input.Length > 0)
            {
                // Skip spaces
                var nextChar = input[0];
                if (nextChar != ' ')
                {
                    if (expectNumber)
                    {
                        if (nextChar == '(')
                        {
                            // Open parens are also acceptable, but don't change the next expected token type.
                            tokens.Add(new MathToken(MathTokenType.Parenthesis, nextChar));
                        }
                        else
                        {
                            var(value, charLength) = GetNextNumber(input, numberParser);

                            if (charLength > 0)
                            {
                                tokens.Add(new MathToken(MathTokenType.Numeric, value));

                                // UNO TODO: Was pointer manipulation, may be better off with Span<char>.
                                input = input.Substring(charLength - 1);              // advance the end of the token

                                expectNumber = false;                                 // next token should be an operator
                            }
                            else
                            {
                                // Error case -- next token is not a number
                                return(new List <MathToken>());
                            }
                        }
                    }
                    else
                    {
                        if (c_numberBoxOperators.IndexOf(nextChar) != -1)
                        {
                            tokens.Add(new MathToken(MathTokenType.Operator, nextChar));
                            expectNumber = true;                             // next token should be a number
                        }
                        else if (nextChar == ')')
                        {
                            // Closed parens are also acceptable, but don't change the next expected token type.
                            tokens.Add(new MathToken(MathTokenType.Parenthesis, nextChar));
                        }
                        else
                        {
                            // Error case -- could not evaluate part of the expression
                            return(new List <MathToken>());
                        }
                    }
                }

                // UNO TODO: Was pointer manipulation, may be better off with Span<char>.
                input = input.Substring(1);
            }

            return(tokens);
        }
Exemple #13
0
 public TestPatternPreparer(string filename, INumberParser parser)
 {
     _parser = parser;
     _patterns = Load(filename);
 }
Exemple #14
0
 public PriceParser(INumberParser numberParser)
 {
     _numberParser = numberParser;
 }
 public StringCalculator2(ITokenizer tokenizer, INegativeChecker checker, INumberParser parser)
 {
     _tokenizer = tokenizer;
     _checker = checker;
     _parser = parser;
 }
Exemple #16
0
 public BracketDecoratedNumberParser(INumberParser numberParser) : base(numberParser)
 {
 }
 public ReadWordInterrupt(INumberParser numberParser)
 {
     this.numberParser = numberParser;
 }
 public StringCalculator(INumberParser numberParser, IAdder adder)
 {
     _numberParser = numberParser;
     _adder = adder;
 }
Exemple #19
0
        private static List <MathToken> GetTokens(string input, INumberParser numberParser)
        {
            var tokens = new List <MathToken>();

            bool expectNumber = true;
            int  i            = 0;

            while (i < input.Length)
            {
                // Skip spaces
                var nextChar = input[i];
                if (nextChar != ' ')
                {
                    if (expectNumber)
                    {
                        if (nextChar == '(')
                        {
                            // Open parens are also acceptable, but don't change the next expected token type.
                            tokens.Add(new MathToken(MathTokenType.Parenthesis, nextChar));
                        }
                        else
                        {
                            var result     = GetNextNumber(input.Substring(i), numberParser);
                            var value      = result.Item1;
                            var charLength = result.Item2;

                            if (charLength > 0)
                            {
                                tokens.Add(new MathToken(MathTokenType.Numeric, value));
                                i           += charLength - 1; // advance the end of the token
                                expectNumber = false;          // next token should be an operator
                            }
                            else
                            {
                                // Error case -- next token is not a number
                                return(new List <MathToken>());
                            }
                        }
                    }
                    else
                    {
                        if (c_numberBoxOperators.IndexOf(nextChar) > -1)
                        {
                            tokens.Add(new MathToken(MathTokenType.Operator, nextChar));
                            expectNumber = true; // next token should be a number
                        }
                        else if (nextChar == ')')
                        {
                            // Closed parens are also acceptable, but don't change the next expected token type.
                            tokens.Add(new MathToken(MathTokenType.Parenthesis, nextChar));
                        }
                        else
                        {
                            // Error case -- could not evaluate part of the expression
                            return(new List <MathToken>());
                        }
                    }
                }

                i++;
            }

            return(tokens);
        }
Exemple #20
0
 public BaseDecoratedNumberParser(INumberParser numberParser)
 {
     _numberParser = numberParser;
 }