Example #1
0
        /// <summary>
        /// In this method we run each of our search methods against
        /// 100 random instances of 4 configurations. Each
        /// search algorithm is given the same 100 instances of each configuration
        /// and each instance is first checked to ensure it has a valid path using
        /// BFS.
        /// </summary>
        public static void RunTestSuite()
        {
            DateTime start_time = DateTime.Now;

            output = File.Open("Output.txt", FileMode.Create);
            Log.Success(string.Format("Preparing to Utilize {0} logical processors", THREADS));
            Log.Success("Press enter to begin...");
            Console.ReadLine();

            HexagonalTileSearchProblem[] Configs = new HexagonalTileSearchProblem[]
            {
                new HexagonalTileSearchProblem(4, 3, 0.2),
                new HexagonalTileSearchProblem(4, 3, 0.5),
                new HexagonalTileSearchProblem(5, 4, 0.2),
                new HexagonalTileSearchProblem(5, 4, 0.5),
                new HexagonalTileSearchProblem(6, 6, 0.2),
                new HexagonalTileSearchProblem(6, 6, 0.5),

                new HexagonalTileSearchProblem(10, 10, 0.2),
                new HexagonalTileSearchProblem(10, 10, 0.5),
                new HexagonalTileSearchProblem(15, 15, 0.2),
                new HexagonalTileSearchProblem(15, 15, 0.5)
            };


            TotalTests = (uint)Configs.Count() * (uint)Algos.Count() * 100;
            ManualResetEvent[] doneEvents = new ManualResetEvent[Configs.Count() * 5];
            List <Thread>      threads    = new List <Thread>();
            int    i        = 0;
            int    test_num = 0;
            Thread t;

            Tuple <HexagonalTileSearchProblem, ManualResetEvent, int, int> param;

            tasks = new Queue <Tuple <HexagonalTileSearchProblem, ManualResetEvent, int, int> >();

            foreach (HexagonalTileSearchProblem p in Configs)
            {
                for (int x = 0; x < 5; x++)
                {
                    doneEvents[i] = new ManualResetEvent(false);
                    param         = new Tuple <HexagonalTileSearchProblem, ManualResetEvent, int, int>(
                        p.Clone(), doneEvents[i], i++, test_num);
                    tasks.Enqueue(param);
                    test_num += 20;
                }
            }

            for (i = 0; i < THREADS; i++)
            {
                t = new Thread(() =>
                {
                    TaskThread();
                });
                threads.Add(t);
                t.Start();
            }
            WaitHandle.WaitAll(doneEvents);

            Log.Status("Flushing results to file...");
            output.Flush();
            output.Close();

            DateTime end_time = DateTime.Now;

            Log.Status(string.Format("Complete Test Suite executed in {0:0.000} seconds.", (end_time - start_time).TotalMilliseconds / 1000.0));
            Log.Success("All Tests Complete - Press Enter to Exit");
            Console.ReadLine();
        }