public void EvaluateStoredTasks_TwoTasks_OneIteration()
        {
            // Arrange
            var shark = new BenchShark {
                EnableUnoptimizedEvaluations = true
            };
            const string name1 = "Foo";
            const string name2 = "Bar";

            // Act
            shark.AddTask(name1, TaskToEvaluate1);
            shark.AddTask(name2, TaskToEvaluate2);
            var allResults = shark.EvaluateStoredTasks(1);

            // Assert collection
            Assert.AreEqual(2, allResults.Evaluations.Count());
            Assert.AreNotEqual(allResults.FastestEvaluations, allResults.SlowestEvaluations);

            // Assert evaluation
            Assert.AreEqual(name1, allResults.Evaluations.ElementAt(0).Name);
            Assert.AreEqual(name2, allResults.Evaluations.ElementAt(1).Name);
            foreach (var result in allResults.Evaluations)
            {
                Assert.AreEqual(result.AverageElapsedTicks, result.TotalElapsedTicks);
                Assert.AreEqual(result.AverageExecutionTime, result.TotalExecutionTime);
                Assert.AreEqual(1, result.IterationsCount);
                Assert.IsTrue(result.WorstExecutionTime == result.BestExecutionTime);
                Assert.IsTrue(result.WorstElapsedTicks == result.BestElapsedTicks);
            }
        }
        public void EvaluateStoredTasks_OneTask_TenIteration()
        {
            // Arrange
            var shark = new BenchShark {
                EnableUnoptimizedEvaluations = true
            };
            const string name = "Foo";

            // Act
            shark.AddTask(name, TaskToEvaluate1);
            var allResults = shark.EvaluateStoredTasks(10);
            var result     = allResults.Evaluations.First();

            // Assert collection
            Assert.AreEqual(1, allResults.Evaluations.Count());
            CollectionAssert.AreEqual(allResults.FastestEvaluations.ToArray(), allResults.SlowestEvaluations.ToArray());

            // Assert evaluation
            Assert.IsTrue(result.AverageElapsedTicks < result.TotalElapsedTicks);
            Assert.IsTrue(result.AverageExecutionTime < result.TotalExecutionTime);
            Assert.AreEqual(10, result.IterationsCount);
            Assert.AreEqual(name, result.Name);
            Assert.IsTrue(result.WorstExecutionTime > result.BestExecutionTime);
            Assert.IsTrue(result.WorstElapsedTicks > result.BestElapsedTicks);
        }
        public void EvaluateStoredTasks_TwoTasks_TenIteration_WithEvaluationEvent()
        {
            // Arrange
            var shark = new BenchShark {
                EnableUnoptimizedEvaluations = true
            };
            var names   = new[] { "Foo", "Bar" };
            var counter = 0;

            shark.EvaluationCompleted += (sender, args) =>
            {
                Assert.AreEqual(names[counter], args.TaskEvaluated.Name);
                Assert.IsTrue(args.TaskEvaluated.AverageElapsedTicks < args.TaskEvaluated.TotalElapsedTicks);
                Assert.IsTrue(args.TaskEvaluated.AverageExecutionTime < args.TaskEvaluated.TotalExecutionTime);
                Assert.AreEqual(10, args.TaskEvaluated.IterationsCount);
                Assert.IsTrue(args.TaskEvaluated.WorstExecutionTime > args.TaskEvaluated.BestExecutionTime);
                Assert.IsTrue(args.TaskEvaluated.WorstElapsedTicks > args.TaskEvaluated.BestElapsedTicks);
                counter++;
            };

            // Act
            shark.AddTask(names[0], TaskToEvaluate1);
            shark.AddTask(names[1], TaskToEvaluate2);
            shark.EvaluateStoredTasks(10);

            // Assert
            Assert.AreEqual(2, counter);
        }
        public void EvaluateStoredTasks_OneTask_TenIteration()
        {
            // Arrange
            var shark = new BenchShark { EnableUnoptimizedEvaluations = true };
            const string name = "Foo";

            // Act
            shark.AddTask(name, TaskToEvaluate1);
            var allResults = shark.EvaluateStoredTasks(10);
            var result = allResults.Evaluations.First();

            // Assert collection
            Assert.AreEqual(1, allResults.Evaluations.Count());
            CollectionAssert.AreEqual(allResults.FastestEvaluations.ToArray(), allResults.SlowestEvaluations.ToArray());

            // Assert evaluation
            Assert.IsTrue(result.AverageElapsedTicks < result.TotalElapsedTicks);
            Assert.IsTrue(result.AverageExecutionTime < result.TotalExecutionTime);
            Assert.AreEqual(10, result.IterationsCount);
            Assert.AreEqual(name, result.Name);
            Assert.IsTrue(result.WorstExecutionTime > result.BestExecutionTime);
            Assert.IsTrue(result.WorstElapsedTicks > result.BestElapsedTicks);
        }
        public void EvaluateStoredTasks_TwoTasks_OneIteration()
        {
            // Arrange
            var shark = new BenchShark { EnableUnoptimizedEvaluations = true };
            const string name1 = "Foo";
            const string name2 = "Bar";

            // Act
            shark.AddTask(name1, TaskToEvaluate1);
            shark.AddTask(name2, TaskToEvaluate2);
            var allResults = shark.EvaluateStoredTasks(1);

            // Assert collection
            Assert.AreEqual(2, allResults.Evaluations.Count());
            Assert.AreNotEqual(allResults.FastestEvaluations, allResults.SlowestEvaluations);

            // Assert evaluation
            Assert.AreEqual(name1, allResults.Evaluations.ElementAt(0).Name);
            Assert.AreEqual(name2, allResults.Evaluations.ElementAt(1).Name);
            foreach (var result in allResults.Evaluations)
            {
                Assert.AreEqual(result.AverageElapsedTicks, result.TotalElapsedTicks);
                Assert.AreEqual(result.AverageExecutionTime, result.TotalExecutionTime);
                Assert.AreEqual(1, result.IterationsCount);
                Assert.IsTrue(result.WorstExecutionTime == result.BestExecutionTime);
                Assert.IsTrue(result.WorstElapsedTicks == result.BestElapsedTicks);
            }
        }
        public void EvaluateStoredTasks_TwoTasks_TenIteration_WithEvaluationEvent()
        {
            // Arrange
            var shark = new BenchShark { EnableUnoptimizedEvaluations = true };
            var names = new[] { "Foo", "Bar" };
            var counter = 0;

            shark.EvaluationCompleted += (sender, args) =>
            {
                Assert.AreEqual(names[counter], args.TaskEvaluated.Name);
                Assert.IsTrue(args.TaskEvaluated.AverageElapsedTicks < args.TaskEvaluated.TotalElapsedTicks);
                Assert.IsTrue(args.TaskEvaluated.AverageExecutionTime < args.TaskEvaluated.TotalExecutionTime);
                Assert.AreEqual(10, args.TaskEvaluated.IterationsCount);
                Assert.IsTrue(args.TaskEvaluated.WorstExecutionTime > args.TaskEvaluated.BestExecutionTime);
                Assert.IsTrue(args.TaskEvaluated.WorstElapsedTicks > args.TaskEvaluated.BestElapsedTicks);
                counter++;
            };

            // Act
            shark.AddTask(names[0], TaskToEvaluate1);
            shark.AddTask(names[1], TaskToEvaluate2);
            shark.EvaluateStoredTasks(10);

            // Assert
            Assert.AreEqual(2, counter);
        }