package fibonaccisequence;

/**
 * Tester class to test the Fibonacci Sequence
 * @author Winston   Prakash
 */

public class FibonacciSequenceTester {
    
    /**
     * get next number in the Fibonacci Sequence using iterative method
     */
    public void fibonacciSequenceTest1(){
        FibonacciSequence fibonacciSequence = new FibonacciSequence();
        int index = 35; // Do not try more than 40 would take too long
        long value = fibonacciSequence.iterativeFindAt(index);
        System.out.println("Value at index " + index + "   is " + value);
    }
    
    /**
     * get next number in the Fibonacci Sequence using polynomial method
     */
    public void fibonacciSequenceTest2(){
        FibonacciSequence fibonacciSequence = new FibonacciSequence();
        int index = 75;
        long value = fibonacciSequence.FindAt(index);
        System.out.println("Value at index " + index + "   is " + value);
    }
    
    /**
     * Get next number in the Fibonacci Sequence using formula
     */
    public void fibonacciSequenceTest3(){
        FibonacciSequence fibonacciSequence = new FibonacciSequence();
        int index = 75;
        long value = fibonacciSequence.FindAtUsingFormula(index);
        System.out.println("Value at index " + index + "   is " + value);
    }
    
    public static void main(String[] args) {
        final FibonacciSequenceTester fibonacciSequenceTester = new FibonacciSequenceTester();
        
        fibonacciSequenceTester.fibonacciSequenceTest1();
        fibonacciSequenceTester.fibonacciSequenceTest1();
        fibonacciSequenceTester.fibonacciSequenceTest1();
        
        /*Runnable fibonacciSequenceTesterTask = new Runnable(){
            public void run(){
                fibonacciSequenceTester.fibonacciSequenceTest1();
            }
        };
        
        ConcurrentTimingTester concurrentTimingTester = new ConcurrentTimingTester();
        try {
            long elapsedTime = concurrentTimingTester.timeTask(fibonacciSequenceTesterTask);
            concurrentTimingTester.displayElapsedTime("Elapsed Time for single run: " , elapsedTime);
            elapsedTime = concurrentTimingTester.timeTasksConcurrently(10, fibonacciSequenceTesterTask);
            concurrentTimingTester.displayElapsedTime("Elapsed Time for 10 concurrent run: " , elapsedTime);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }*/
    }
}