/// <summary>
        ///
        /// </summary>
        /// <param name="tester"></param>
        /// <param name="trier"></param>
        /// <param name="startNumber"></param>
        /// <param name="endNumber"></param>
        /// <returns></returns>
        protected static PrimeDataDto FindPrimesBetweenTimer(IFindPrimesBetween tester, IIsPrime trier, ulong startNumber, ulong endNumber)
        {
            PrimeDataDto results = null;

            System.Diagnostics.Debug.WriteLine($"{tester.GetType().Name} : {trier.GetType().Name} : {startNumber.ToString("#,##0")} - {endNumber.ToString("#,##0")}");
            Console.Write($"{DateTime.Now.ToString()} : {tester.GetType().Name} : {trier.GetType().Name} : {startNumber.ToString("#,##0")} - {endNumber.ToString("#,##0")} : ");
            Stopwatch sw = new Stopwatch();

            sw.Restart();
            tester.Execute(startNumber, endNumber, trier);
            sw.Stop();

            results = tester.Data;

            //Console.WriteLine($"{DateTime.Now.ToString()} {Environment.NewLine}{tester.GetType().Name} : {trier.GetType().Name}{Environment.NewLine}{startNumber.ToString("#,##0")} - {endNumber.ToString("#,##0")}{Environment.NewLine} Time Taken : {PrimeNumbers.Model.Utilities.ElaspedTimeFormatter(sw.Elapsed)}{Environment.NewLine}Result : {result.Count.ToString("#,##0")}{Environment.NewLine}");
            Console.Write($"Result = {results.PrimeNumbers.Count().ToString("#,##0")} : Time Taken : {PrimeNumbers.Model.Utilities.ElaspedTimeFormatter(sw.Elapsed)}");
            Console.WriteLine();

            return(results);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="startNumber"></param>
        /// <param name="endNumber"></param>
        /// <param name="isPrimeTester"></param>
        /// <param name="allowedVersionNumbers"></param>
        protected static void TestFindPrimesBetweenPerformance(ulong startNumber, ulong endNumber, IIsPrime isPrimeTester, int[] allowedVersionNumbers = null)
        {
            Type[] findPrimesBetweenTypes = PerformanceTests.GetTestingTypes("PrimeNumbers.Model", "FindPrimesBetweenV", allowedVersionNumbers);

            if ((findPrimesBetweenTypes != null) &&
                (findPrimesBetweenTypes.Any()))
            {
                Console.WriteLine($"FindPrimesBetween Testing with {startNumber.ToString("#,##0")} - {endNumber.ToString("#,##0")}");

                foreach (Type type in findPrimesBetweenTypes)
                {
                    IFindPrimesBetween findPrimesBetweenTester = (IFindPrimesBetween)Activator.CreateInstance(type);

                    PerformanceTests.FindPrimesBetweenTimer(findPrimesBetweenTester, isPrimeTester, startNumber, endNumber);
                }
            }
            else
            {
                Console.WriteLine("No FindPrimesBetween Classes found to test with");
            }

            Console.WriteLine();
        }
 public FindPrimesBetweenTestBase(IFindPrimesBetween tester, IIsPrime primeTester)
 {
     this.Tester      = tester;
     this.PrimeTester = primeTester;
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="startNumber"></param>
        /// <param name="endNumber"></param>
        /// <param name="primeChecker"></param>
        /// <param name="primeFinder"></param>
        /// <param name="primeFileManagement"></param>
        public FindPrimesBetweenGenerator(ulong startNumber, ulong endNumber, IIsPrime primeChecker, IFindPrimesBetween primeFinder, ISavePrimes primeFileManagement)
            : base(startNumber, endNumber)
        {
            if (primeChecker == null)
            {
                throw new ArgumentNullException("primeChecker");
            }

            if (primeFinder == null)
            {
                throw new ArgumentNullException("primeFinder");
            }

            if (primeFileManagement == null)
            {
                throw new ArgumentNullException("primeFileManagement");
            }

            this.PrimeChecker   = primeChecker;
            this.PrimeFinder    = primeFinder;
            this.PrimeFileSaver = primeFileManagement;
        }