public static void CompetitionNoBaselineFailBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <NoBaselineFailBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.SetupError);

            Assert.AreEqual(messages.Length, 2);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[0].MessageText,
                "Target Benchmark1. Metric validation skipped as the method is not marked with CompetitionBenchmarkAttribute.");

            Assert.AreEqual(messages[1].RunNumber, 1);
            Assert.AreEqual(messages[1].RunMessageNumber, 2);
            Assert.AreEqual(messages[1].MessageSeverity, MessageSeverity.SetupError);
            Assert.AreEqual(messages[1].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[1].MessageText,
                "No baseline member found. Apply CompetitionBaselineAttribute to the one of benchmark methods.");
        }
Пример #2
0
        public static void CompetitionTypeLevelConfig()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <BenchmarkWithConfig>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            Assert.AreEqual(messages.Length, 1);
            Assert.AreEqual(messages[0].MessageText, "All competition metrics are ok.");
            AssertColumn(runState, BaselineScaledColumn.WelchTTestPValue, 1);
            AssertColumn(runState, StatisticColumn.Kurtosis, 0);
            AssertColumn(runState, StatisticColumn.Skewness, 1);

            Interlocked.Exchange(ref _callCounter, 0);

            runState = SelfTestCompetition.Run <Nested.BenchmarkWithConfig2>();
            messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            Assert.AreEqual(messages.Length, 1);
            Assert.AreEqual(messages[0].MessageText, "All competition metrics are ok.");
            AssertColumn(runState, BaselineScaledColumn.WelchTTestPValue, 1);
            AssertColumn(runState, StatisticColumn.Kurtosis, 1);
            AssertColumn(runState, StatisticColumn.Skewness, 1);

            Interlocked.Exchange(ref _callCounter, 0);
        }
Пример #3
0
        public static void TestIoReadMetricAccuracy()
        {
            var runState  = SelfTestCompetition.Run <IoReadBenchmark>();
            var summary   = runState.LastRunSummary;
            var readBytes = MetricInfo.FromAttribute <FileIoReadAttribute>().ValuesProvider.TryGetMeanValue(summary.Benchmarks[0], summary);

            Assert.Greater(readBytes, 0);
        }
Пример #4
0
        public static void TestClrExceptionsAccuracy()
        {
            var runState   = SelfTestCompetition.Run <ThrowExceptionsBenchmark>();
            var summary    = runState.LastRunSummary;
            var exceptions = MetricInfo.FromAttribute <ClrExceptionsAttribute>().ValuesProvider.TryGetMeanValue(summary.Benchmarks[0], summary);

            //Assert.True(runState.CompletedSuccessfully);
            Assert.Greater(exceptions ?? 1, 0);
        }
Пример #5
0
        public static void CompetitionEmptyBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <EmptyBenchmark>(SelfTestConfig);
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, 0);
            AssertCompetitionCompleted(runState, MessageSeverity.Verbose);
            Assert.AreEqual(messages.Length, 0);
        }
        public static void CompetitionLimitsFailBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <LimitsFailBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, 3 * ExpectedRunCount);             // 3x rerun
            AssertCompetitionCompleted(runState, MessageSeverity.TestError, runNumber: 3);

            Assert.AreEqual(messages.Length, 6);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.TestError);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.That(messages[0].MessageText, Does.StartWith("Target SlowerX10. Metric Scaled"));
            Assert.That(messages[0].MessageText, Does.Contain(" is out of limit "));

            Assert.AreEqual(messages[1].RunNumber, 1);
            Assert.AreEqual(messages[1].RunMessageNumber, 2);
            Assert.AreEqual(messages[1].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[1].MessageSource, MessageSource.Runner);
            Assert.AreEqual(messages[1].MessageText, "Metrics check failed. Requesting 1 run(s).");

            Assert.AreEqual(messages[2].RunNumber, 2);
            Assert.AreEqual(messages[2].RunMessageNumber, 1);
            Assert.AreEqual(messages[2].MessageSeverity, MessageSeverity.TestError);
            Assert.AreEqual(messages[2].MessageSource, MessageSource.Analyser);
            Assert.That(messages[2].MessageText, Does.StartWith("Target SlowerX10. Metric Scaled"));
            Assert.That(messages[2].MessageText, Does.Contain(" is out of limit "));

            Assert.AreEqual(messages[3].RunNumber, 2);
            Assert.AreEqual(messages[3].RunMessageNumber, 2);
            Assert.AreEqual(messages[3].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[3].MessageSource, MessageSource.Runner);
            Assert.AreEqual(messages[3].MessageText, "Metrics check failed. Requesting 1 run(s).");

            Assert.AreEqual(messages[4].RunNumber, 3);
            Assert.AreEqual(messages[4].RunMessageNumber, 1);
            Assert.AreEqual(messages[4].MessageSeverity, MessageSeverity.TestError);
            Assert.AreEqual(messages[4].MessageSource, MessageSource.Analyser);
            Assert.That(messages[4].MessageText, Does.StartWith("Target SlowerX10. Metric Scaled"));
            Assert.That(messages[4].MessageText, Does.Contain(" is out of limit "));

            Assert.AreEqual(messages[5].RunNumber, 3);
            Assert.AreEqual(messages[5].RunMessageNumber, 2);
            Assert.AreEqual(messages[5].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[5].MessageSource, MessageSource.Runner);
            Assert.AreEqual(
                messages[5].MessageText,
                "The benchmark was run 3 time(s), check log for details.");
        }
Пример #7
0
        public static void CompetitionLimitsEmptyFailBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <LimitsEmptyFailBenchmark>(SelfTestConfig);
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, 3 * ExpectedRunCount);             // 3x rerun
            AssertCompetitionCompleted(runState, MessageSeverity.TestError, runNumber: 3);

            Assert.AreEqual(messages.Length, 6);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.TestError);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.That(messages[0].MessageText, Does.StartWith("Method SlowerX10"));
            Assert.That(messages[0].MessageText, Does.EndWith(" has empty limit. Please fill it."));

            Assert.AreEqual(messages[1].RunNumber, 1);
            Assert.AreEqual(messages[1].RunMessageNumber, 2);
            Assert.AreEqual(messages[1].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[1].MessageSource, MessageSource.Runner);
            Assert.AreEqual(messages[1].MessageText, "Requesting 1 run(s): Limit checking failed.");

            Assert.AreEqual(messages[2].RunNumber, 2);
            Assert.AreEqual(messages[2].RunMessageNumber, 1);
            Assert.AreEqual(messages[2].MessageSeverity, MessageSeverity.TestError);
            Assert.AreEqual(messages[2].MessageSource, MessageSource.Analyser);
            Assert.That(messages[2].MessageText, Does.StartWith("Method SlowerX10"));
            Assert.That(messages[2].MessageText, Does.EndWith(" has empty limit. Please fill it."));

            Assert.AreEqual(messages[3].RunNumber, 2);
            Assert.AreEqual(messages[3].RunMessageNumber, 2);
            Assert.AreEqual(messages[3].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[3].MessageSource, MessageSource.Runner);
            Assert.AreEqual(messages[3].MessageText, "Requesting 1 run(s): Limit checking failed.");

            Assert.AreEqual(messages[4].RunNumber, 3);
            Assert.AreEqual(messages[4].RunMessageNumber, 1);
            Assert.AreEqual(messages[4].MessageSeverity, MessageSeverity.TestError);
            Assert.AreEqual(messages[4].MessageSource, MessageSource.Analyser);
            Assert.That(messages[4].MessageText, Does.StartWith("Method SlowerX10"));
            Assert.That(messages[4].MessageText, Does.EndWith(" has empty limit. Please fill it."));

            Assert.AreEqual(messages[5].RunNumber, 3);
            Assert.AreEqual(messages[5].RunMessageNumber, 2);
            Assert.AreEqual(messages[5].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[5].MessageSource, MessageSource.Runner);
            Assert.AreEqual(
                messages[5].MessageText,
                "The benchmark was run 3 time(s) (read log for details). Try to loose competition limits.");
        }
Пример #8
0
        public static void CompetitionHighAccuracyBenchmark()
        {
            IgnoreIfDebug();

            var runState = SelfTestCompetition.Run <HighAccuracyBenchmark>();
            var messages = runState.GetMessages();

            if (messages.All(m => m.MessageText != "All competition metrics are ok."))
            {
                Assert.Ignore("The environment does not provide accurate timings. Test results cannot be trusted.");
            }
        }
Пример #9
0
        public static void TestAnnotateFromRemoteLog()
        {
            var runState = SelfTestCompetition.Run <AnnotatedBenchmark>(_remoteLogConfig);
            var messages = runState.GetMessages();

            Assert.AreEqual(runState.HighestMessageSeverity, MessageSeverity.Warning);
            Assert.IsTrue(runState.Completed);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 4);
        }
Пример #10
0
        public static void TestAnnotateBaselineChangedFromLocalLog()
        {
            var runState = SelfTestCompetition.Run <AnnotatedBaselineChangedBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(runState.HighestMessageSeverity, MessageSeverity.SetupError);
            Assert.IsTrue(runState.Completed);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 3);
        }
Пример #11
0
        public static void TestAnnotateFromLocalLogTimeAndGcNoRelative()
        {
            var runState = SelfTestCompetition.Run <AnnotatedWithTimeAndGcNoRelativeBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(runState.HighestMessageSeverity, MessageSeverity.Warning);
            Assert.IsTrue(runState.Completed);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 4);
        }
Пример #12
0
        public static void CompetitionEmptyBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <EmptyBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, 0);
            AssertCompetitionCompleted(runState, MessageSeverity.SetupError);
            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].MessageText, "Nothing to check as there is no methods in benchmark.");
        }
        public static void CompetitionAssemblyLevelConfig()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <BenchmarkWithoutConfig>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            Assert.AreEqual(messages.Length, 1);
            Assert.AreEqual(messages[0].MessageText, "CompetitionAnalyser: All competition limits are ok.");
            Assert.AreEqual(runState.Config.GetColumns().Count(c => c == BaselineDiffColumn.Delta), 1);
            Assert.AreEqual(runState.Config.GetColumns().Count(c => c == BaselineDiffColumn.Scaled95), 0);
        }
Пример #14
0
        public static void CompetitionXmlFullAnnotationBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <XmlFullAnnotationBenchmark>(SelfTestConfig);
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.Informational);

            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].MessageText, "CompetitionAnalyser: All competition limits are ok.");
        }
Пример #15
0
        public static void CompetitionNoBaselineOkBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <NoBaselineOkBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.Informational);

            Assert.AreEqual(messages.Length, 2);
            Assert.AreEqual(messages[0].MessageText, "Target Benchmark1. Metric validation skipped as the method is not marked with CompetitionBenchmarkAttribute.");
            Assert.AreEqual(messages[1].MessageText, "Target Benchmark2. Metric validation skipped as the method is not marked with CompetitionBenchmarkAttribute.");
        }
Пример #16
0
        public static void CompetitionOkBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <OkBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.Informational);

            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].MessageText, "All competition metrics are ok.");
        }
Пример #17
0
        public static void TestAnnotateFromLocalLog()
        {
            // TODO: message if no XML annotation
            // TODO: exact message validation
            var runState = SelfTestCompetition.Run <AnnotatedBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(runState.HighestMessageSeverity, MessageSeverity.Warning);
            Assert.IsTrue(runState.Completed);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 4);
        }
Пример #18
0
        public static void CompetitionXmlTaskOkBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <XmlTaskOkBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, 2 * ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.Informational);

            Assert.AreEqual(messages.Length, 3);

            Assert.AreEqual(messages[0].MessageText, "Target SlowerX2Async. Metric validation skipped as the method is marked with CompetitionBenchmarkAttribute.DoesNotCompete set to true.");
            Assert.AreEqual(messages[1].MessageText, "Target SlowerX3Async. Metric validation skipped as the method is not marked with CompetitionBenchmarkAttribute.");
            Assert.AreEqual(messages[2].MessageText, "All competition metrics are ok.");
        }
Пример #19
0
        public static void CompetitionHighAccuracyBenchmarkOutOfProcess()
        {
            IgnoreIfDebug();
            // HACK: forcing a reference to System.Configuration
            // WAITINGFOR: https://github.com/PerfDotNet/BenchmarkDotNet/issues/234
            GC.KeepAlive(typeof(ConfigurationManager));

            var config = CreateHighAccuracyConfig(outOfProcess: true);

            var runState = SelfTestCompetition.Run <HighAccuracyBenchmarkOutOfProcess>(config);
            var messages = runState.GetMessages();

            if (messages.All(m => m.MessageText != "CompetitionAnalyser: All competition limits are ok."))
            {
                Assert.Ignore("The environment does not provide accurate timings. Test results cannot be trusted.");
            }
        }
Пример #20
0
        public static void CompetitionTooSlowOk()
        {
            var overrideConfig = CompetitionHelpers
                                 .CreateConfig(typeof(TooSlowBenchmark))
                                 .WithLongRunningBenchmarkLimit(TimeSpan.FromMinutes(2));

            var runState = SelfTestCompetition.Run <TooSlowBenchmark>(overrideConfig);
            var messages = runState.GetMessages();
            var summary  = runState.LastRunSummary;

            Assert.AreEqual(summary?.ValidationErrors.Length, 0);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 0);
        }
Пример #21
0
        public static void CompetitionTooSlowOk()
        {
            var overrideConfig = new ManualCompetitionConfig(SelfTestConfig)
            {
                AllowLongRunningBenchmarks = true
            };

            var runState = SelfTestCompetition.Run <TooSlowBenchmark>(overrideConfig);
            var messages = runState.GetMessages();
            var summary  = runState.LastRunSummary;

            Assert.AreEqual(summary?.ValidationErrors.Length, 0);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 0);
        }
Пример #22
0
        public static void CompetitionNoBaselineFailBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <NoBaselineFailBenchmark>(SelfTestConfig);
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.SetupError);

            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.SetupError);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(messages[0].MessageText, "The benchmark NoBaselineFailBenchmark has no baseline.");
        }
Пример #23
0
        public static void CompetitionXmlBaselineChangedBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <XmlBaselineChangedBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.SetupError);

            Assert.AreEqual(messages.Length, 2);

            Assert.AreEqual(
                messages[0].MessageText,
                "Target Baseline. Baseline flag on the method and in the annotation do not match.");
            Assert.AreEqual(
                messages[1].MessageText,
                "Target SlowerX20. Baseline flag on the method and in the annotation do not match.");
        }
Пример #24
0
        public static void CompetitionLimitsEmptyFailBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <LimitsEmptyFailBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);             // 3x rerun
            AssertCompetitionCompleted(runState, MessageSeverity.Warning, runNumber: 1);

            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[0].MessageText,
                "Some benchmark metrics are empty and were ignored. Empty metrics are: SlowerX10: Scaled.");
        }
Пример #25
0
        public static void CompetitionBadLimitsBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <BadLimitsBenchmark>();
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.ExecutionError, skipSummary: true);

            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.ExecutionError);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Runner);
            Assert.That(
                messages[0].MessageText,
                Does.StartWith("Benchmark BadLimitsBenchmark failed. Exception: Invalid range [20.2..5.5]."));
        }
Пример #26
0
        public static void CompetitionTooFastBenchmark()
        {
            var runState = SelfTestCompetition.Run <TooFastBenchmark>(_debugConfig);
            var messages = runState.GetMessages();
            var summary  = runState.LastRunSummary;

            Assert.AreEqual(summary?.ValidationErrors.Length, 0);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[0].MessageText,
                "The benchmark(s) TooFast, TooFast2 run faster than 0.0015ms. Results cannot be trusted.");
        }
        public static void CompetitionTooFastBenchmark()
        {
            var runState = SelfTestCompetition.Run <TooFastBenchmark>();
            var messages = runState.GetMessages();
            var summary  = runState.LastRunSummary;

            Assert.AreEqual(summary?.ValidationErrors.Length, 0);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 3);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[0].MessageText,
                "Benchmarks TooFast, TooFastX5: measured run time is less than 1.00 us. " +
                "Timings are imprecise as they are too close to the timer resolution.");


            Assert.AreEqual(messages[1].RunNumber, 1);
            Assert.AreEqual(messages[1].RunMessageNumber, 2);
            Assert.AreEqual(messages[1].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[1].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[1].MessageText,
                "Target TooFast. Metric validation skipped as the method is not marked with CompetitionBenchmarkAttribute.");


            Assert.AreEqual(messages[2].RunNumber, 1);
            Assert.AreEqual(messages[2].RunMessageNumber, 3);
            Assert.AreEqual(messages[2].MessageSeverity, MessageSeverity.Informational);
            Assert.AreEqual(messages[2].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[2].MessageText,
                "Target TooFastX5. Metric validation skipped as the method is not marked with CompetitionBenchmarkAttribute.");
        }
Пример #28
0
        public static void CompetitionTooSlowBenchmark()
        {
            var runState = SelfTestCompetition.Run <TooSlowBenchmark>();
            var messages = runState.GetMessages();
            var summary  = runState.LastRunSummary;

            Assert.AreEqual(summary?.ValidationErrors.Length, 0);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[0].MessageText,
                "Benchmark TooSlow: run takes more than 500.0 ms." +
                " Consider to rewrite the test as peek timings will be hidden by averages.");
        }
Пример #29
0
        public static void CompetitionBadLimitsBenchmark()
        {
            Interlocked.Exchange(ref _callCounter, 0);

            var runState = SelfTestCompetition.Run <BadLimitsBenchmark>(SelfTestConfig);
            var messages = runState.GetMessages();

            Assert.AreEqual(_callCounter, ExpectedRunCount);
            AssertCompetitionCompleted(runState, MessageSeverity.ExecutionError, skipSummary: true);

            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.ExecutionError);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Runner);
            Assert.That(
                messages[0].MessageText,
                Does.StartWith(
                    "Benchmark BadLimitsBenchmark failed. Exception: Please check competition limits. " +
                    "The minRatio (20.2) should not be greater than the maxRatio (5.5)."));
        }
        public static void CompetitionTooSlowBenchmark()
        {
            var runState = SelfTestCompetition.Run <TooSlowBenchmark>();
            var messages = runState.GetMessages();
            var summary  = runState.LastRunSummary;

            Assert.AreEqual(summary?.ValidationErrors.Length, 0);
            Assert.AreEqual(runState.RunNumber, 1);
            Assert.AreEqual(runState.RunsLeft, 0);
            Assert.AreEqual(runState.RunLimitExceeded, false);
            Assert.AreEqual(runState.LooksLikeLastRun, true);
            Assert.AreEqual(messages.Length, 1);

            Assert.AreEqual(messages[0].RunNumber, 1);
            Assert.AreEqual(messages[0].RunMessageNumber, 1);
            Assert.AreEqual(messages[0].MessageSeverity, MessageSeverity.Warning);
            Assert.AreEqual(messages[0].MessageSource, MessageSource.Analyser);
            Assert.AreEqual(
                messages[0].MessageText,
                "Benchmark TooSlow: measured run time is greater than 500.0 ms. " +
                "There's a risk the peak timings were hidden by averages. " +
                "Consider to reduce the number of iterations performed per each measurement.");
        }