public void DoDemonstration()
        {
            // Two instances of the calculator are created.  One is named "Odd"
            // (it calculates the 1st, 3rd, 5th... values in the sequence) the
            // other is named "Even".  They message each other back and forth
            // with the latest two values and successively build the sequence.
            var limit = 1000;

            // Two channels for communication.  Naming convention is inbound.
            var oddChannel  = new Channel <IntPair>();
            var evenChannel = new Channel <IntPair>();

            using (ThreadFiber oddFiber = new ThreadFiber(), evenFiber = new ThreadFiber())
            {
                oddFiber.Start();

                var oddCalculator = new FibonacciCalculator(oddFiber, "Odd", oddChannel, evenChannel, limit);

                evenFiber.Start();

                new FibonacciCalculator(evenFiber, "Even", evenChannel, oddChannel, limit);

                oddCalculator.Begin(new IntPair(0, 1));

                oddFiber.Join();
                evenFiber.Join();
            }
        }
Exemple #2
0
        public ActionResult <BigInteger> Get()
        {
            using (var reader = new StreamReader(Request.Body))
            {
                var body = reader.ReadToEnd();
                switch (Request.ContentType)
                {
                case "text/plain; charset=utf-8":
                case "text/plain":
                    if (long.TryParse(body, out var index))
                    {
                        try
                        {
                            Response.Headers.Add(FibonacciRequestedTag, index.ToString());
                            return(FibonacciCalculator.Calculate(index));
                        }
                        catch (Exception e)
                        {
                            return(BadRequest(e.Message));
                        }
                    }

                    return(BadRequest($"Invalid Index Value: ''{body}''"));

                default:
                    return(BadRequest("Only Contenttype text/plain accepted"));
                }
            }
        }
Exemple #3
0
        public void GetFibonacciIterator_GetDescIterator()
        {
            var calculator = new FibonacciCalculator();
            var iterator   = calculator.GetFibonacciIterator(10, -5);

            Assert.IsInstanceOf(typeof(FibonacciDescIterator), iterator);
        }
Exemple #4
0
        public void CanFindPositionOfValueEightWithDefaultConstructor()
        {
            var x = new FibonacciCalculator();
            var y = x.CalculatePositionOfValue(8);

            Assert.AreEqual(5, y);
        }
Exemple #5
0
        public void CanFindPositionOfValueFortyWithConstructorParam()
        {
            var x = new FibonacciCalculator(5);
            var y = x.CalculatePositionOfValue(40);

            Assert.AreEqual(5, y);
        }
Exemple #6
0
        public void ValueOfPositionFiveIsEightWithDefaultConstructor()
        {
            var x = new FibonacciCalculator();
            var y = x.CalculateValueOfPosition(5);

            Assert.AreEqual(8, y);
        }
        public void DoDemonstration()
        {
            // Two instances of the calculator are created.  One is named "Odd"
            // (it calculates the 1st, 3rd, 5th... values in the sequence) the
            // other is named "Even".  They message each other back and forth
            // with the latest two values and successively build the sequence.
            var limit = 1000;

            // Two channels for communication.  Naming convention is inbound.
            var oddChannel = new Channel<IntPair>();
            var evenChannel = new Channel<IntPair>();

            using (ThreadFiber oddFiber = new ThreadFiber(), evenFiber = new ThreadFiber())
            {
                oddFiber.Start();

                var oddCalculator = new FibonacciCalculator(oddFiber, "Odd", oddChannel, evenChannel, limit);

                evenFiber.Start();

                new FibonacciCalculator(evenFiber, "Even", evenChannel, oddChannel, limit);

                oddCalculator.Begin(new IntPair(0, 1));

                oddFiber.Join();
                evenFiber.Join();
            }
        }
Exemple #8
0
        static void Main(string[] args)
        {
            var fibonacciNumbers = FileUtility.ReadNumbersFromFile(INPUT_FILE);

            var processingType = FibonacciCalculator.GetProcessingType();

            Console.Write("Enter the number of Actors: ");
            var numberOfActors = Int32.Parse(Console.ReadLine());

            Console.WriteLine($"\nRuning with {numberOfActors} Actors.");
            ProcessFibonacciWithActors(fibonacciNumbers, numberOfActors, processingType);

            //Task.Run(() =>
            //{
            //    for (int i = 1; i <= 32; i *= 2)
            //    {
            //        Console.WriteLine($"\nRuning with {i} Actors.");
            //        ProcessFibonacciWithActors(fibonacciNumbers, i, processingType);
            //        Thread.Sleep(25 * 1000);
            //    }
            //});


            Console.ReadLine();
        }
Exemple #9
0
        public void Fibonacci_When100_ShouldReturn354224848179261915075()
        {
            var expected = BigInteger.Parse("354224848179261915075");
            FibonacciCalculator Calculator = new FibonacciCalculator();
            var result = Calculator.CalculateValue(100);

            Assert.AreEqual(expected.ToString(), result);
        }
        public void ReturnFibonacciNumberWhenTestFails()
        {
            FibonacciCalculator fibonacciCalculator = new FibonacciCalculator();
            const int           ExpectedResult      = -1;
            var result = fibonacciCalculator.Fibonacci(10);

            Assert.AreEqual(ExpectedResult, result);
        }
        public void ReturnFibonacciNumberWhenInputIsLessThanOne()
        {
            FibonacciCalculator fibonacciCalculator = new FibonacciCalculator();
            const int           ExpectedResult      = -1;
            var result = fibonacciCalculator.Fibonacci(0);

            Assert.AreEqual(ExpectedResult, result);
        }
Exemple #12
0
        public void TestFibonacciOutsideLimit()
        {
            FibonacciCalculator fibCal = new FibonacciCalculator();

            var exception = Assert.Throws <System.NotSupportedException>(() => fibCal.Calculate(11));

            Assert.That(exception.Message, Is.EqualTo("n > 10 is not supported"));
        }
        public void ReturnFibonacciNumberWhenRegularCase()
        {
            FibonacciCalculator fibonacciCalculator = new FibonacciCalculator();
            const int           ExpectedResult      = 2;
            var result = fibonacciCalculator.Fibonacci(3);

            Assert.AreEqual(ExpectedResult, result);
        }
Exemple #14
0
 public void Next(int n, string guid)
 {
     // Добавляем запрос в очередь на обработку
     FibonacciCalculator.Enqueue(new FibonacciReq()
     {
         id = guid, previousNumber = n
     });
 }
 public MathController(
     FactorialCalculator factorialCalculator,
     FibonacciCalculator fibonacciCalculator,
     RandomSquareCalculator randomSquareCalculator)
 {
     _factorialCalculator    = factorialCalculator;
     _fibonacciCalculator    = fibonacciCalculator;
     _randomSquareCalculator = randomSquareCalculator;
 }
Exemple #16
0
        public void GetFibonacciConsequence_0_10()
        {
            var calculator = new FibonacciCalculator();
            var result     = calculator.GetConsequence(0, 10);

            string etalon = "1 1 2 3 5 8 13 21 34 55 ";

            Assert.AreEqual(etalon, result.Replace("\r\n", " "));
        }
Exemple #17
0
        public int SumOfTheEvenNumbersBelow4Million()
        {
            var fibonacciCalculator = new FibonacciCalculator();
            var mathOperations      = new MathOperationsForProblem002();

            var fibonacciNumbersBelow4Million = fibonacciCalculator.FibonacciNumbersBelow(4000000);

            return(mathOperations.SumEvenNumbersFromAListOfNumbers(fibonacciNumbersBelow4Million));
        }
Exemple #18
0
        public void GetFibonacciConsequence_10_negative10()
        {
            var calculator = new FibonacciCalculator();
            var result     = calculator.GetConsequence(10, -10);

            string etalon = "34 21 13 8 5 3 2 1 1 ";

            Assert.AreEqual(etalon, result.Replace("\r\n", " "));
        }
Exemple #19
0
        public void GetFibonacciIterator_GetIteratorOrder_Desc()
        {
            var calculator = new FibonacciCalculator();
            var orderName  = calculator.GetIteratorOrder(-10);

            string etalon = "DESC";

            Assert.AreEqual(etalon, orderName);
        }
Exemple #20
0
        public void GetFibonacciIterator_GetIteratorOrder_Asc_ForNormalCount()
        {
            var calculator = new FibonacciCalculator();
            var orderName  = calculator.GetIteratorOrder(10);

            string etalon = "ASC";

            Assert.AreEqual(etalon, orderName);
        }
Exemple #21
0
        public string FibonacciRow_ValidParameters(int count)
        {
            string actualResult = "";

            foreach (var number in FibonacciCalculator.GenerateFibonacciNumbers(count))
            {
                actualResult += number.ToString() + " ";
            }
            return(actualResult);
        }
Exemple #22
0
        public void ShouldReturnFibonacciNumbersBelow10()
        {
            var fibonacciNumbers = new List <int> {
                1, 2, 3, 5, 8
            };
            var fibonacciCalculator = new FibonacciCalculator();

            var fibonacciNumbersBelow10 = fibonacciCalculator.FibonacciNumbersBelow(10);

            fibonacciNumbersBelow10.Should().BeEquivalentTo(fibonacciNumbers);
        }
Exemple #23
0
        private void ProcessFibonacci(FibonacciMessage message)
        {
            var fibonacciCalculator = new FibonacciCalculator();

            for (int i = 0; i < message.NumbersToProcess; i++)
            {
                var numberIndex = message.StartIndex + i;
                var result      = fibonacciCalculator.Calculate(message.FibonacciNumbers[numberIndex], message.ProcessingType);
                SynchronizationContext.AddNumberAndCheckIfIsDone(result);
            }
        }
    static void Main(string[] args)
    {
        FibonacciInput      input      = new FibonacciInput();
        FibonacciCalculator calculator = new FibonacciCalculator();

        input.GetParam();
        long n = input.TotNum;

        Console.WriteLine("Fib ({0}) = {1}", n, calculator.Fibonacci(n, input.MyNumbers));
        Console.ReadKey();
    }
Exemple #25
0
        private static void Main()
        {
            System.AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
            var fCacluator = new FibonacciCalculator();

            Console.WriteLine($"Position 10 in the fibonacci sequence is {fCacluator.CalculateValueOfPosition(10)}.");
            Console.WriteLine($"Position 40 in the fibonacci sequence is {fCacluator.CalculateValueOfPosition(40)}.");
            Console.WriteLine();
            Console.WriteLine();
            Console.WriteLine("- Press any key to end the program -");
            Console.ReadLine();
        }
Exemple #26
0
 public ActionResult <BigInteger> Get(long index)
 {
     try
     {
         Response.Headers.Add(FibonacciRequestedTag, index.ToString());
         return(FibonacciCalculator.Calculate(index));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
        public void CalculateFibonacciTest()
        {
            var request = new FibonacciListerRequest();

            request.givenNumber = 5;

            var response = new FibonacciCalculator();
            var output   = response.FibonacciLister(request);
            var actual   = output.fibonacciList;

            int[] expected = { 1, 1, 2, 3, 5 };

            Assert.AreEqual(actual, expected);
        }
Exemple #28
0
        static async Task Main(string[] args)
        {
            var fibonacciNumbers = FileUtility.ReadNumbersFromFile(INPUT_FILE);
            var processingType   = FibonacciCalculator.GetProcessingType();

            for (int i = 1; i <= 32; i *= 2)
            {
                Console.WriteLine($"\nRuning with {i} Threads.");
                var result = await ProcessFibonacciWithTasks(fibonacciNumbers, i, processingType);

                FileUtility.WriteNumbersToFile(OUTPUT_FILE, result);
            }

            Console.ReadLine();
        }
Exemple #29
0
        static void ConsumeMessage(object model, BasicDeliverEventArgs ea)
        {
            try
            {
                var number = Int64.Parse(Encoding.UTF8.GetString(ea.Body.ToArray()));
                Console.WriteLine("[x] Received {0}", number);

                var fibonacciCalculator = new FibonacciCalculator();
                var result = fibonacciCalculator.Calculate(number, ProcessingType.Sleepy);
                FileUtility.AppendNumberToFile(OUTPUT_FILE, result);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Exemple #30
0
        public ActionResult FibonacciInput(FibonacciModel request)
        {
            if (ModelState.IsValid)
            {
                var fibCalc = new FibonacciCalculator();
                var fibData = new FibonacciListerRequest();
                fibData.givenNumber = request.givenNumber;


                var result = fibCalc.FibonacciLister(fibData);
                return(View("FibonacciOutput", result));
            }
            else
            {
                return(View(request));
            }
        }
Exemple #31
0
        private static void CalculateFibonacci(long[] fibonacciNumbers, int numberOfTasks, int taskIndex, ProcessingType processingType)
        {
            var fibonacciCalculator = new FibonacciCalculator();
            int numbersPerTask      = fibonacciNumbers.Length / numberOfTasks; // ideal case, even tasks and even numbers count
            int numbersToProcess    = 0;

            if (taskIndex == numberOfTasks - 1) // if is last task
            {
                numbersToProcess = fibonacciNumbers.Length - (numbersPerTask * (numberOfTasks - 1));
            }
            else
            {
                numbersToProcess = numbersPerTask;
            }

            for (int i = 0; i < numbersToProcess; i++)
            {
                var numberIndex = taskIndex * numbersPerTask + i;
                var result      = fibonacciCalculator.Calculate(fibonacciNumbers[numberIndex], processingType);
                ConcurrentStore.AddNumberToStore(result);
            }
        }