• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===---------------------------------------------------------------------===//
2 // statistics_test - Unit tests for src/statistics.cc
3 //===---------------------------------------------------------------------===//
4 
5 #include <tuple>
6 
7 #include "../src/internal_macros.h"
8 #include "../src/string_util.h"
9 #include "gtest/gtest.h"
10 
11 namespace {
TEST(StringUtilTest,stoul)12 TEST(StringUtilTest, stoul) {
13   {
14     size_t pos = 0;
15     EXPECT_EQ(0ul, benchmark::stoul("0", &pos));
16     EXPECT_EQ(1ul, pos);
17   }
18   {
19     size_t pos = 0;
20     EXPECT_EQ(7ul, benchmark::stoul("7", &pos));
21     EXPECT_EQ(1ul, pos);
22   }
23   {
24     size_t pos = 0;
25     EXPECT_EQ(135ul, benchmark::stoul("135", &pos));
26     EXPECT_EQ(3ul, pos);
27   }
28 #if ULONG_MAX == 0xFFFFFFFFul
29   {
30     size_t pos = 0;
31     EXPECT_EQ(0xFFFFFFFFul, benchmark::stoul("4294967295", &pos));
32     EXPECT_EQ(10ul, pos);
33   }
34 #elif ULONG_MAX == 0xFFFFFFFFFFFFFFFFul
35   {
36     size_t pos = 0;
37     EXPECT_EQ(0xFFFFFFFFFFFFFFFFul,
38               benchmark::stoul("18446744073709551615", &pos));
39     EXPECT_EQ(20ul, pos);
40   }
41 #endif
42   {
43     size_t pos = 0;
44     EXPECT_EQ(10ul, benchmark::stoul("1010", &pos, 2));
45     EXPECT_EQ(4ul, pos);
46   }
47   {
48     size_t pos = 0;
49     EXPECT_EQ(520ul, benchmark::stoul("1010", &pos, 8));
50     EXPECT_EQ(4ul, pos);
51   }
52   {
53     size_t pos = 0;
54     EXPECT_EQ(1010ul, benchmark::stoul("1010", &pos, 10));
55     EXPECT_EQ(4ul, pos);
56   }
57   {
58     size_t pos = 0;
59     EXPECT_EQ(4112ul, benchmark::stoul("1010", &pos, 16));
60     EXPECT_EQ(4ul, pos);
61   }
62   {
63     size_t pos = 0;
64     EXPECT_EQ(0xBEEFul, benchmark::stoul("BEEF", &pos, 16));
65     EXPECT_EQ(4ul, pos);
66   }
67 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
68   {
69     ASSERT_THROW(std::ignore = benchmark::stoul("this is a test"),
70                  std::invalid_argument);
71   }
72 #endif
73 }
74 
TEST(StringUtilTest,stoi)75 TEST(StringUtilTest, stoi){{size_t pos = 0;
76 EXPECT_EQ(0, benchmark::stoi("0", &pos));
77 EXPECT_EQ(1ul, pos);
78 }  // namespace
79 {
80   size_t pos = 0;
81   EXPECT_EQ(-17, benchmark::stoi("-17", &pos));
82   EXPECT_EQ(3ul, pos);
83 }
84 {
85   size_t pos = 0;
86   EXPECT_EQ(1357, benchmark::stoi("1357", &pos));
87   EXPECT_EQ(4ul, pos);
88 }
89 {
90   size_t pos = 0;
91   EXPECT_EQ(10, benchmark::stoi("1010", &pos, 2));
92   EXPECT_EQ(4ul, pos);
93 }
94 {
95   size_t pos = 0;
96   EXPECT_EQ(520, benchmark::stoi("1010", &pos, 8));
97   EXPECT_EQ(4ul, pos);
98 }
99 {
100   size_t pos = 0;
101   EXPECT_EQ(1010, benchmark::stoi("1010", &pos, 10));
102   EXPECT_EQ(4ul, pos);
103 }
104 {
105   size_t pos = 0;
106   EXPECT_EQ(4112, benchmark::stoi("1010", &pos, 16));
107   EXPECT_EQ(4ul, pos);
108 }
109 {
110   size_t pos = 0;
111   EXPECT_EQ(0xBEEF, benchmark::stoi("BEEF", &pos, 16));
112   EXPECT_EQ(4ul, pos);
113 }
114 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
115 {
116   ASSERT_THROW(std::ignore = benchmark::stoi("this is a test"),
117                std::invalid_argument);
118 }
119 #endif
120 }
121 
TEST(StringUtilTest,stod)122 TEST(StringUtilTest, stod){{size_t pos = 0;
123 EXPECT_EQ(0.0, benchmark::stod("0", &pos));
124 EXPECT_EQ(1ul, pos);
125 }
126 {
127   size_t pos = 0;
128   EXPECT_EQ(-84.0, benchmark::stod("-84", &pos));
129   EXPECT_EQ(3ul, pos);
130 }
131 {
132   size_t pos = 0;
133   EXPECT_EQ(1234.0, benchmark::stod("1234", &pos));
134   EXPECT_EQ(4ul, pos);
135 }
136 {
137   size_t pos = 0;
138   EXPECT_EQ(1.5, benchmark::stod("1.5", &pos));
139   EXPECT_EQ(3ul, pos);
140 }
141 {
142   size_t pos = 0;
143   /* Note: exactly representable as double */
144   EXPECT_EQ(-1.25e+9, benchmark::stod("-1.25e+9", &pos));
145   EXPECT_EQ(8ul, pos);
146 }
147 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
148 {
149   ASSERT_THROW(std::ignore = benchmark::stod("this is a test"),
150                std::invalid_argument);
151 }
152 #endif
153 }
154 
TEST(StringUtilTest,StrSplit)155 TEST(StringUtilTest, StrSplit) {
156   EXPECT_EQ(benchmark::StrSplit("", ','), std::vector<std::string>{});
157   EXPECT_EQ(benchmark::StrSplit("hello", ','),
158             std::vector<std::string>({"hello"}));
159   EXPECT_EQ(benchmark::StrSplit("hello,there,is,more", ','),
160             std::vector<std::string>({"hello", "there", "is", "more"}));
161 }
162 
163 }  // end namespace
164