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); }
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); }
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)}"); }
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)); } }
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); }
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(); } }
private void MergeFromCacheResult(NumberProcessingResult numberProcessingResult, NumberProcessingResult cacheResult) { numberProcessingResult.AddDivisorRange(cacheResult.Divisors); numberProcessingResult.AddPrimeRange(cacheResult.PrimeNumbers); numberProcessingResult.End = DateTime.Now; }
public static NumberProcessingResponseModel ToModel(this NumberProcessingResult entity) { return(entity == null ? null : Mapper.Map <NumberProcessingResponseModel>(entity)); }