Exemple #1
0
        public void TestPrimeNumbers_ResultAreEqual()
        {
            const long number = 10;

            #region Expected object
            var expectedPrimeNumbers = new List <long> {
                2, 5
            };
            #endregion

            Guid numberProcessingId = _numberProcessingService.RequestProcess(number);

            bool      isReady;
            const int defaultWaitTime = 500;

            do
            {
                Thread.Sleep(defaultWaitTime);
                isReady = _numberProcessingService.CheckIsReady(numberProcessingId);
            } while (!isReady);

            NumberProcessingResult result = _numberProcessingService.GetResult(numberProcessingId);

            result.PrimeNumbers.Sort();
            expectedPrimeNumbers.Sort();

            CollectionAssert.AreEqual(expectedPrimeNumbers, result.PrimeNumbers);
        }
Exemple #2
0
        public void TestDivisors_ResultAreEqual()
        {
            const long number = 100000;

            #region Expected object
            var expectedDivisors = new List <long> {
                1, 2, 4, 5, 8, 10, 16, 20, 25, 32, 40, 50, 80, 100,
                125, 160, 200, 250, 400, 500, 625, 800, 1000, 1250,
                2000, 2500, 3125, 4000, 5000, 6250, 10000, 12500, 20000,
                25000, 50000, 100000
            };
            #endregion

            Guid numberProcessingId = _numberProcessingService.RequestProcess(number);

            bool      isReady;
            const int defaultWaitTime = 500;

            do
            {
                Thread.Sleep(defaultWaitTime);
                isReady = _numberProcessingService.CheckIsReady(numberProcessingId);
            } while (!isReady);

            NumberProcessingResult result = _numberProcessingService.GetResult(numberProcessingId);

            result.Divisors.Sort();
            expectedDivisors.Sort();

            CollectionAssert.AreEqual(expectedDivisors, result.Divisors);
        }
Exemple #3
0
 private static void ShowResult(NumberProcessingResult result)
 {
     ConsoleHelper.WriteResultHeader();
     Console.WriteLine($"Número: {result.Number}");
     Console.WriteLine($"Início do processamento: {result.Start}");
     Console.WriteLine($"Fim do processamento: {result.End}");
     Console.WriteLine($"Divisores: {string.Join(", ", result.Divisors)}");
     Console.WriteLine($"Divisores primos: {string.Join(", ", result.PrimeNumbers)}");
 }
Exemple #4
0
        public async Task <IActionResult> GetAsync(Guid id)
        {
            try
            {
                NumberProcessingResult result =
                    await Task.Run(() => _numberProcessingService.GetResult(id));


                return(new ObjectResult(result.ToModel()));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message));
            }
        }
Exemple #5
0
        private void Process(Guid numberProcessingId, long number)
        {
            var startOfProcessing = DateTime.Now;

            var numberProcessingResult = new NumberProcessingResult(numberProcessingId, number, startOfProcessing);

            var cacheResult = GetFromCache(number);

            if (cacheResult != null)
            {
                MergeFromCacheResult(numberProcessingResult, cacheResult);
                SimulatedPersistence.Instance.NumberProcessingResults.Add(numberProcessingResult);
                SetAsReady(numberProcessingId);
                return;
            }

            numberProcessingResult.AddDivisor(number);

            if (IsPrime(number))
            {
                numberProcessingResult.AddPrime(number);
            }

            long secondPossibleDivisor = number / 2;

            for (long i = secondPossibleDivisor; i > 0; i--)
            {
                if (IsDivisor(number, i))
                {
                    numberProcessingResult.AddDivisor(i);

                    if (IsPrime(i))
                    {
                        numberProcessingResult.AddPrime(i);
                    }
                }
            }

            numberProcessingResult.End = DateTime.Now;

            SimulatedPersistence.Instance.NumberProcessingResults.Add(numberProcessingResult);

            SetAsReady(numberProcessingId);
        }
Exemple #6
0
        static void Main(string[] args)
        {
            try
            {
                Initialize();

                ConsoleHelper.WriteHeader();
                long number = ReadNumber();

                ConsoleHelper.WriteProcessingHeader();
                Guid numberProcessingId = RequestNumberProcessing(number);
                TrackResult(numberProcessingId);
                NumberProcessingResult result = GetResult(numberProcessingId);
                ShowResult(result);
            }
            catch (Exception ex)
            {
                ConsoleHelper.WriteLineWithTime($"Houve um erro no processamento. Detalhes: {ex.Message}");
            }
            finally
            {
                Console.ReadKey();
            }
        }
Exemple #7
0
 private void MergeFromCacheResult(NumberProcessingResult numberProcessingResult, NumberProcessingResult cacheResult)
 {
     numberProcessingResult.AddDivisorRange(cacheResult.Divisors);
     numberProcessingResult.AddPrimeRange(cacheResult.PrimeNumbers);
     numberProcessingResult.End = DateTime.Now;
 }
Exemple #8
0
 public static NumberProcessingResponseModel ToModel(this NumberProcessingResult entity)
 {
     return(entity == null ? null : Mapper.Map <NumberProcessingResponseModel>(entity));
 }