string_util_gtest.cc
Go to the documentation of this file.
1 //===---------------------------------------------------------------------===//
2 // statistics_test - Unit tests for src/statistics.cc
3 //===---------------------------------------------------------------------===//
4 
5 #include "../src/string_util.h"
6 #include "../src/internal_macros.h"
7 #include "gtest/gtest.h"
8 
9 namespace {
10 TEST(StringUtilTest, stoul) {
11  {
12  size_t pos = 0;
13  EXPECT_EQ(0ul, benchmark::stoul("0", &pos));
14  EXPECT_EQ(1ul, pos);
15  }
16  {
17  size_t pos = 0;
18  EXPECT_EQ(7ul, benchmark::stoul("7", &pos));
19  EXPECT_EQ(1ul, pos);
20  }
21  {
22  size_t pos = 0;
23  EXPECT_EQ(135ul, benchmark::stoul("135", &pos));
24  EXPECT_EQ(3ul, pos);
25  }
26 #if ULONG_MAX == 0xFFFFFFFFul
27  {
28  size_t pos = 0;
29  EXPECT_EQ(0xFFFFFFFFul, benchmark::stoul("4294967295", &pos));
30  EXPECT_EQ(10ul, pos);
31  }
32 #elif ULONG_MAX == 0xFFFFFFFFFFFFFFFFul
33  {
34  size_t pos = 0;
35  EXPECT_EQ(0xFFFFFFFFFFFFFFFFul, benchmark::stoul("18446744073709551615", &pos));
36  EXPECT_EQ(20ul, pos);
37  }
38 #endif
39  {
40  size_t pos = 0;
41  EXPECT_EQ(10ul, benchmark::stoul("1010", &pos, 2));
42  EXPECT_EQ(4ul, pos);
43  }
44  {
45  size_t pos = 0;
46  EXPECT_EQ(520ul, benchmark::stoul("1010", &pos, 8));
47  EXPECT_EQ(4ul, pos);
48  }
49  {
50  size_t pos = 0;
51  EXPECT_EQ(1010ul, benchmark::stoul("1010", &pos, 10));
52  EXPECT_EQ(4ul, pos);
53  }
54  {
55  size_t pos = 0;
56  EXPECT_EQ(4112ul, benchmark::stoul("1010", &pos, 16));
57  EXPECT_EQ(4ul, pos);
58  }
59  {
60  size_t pos = 0;
61  EXPECT_EQ(0xBEEFul, benchmark::stoul("BEEF", &pos, 16));
62  EXPECT_EQ(4ul, pos);
63  }
64 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
65  {
66  ASSERT_THROW(benchmark::stoul("this is a test"), std::invalid_argument);
67  }
68 #endif
69 }
70 
71 TEST(StringUtilTest, stoi) {
72  {
73  size_t pos = 0;
74  EXPECT_EQ(0, benchmark::stoi("0", &pos));
75  EXPECT_EQ(1ul, pos);
76  }
77  {
78  size_t pos = 0;
79  EXPECT_EQ(-17, benchmark::stoi("-17", &pos));
80  EXPECT_EQ(3ul, pos);
81  }
82  {
83  size_t pos = 0;
84  EXPECT_EQ(1357, benchmark::stoi("1357", &pos));
85  EXPECT_EQ(4ul, pos);
86  }
87  {
88  size_t pos = 0;
89  EXPECT_EQ(10, benchmark::stoi("1010", &pos, 2));
90  EXPECT_EQ(4ul, pos);
91  }
92  {
93  size_t pos = 0;
94  EXPECT_EQ(520, benchmark::stoi("1010", &pos, 8));
95  EXPECT_EQ(4ul, pos);
96  }
97  {
98  size_t pos = 0;
99  EXPECT_EQ(1010, benchmark::stoi("1010", &pos, 10));
100  EXPECT_EQ(4ul, pos);
101  }
102  {
103  size_t pos = 0;
104  EXPECT_EQ(4112, benchmark::stoi("1010", &pos, 16));
105  EXPECT_EQ(4ul, pos);
106  }
107  {
108  size_t pos = 0;
109  EXPECT_EQ(0xBEEF, benchmark::stoi("BEEF", &pos, 16));
110  EXPECT_EQ(4ul, pos);
111  }
112 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
113  {
114  ASSERT_THROW(benchmark::stoi("this is a test"), std::invalid_argument);
115  }
116 #endif
117 }
118 
119 TEST(StringUtilTest, stod) {
120  {
121  size_t pos = 0;
122  EXPECT_EQ(0.0, benchmark::stod("0", &pos));
123  EXPECT_EQ(1ul, pos);
124  }
125  {
126  size_t pos = 0;
127  EXPECT_EQ(-84.0, benchmark::stod("-84", &pos));
128  EXPECT_EQ(3ul, pos);
129  }
130  {
131  size_t pos = 0;
132  EXPECT_EQ(1234.0, benchmark::stod("1234", &pos));
133  EXPECT_EQ(4ul, pos);
134  }
135  {
136  size_t pos = 0;
137  EXPECT_EQ(1.5, benchmark::stod("1.5", &pos));
138  EXPECT_EQ(3ul, pos);
139  }
140  {
141  size_t pos = 0;
142  /* Note: exactly representable as double */
143  EXPECT_EQ(-1.25e+9, benchmark::stod("-1.25e+9", &pos));
144  EXPECT_EQ(8ul, pos);
145  }
146 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
147  {
148  ASSERT_THROW(benchmark::stod("this is a test"), std::invalid_argument);
149  }
150 #endif
151 }
152 
153 TEST(StringUtilTest, StrSplit) {
154  EXPECT_EQ(benchmark::StrSplit("", ','), std::vector<std::string>{});
155  EXPECT_EQ(benchmark::StrSplit("hello", ','),
156  std::vector<std::string>({"hello"}));
157  EXPECT_EQ(benchmark::StrSplit("hello,there,is,more", ','),
158  std::vector<std::string>({"hello", "there", "is", "more"}));
159 }
160 
161 } // end namespace
absl::StrSplit
strings_internal::Splitter< typename strings_internal::SelectDelimiter< Delimiter >::type, AllowEmpty, absl::string_view > StrSplit(strings_internal::ConvertibleToStringView text, Delimiter d)
Definition: abseil-cpp/absl/strings/str_split.h:499
pos
int pos
Definition: libuv/docs/code/tty-gravity/main.c:11
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition: iomgr/time_averaged_stats_test.cc:27
TEST
#define TEST(name, init_size,...)
Definition: arena_test.cc:75
benchmark::StrSplit
std::vector< std::string > StrSplit(const std::string &str, char delim)
Definition: benchmark/src/string_util.cc:166
ASSERT_THROW
#define ASSERT_THROW(statement, expected_exception)
Definition: bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1957


grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:01:25