xref: /aosp_15_r20/external/google-benchmark/test/benchmark_gtest.cc (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Worker #include <map>
2*dbb99499SAndroid Build Coastguard Worker #include <string>
3*dbb99499SAndroid Build Coastguard Worker #include <vector>
4*dbb99499SAndroid Build Coastguard Worker 
5*dbb99499SAndroid Build Coastguard Worker #include "../src/benchmark_register.h"
6*dbb99499SAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
7*dbb99499SAndroid Build Coastguard Worker #include "gmock/gmock.h"
8*dbb99499SAndroid Build Coastguard Worker #include "gtest/gtest.h"
9*dbb99499SAndroid Build Coastguard Worker 
10*dbb99499SAndroid Build Coastguard Worker namespace benchmark {
11*dbb99499SAndroid Build Coastguard Worker namespace internal {
12*dbb99499SAndroid Build Coastguard Worker 
13*dbb99499SAndroid Build Coastguard Worker namespace {
14*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,Simple)15*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, Simple) {
16*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
17*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, 1, 2, 2);
18*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(1, 2));
19*dbb99499SAndroid Build Coastguard Worker }
20*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,Simple64)21*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, Simple64) {
22*dbb99499SAndroid Build Coastguard Worker   std::vector<int64_t> dst;
23*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, static_cast<int64_t>(1), static_cast<int64_t>(2), 2);
24*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(1, 2));
25*dbb99499SAndroid Build Coastguard Worker }
26*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,Advanced)27*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, Advanced) {
28*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
29*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, 5, 15, 2);
30*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(5, 8, 15));
31*dbb99499SAndroid Build Coastguard Worker }
32*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,Advanced64)33*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, Advanced64) {
34*dbb99499SAndroid Build Coastguard Worker   std::vector<int64_t> dst;
35*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, static_cast<int64_t>(5), static_cast<int64_t>(15), 2);
36*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(5, 8, 15));
37*dbb99499SAndroid Build Coastguard Worker }
38*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,FullRange8)39*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, FullRange8) {
40*dbb99499SAndroid Build Coastguard Worker   std::vector<int8_t> dst;
41*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, int8_t{1}, std::numeric_limits<int8_t>::max(), 8);
42*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(
43*dbb99499SAndroid Build Coastguard Worker       dst, testing::ElementsAre(int8_t{1}, int8_t{8}, int8_t{64}, int8_t{127}));
44*dbb99499SAndroid Build Coastguard Worker }
45*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,FullRange64)46*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, FullRange64) {
47*dbb99499SAndroid Build Coastguard Worker   std::vector<int64_t> dst;
48*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, int64_t{1}, std::numeric_limits<int64_t>::max(), 1024);
49*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(
50*dbb99499SAndroid Build Coastguard Worker       dst, testing::ElementsAre(1LL, 1024LL, 1048576LL, 1073741824LL,
51*dbb99499SAndroid Build Coastguard Worker                                 1099511627776LL, 1125899906842624LL,
52*dbb99499SAndroid Build Coastguard Worker                                 1152921504606846976LL, 9223372036854775807LL));
53*dbb99499SAndroid Build Coastguard Worker }
54*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,NegativeRanges)55*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, NegativeRanges) {
56*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
57*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, -8, 0, 2);
58*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-8, -4, -2, -1, 0));
59*dbb99499SAndroid Build Coastguard Worker }
60*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,StrictlyNegative)61*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, StrictlyNegative) {
62*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
63*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, -8, -1, 2);
64*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-8, -4, -2, -1));
65*dbb99499SAndroid Build Coastguard Worker }
66*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,SymmetricNegativeRanges)67*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, SymmetricNegativeRanges) {
68*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
69*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, -8, 8, 2);
70*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-8, -4, -2, -1, 0, 1, 2, 4, 8));
71*dbb99499SAndroid Build Coastguard Worker }
72*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,SymmetricNegativeRangesOddMult)73*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, SymmetricNegativeRangesOddMult) {
74*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
75*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, -30, 32, 5);
76*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-30, -25, -5, -1, 0, 1, 5, 25, 32));
77*dbb99499SAndroid Build Coastguard Worker }
78*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,NegativeRangesAsymmetric)79*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, NegativeRangesAsymmetric) {
80*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
81*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, -3, 5, 2);
82*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-3, -2, -1, 0, 1, 2, 4, 5));
83*dbb99499SAndroid Build Coastguard Worker }
84*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,NegativeRangesLargeStep)85*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, NegativeRangesLargeStep) {
86*dbb99499SAndroid Build Coastguard Worker   // Always include -1, 0, 1 when crossing zero.
87*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
88*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, -8, 8, 10);
89*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-8, -1, 0, 1, 8));
90*dbb99499SAndroid Build Coastguard Worker }
91*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,ZeroOnlyRange)92*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, ZeroOnlyRange) {
93*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
94*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, 0, 0, 2);
95*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(0));
96*dbb99499SAndroid Build Coastguard Worker }
97*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,ZeroStartingRange)98*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, ZeroStartingRange) {
99*dbb99499SAndroid Build Coastguard Worker   std::vector<int> dst;
100*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, 0, 2, 2);
101*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(0, 1, 2));
102*dbb99499SAndroid Build Coastguard Worker }
103*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,NegativeRange64)104*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, NegativeRange64) {
105*dbb99499SAndroid Build Coastguard Worker   std::vector<int64_t> dst;
106*dbb99499SAndroid Build Coastguard Worker   AddRange<int64_t>(&dst, -4, 4, 2);
107*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(-4, -2, -1, 0, 1, 2, 4));
108*dbb99499SAndroid Build Coastguard Worker }
109*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,NegativeRangePreservesExistingOrder)110*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, NegativeRangePreservesExistingOrder) {
111*dbb99499SAndroid Build Coastguard Worker   // If elements already exist in the range, ensure we don't change
112*dbb99499SAndroid Build Coastguard Worker   // their ordering by adding negative values.
113*dbb99499SAndroid Build Coastguard Worker   std::vector<int64_t> dst = {1, 2, 3};
114*dbb99499SAndroid Build Coastguard Worker   AddRange<int64_t>(&dst, -2, 2, 2);
115*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst, testing::ElementsAre(1, 2, 3, -2, -1, 0, 1, 2));
116*dbb99499SAndroid Build Coastguard Worker }
117*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,FullNegativeRange64)118*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, FullNegativeRange64) {
119*dbb99499SAndroid Build Coastguard Worker   std::vector<int64_t> dst;
120*dbb99499SAndroid Build Coastguard Worker   const auto min = std::numeric_limits<int64_t>::min();
121*dbb99499SAndroid Build Coastguard Worker   const auto max = std::numeric_limits<int64_t>::max();
122*dbb99499SAndroid Build Coastguard Worker   AddRange(&dst, min, max, 1024);
123*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(
124*dbb99499SAndroid Build Coastguard Worker       dst, testing::ElementsAreArray(std::vector<int64_t>{
125*dbb99499SAndroid Build Coastguard Worker                min, -1152921504606846976LL, -1125899906842624LL,
126*dbb99499SAndroid Build Coastguard Worker                -1099511627776LL, -1073741824LL, -1048576LL, -1024LL, -1LL, 0LL,
127*dbb99499SAndroid Build Coastguard Worker                1LL, 1024LL, 1048576LL, 1073741824LL, 1099511627776LL,
128*dbb99499SAndroid Build Coastguard Worker                1125899906842624LL, 1152921504606846976LL, max}));
129*dbb99499SAndroid Build Coastguard Worker }
130*dbb99499SAndroid Build Coastguard Worker 
TEST(AddRangeTest,Simple8)131*dbb99499SAndroid Build Coastguard Worker TEST(AddRangeTest, Simple8) {
132*dbb99499SAndroid Build Coastguard Worker   std::vector<int8_t> dst;
133*dbb99499SAndroid Build Coastguard Worker   AddRange<int8_t>(&dst, int8_t{1}, int8_t{8}, int8_t{2});
134*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(dst,
135*dbb99499SAndroid Build Coastguard Worker               testing::ElementsAre(int8_t{1}, int8_t{2}, int8_t{4}, int8_t{8}));
136*dbb99499SAndroid Build Coastguard Worker }
137*dbb99499SAndroid Build Coastguard Worker 
TEST(AddCustomContext,Simple)138*dbb99499SAndroid Build Coastguard Worker TEST(AddCustomContext, Simple) {
139*dbb99499SAndroid Build Coastguard Worker   std::map<std::string, std::string> *&global_context = GetGlobalContext();
140*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(global_context, nullptr);
141*dbb99499SAndroid Build Coastguard Worker 
142*dbb99499SAndroid Build Coastguard Worker   AddCustomContext("foo", "bar");
143*dbb99499SAndroid Build Coastguard Worker   AddCustomContext("baz", "qux");
144*dbb99499SAndroid Build Coastguard Worker 
145*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(*global_context,
146*dbb99499SAndroid Build Coastguard Worker               testing::UnorderedElementsAre(testing::Pair("foo", "bar"),
147*dbb99499SAndroid Build Coastguard Worker                                             testing::Pair("baz", "qux")));
148*dbb99499SAndroid Build Coastguard Worker 
149*dbb99499SAndroid Build Coastguard Worker   delete global_context;
150*dbb99499SAndroid Build Coastguard Worker   global_context = nullptr;
151*dbb99499SAndroid Build Coastguard Worker }
152*dbb99499SAndroid Build Coastguard Worker 
TEST(AddCustomContext,DuplicateKey)153*dbb99499SAndroid Build Coastguard Worker TEST(AddCustomContext, DuplicateKey) {
154*dbb99499SAndroid Build Coastguard Worker   std::map<std::string, std::string> *&global_context = GetGlobalContext();
155*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(global_context, nullptr);
156*dbb99499SAndroid Build Coastguard Worker 
157*dbb99499SAndroid Build Coastguard Worker   AddCustomContext("foo", "bar");
158*dbb99499SAndroid Build Coastguard Worker   AddCustomContext("foo", "qux");
159*dbb99499SAndroid Build Coastguard Worker 
160*dbb99499SAndroid Build Coastguard Worker   EXPECT_THAT(*global_context,
161*dbb99499SAndroid Build Coastguard Worker               testing::UnorderedElementsAre(testing::Pair("foo", "bar")));
162*dbb99499SAndroid Build Coastguard Worker 
163*dbb99499SAndroid Build Coastguard Worker   delete global_context;
164*dbb99499SAndroid Build Coastguard Worker   global_context = nullptr;
165*dbb99499SAndroid Build Coastguard Worker }
166*dbb99499SAndroid Build Coastguard Worker 
167*dbb99499SAndroid Build Coastguard Worker }  // namespace
168*dbb99499SAndroid Build Coastguard Worker }  // namespace internal
169*dbb99499SAndroid Build Coastguard Worker }  // namespace benchmark
170