public string Describe(
            int subThousands,
            ILanguageNumbersDescriptor numbersDescriptor
            )
        {
            var result = string.Empty;

            if (subThousands > 10000 &&
                subThousands < 20000)
            {
                return(string.Empty);
            }

            var thousands = (subThousands % 10000) - (subThousands % 1000);

            if (thousands >= 1000)
            {
                result = numbersDescriptor.Vocabulary[thousands];
            }

            if (thousands == 0 &&
                subThousands % 1000000 >= 10000)
            {
                result += numbersDescriptor.Vocabulary[-1000];
            }

            return(result);
        }
        public string Describe(
            int number,
            ILanguageNumbersDescriptor numbersDescriptor
            )
        {
            if (number >= 10000000 &&
                number < 20000000)
            {
                return(string.Empty);
            }

            var result = string.Empty;

            var millions = (number % 10000000) - (number % 1000000);

            if (millions >= 1000000)
            {
                result = numbersDescriptor.Vocabulary[millions];
            }

            if (millions == 0 &&
                number % 1000000000 >= 10000000)
            {
                return(numbersDescriptor.Vocabulary[-1000000]);
            }

            return(result);
        }
示例#3
0
        public void GetInputData_Test(
            string expectedLocaly,
            int expectedNumber,
            params string[] args
            )
        {
            // Arrange
            var expectedValue = new InputData()
            {
                LocalizationName = expectedLocaly,
                Number           = expectedNumber
            };

            var logger = new Mock <ILogger>();

            var languageNumbersDescriptors = new ILanguageNumbersDescriptor[]
            {
                new EnLoсalizationNumbers(),
                new RuLocalizationNumbers(),
                new UaLocalizationNumbers()
            };

            var inputDataParser = new InputDataParser(languageNumbersDescriptors, logger.Object);

            // Act
            var actualValue = inputDataParser.GetInputData(args);

            // Assert
            Assert.Equal(expectedValue.LocalizationName, actualValue.LocalizationName);
            Assert.Equal(expectedValue.Number, actualValue.Number);
        }
        public string Describe(
            int number,
            ILanguageNumbersDescriptor numbersDescriptor
            )
        {
            var hundreds = (number % 1000) - (number % 100);

            if (hundreds >= 100)
            {
                return(numbersDescriptor.Vocabulary[hundreds]);
            }

            return(string.Empty);
        }
示例#5
0
        public void GetInputData_NegativeNumbers_Tests(params string[] args)
        {
            // Arrange
            var logger = new Mock <ILogger>();

            var languageNumbersDescriptors = new ILanguageNumbersDescriptor[]
            {
                new EnLoсalizationNumbers(),
                new RuLocalizationNumbers(),
                new UaLocalizationNumbers()
            };

            var inputDataParser = new InputDataParser(languageNumbersDescriptors, logger.Object);

            // Assert
            Assert.Throws <ArgumentException>(() => inputDataParser.GetInputData(args));
        }
        public static string ConvertToString(
            int number,
            ILanguageNumbersDescriptor numbersDictionary
            )
        {
            var result = new StringBuilder();

            foreach (var describer in describers)
            {
                var part = describer.Describe(number, numbersDictionary);

                result.Append(part);

                if (part != string.Empty)
                {
                    result.Append(" ");
                }
            }

            return(result.ToString().Trim());
        }
示例#7
0
        public string Describe(
            int number,
            ILanguageNumbersDescriptor numbersDescriptor
            )
        {
            var subDozens = number % 100;

            if (subDozens >= 10 &&
                subDozens < 20)
            {
                return(numbersDescriptor.Vocabulary[subDozens]);
            }

            var dozens = (number % 100) - (number % 10);

            if (dozens >= 20)
            {
                return(numbersDescriptor.Vocabulary[dozens]);
            }

            return(string.Empty);
        }
示例#8
0
        public static void Main(string[] args)
        {
            var logPath = "application.log";

            var logger = new AggregatedLogger(
                new FileLogger(logPath),
                new ConsoleLogger()
                );

            try
            {
                if (!Validator.IsParametersValid(args))
                {
                    logger.LogInformation("Input data must be in format <LocalizationType> <number>");

                    return;
                }

                var languageNumbersDescriptors = new ILanguageNumbersDescriptor[]
                {
                    new EnLoсalizationNumbers(),
                    new RuLocalizationNumbers(),
                    new UaLocalizationNumbers()
                };

                var inputDataParser = new InputDataParser(languageNumbersDescriptors, logger);
                var inputData       = inputDataParser.GetInputData(args);

                var localization = languageNumbersDescriptors.First(l => l.Name == inputData.LocalizationName);

                var result = NumberConverter.ConvertToString(inputData.Number, localization);

                logger.LogInformation($"Result: {result}");
            }
            catch (Exception ex)
            {
                logger.LogInformation(ex.Message);
            }
        }
        public string Describe(
            int number,
            ILanguageNumbersDescriptor numbersDescriptor
            )
        {
            var units = number % 100;

            if (units > 10 &&
                units < 20)
            {
                return(string.Empty);
            }

            units = number % 10;

            if (units == 0 &&
                number > 0)
            {
                return(string.Empty);
            }

            return(numbersDescriptor.Vocabulary[units]);
        }
        public string Describe(
            int number,
            ILanguageNumbersDescriptor numbersDescriptor
            )
        {
            var result = string.Empty;

            var subDozenThousands = (number % 100000) - (number % 1000);

            if (subDozenThousands > 10000 &&
                subDozenThousands < 20000)
            {
                return(numbersDescriptor.Vocabulary[subDozenThousands]);
            }

            var dozenThousands = (number % 100000) - (number % 10000);

            if (dozenThousands >= 10000)
            {
                result = numbersDescriptor.Vocabulary[dozenThousands];
            }

            return(result);
        }