xref: /llvm-project/llvm/unittests/tools/llvm-exegesis/ResultAggregatorTest.cpp (revision 415bf200a725055a3a38e96269f4b752ea6fc330)
1 //===-- ResultAggregatorTest.cpp --------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "ResultAggregator.h"
10 #include "gtest/gtest.h"
11 
12 namespace llvm {
13 namespace exegesis {
14 
15 namespace {
16 
TEST(ResultAggregatorTest,DefaultAggregator)17 TEST(ResultAggregatorTest, DefaultAggregator) {
18   std::vector<Benchmark> Results(1);
19 
20   Results[0].Measurements = {BenchmarkMeasure::Create("x", 1, {})};
21 
22   Benchmark &Result = Results[0];
23 
24   std::unique_ptr<ResultAggregator> AggregatorToTest =
25       ResultAggregator::CreateAggregator(Benchmark::RepetitionModeE::Duplicate);
26   AggregatorToTest->AggregateResults(Result, ArrayRef(Results).drop_front());
27 
28   EXPECT_EQ(Result.Measurements[0].PerInstructionValue, 1);
29   EXPECT_EQ(Result.Measurements[0].PerSnippetValue, 1);
30   EXPECT_EQ(Result.Measurements[0].RawValue, 1);
31 }
32 
TEST(ResultAggregatorTest,MinimumResultAggregator)33 TEST(ResultAggregatorTest, MinimumResultAggregator) {
34   std::vector<Benchmark> Results(2);
35 
36   Results[0].Measurements = {BenchmarkMeasure::Create("x", 2, {})};
37   Results[1].Measurements = {BenchmarkMeasure::Create("x", 1, {})};
38 
39   Benchmark &Result = Results[0];
40 
41   std::unique_ptr<ResultAggregator> AggregatorToTest =
42       ResultAggregator::CreateAggregator(
43           Benchmark::RepetitionModeE::AggregateMin);
44   AggregatorToTest->AggregateResults(Result, ArrayRef(Results).drop_front());
45 
46   EXPECT_EQ(Result.Measurements[0].PerInstructionValue, 1);
47   EXPECT_EQ(Result.Measurements[0].PerSnippetValue, 1);
48   EXPECT_EQ(Result.Measurements[0].RawValue, 1);
49 }
50 
TEST(ResultAggregatorTest,MiddleHalfAggregator)51 TEST(ResultAggregatorTest, MiddleHalfAggregator) {
52   std::vector<Benchmark> Results(2);
53 
54   Results[0].Measurements = {BenchmarkMeasure::Create("x", 2, {})};
55   Results[1].Measurements = {BenchmarkMeasure::Create("x", 6, {})};
56 
57   Results[0].Key.Instructions.push_back(MCInst());
58   Results[1].Key.Instructions.push_back(MCInst());
59 
60   Results[0].MinInstructions = 1;
61   Results[1].MinInstructions = 3;
62 
63   Benchmark &Result = Results[0];
64 
65   std::unique_ptr<ResultAggregator> AggregatorToTest =
66       ResultAggregator::CreateAggregator(
67           Benchmark::RepetitionModeE::MiddleHalfLoop);
68   AggregatorToTest->AggregateResults(Result, ArrayRef(Results).drop_front());
69 
70   EXPECT_EQ(Result.Measurements[0].PerInstructionValue, 4);
71   EXPECT_EQ(Result.Measurements[0].PerSnippetValue, 4);
72   EXPECT_EQ(Result.Measurements[0].RawValue, 4);
73 }
74 
75 } // namespace
76 
77 } // namespace exegesis
78 } // namespace llvm
79