Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: mojo/edk/util/string_number_conversions_unittest.cc

Issue 1492623002: EDK: Add functions for converting between strings and numbers. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "mojo/edk/util/string_number_conversions.h"
6
7 #include <stdint.h>
8
9 #include <limits>
10
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace mojo {
14 namespace util {
15 namespace {
16
17 TEST(StringNumberConversionsTest, NumberToString_Basic) {
18 EXPECT_EQ("0", NumberToString<int32_t>(static_cast<int32_t>(0)));
19 EXPECT_EQ("123", NumberToString<int32_t>(static_cast<int32_t>(123)));
20 EXPECT_EQ("-456", NumberToString<int32_t>(static_cast<int32_t>(-456)));
21
22 EXPECT_EQ("0", NumberToString<uint32_t>(static_cast<uint32_t>(0)));
23 EXPECT_EQ("123", NumberToString<uint32_t>(static_cast<uint32_t>(123)));
24
25 EXPECT_EQ("0", NumberToString<int>(0));
26 EXPECT_EQ("123", NumberToString<int>(123));
27 EXPECT_EQ("-456", NumberToString<int>(-456));
28
29 EXPECT_EQ("0", NumberToString<unsigned>(0u));
30 EXPECT_EQ("123", NumberToString<unsigned>(123u));
31
32 EXPECT_EQ("1", NumberToString<int>(1));
33 EXPECT_EQ("12", NumberToString<int>(12));
34 EXPECT_EQ("123", NumberToString<int>(123));
35 EXPECT_EQ("1234", NumberToString<int>(1234));
36 EXPECT_EQ("12345", NumberToString<int>(12345));
37 EXPECT_EQ("123456", NumberToString<int>(123456));
38 EXPECT_EQ("1234567", NumberToString<int>(1234567));
39 EXPECT_EQ("12345678", NumberToString<int>(12345678));
40 EXPECT_EQ("123456789", NumberToString<int>(123456789));
41 EXPECT_EQ("-1", NumberToString<int>(-1));
42 EXPECT_EQ("-12", NumberToString<int>(-12));
43 EXPECT_EQ("-123", NumberToString<int>(-123));
44 EXPECT_EQ("-1234", NumberToString<int>(-1234));
45 EXPECT_EQ("-12345", NumberToString<int>(-12345));
46 EXPECT_EQ("-123456", NumberToString<int>(-123456));
47 EXPECT_EQ("-1234567", NumberToString<int>(-1234567));
48 EXPECT_EQ("-12345678", NumberToString<int>(-12345678));
49 EXPECT_EQ("-123456789", NumberToString<int>(-123456789));
50 }
51
52 TEST(StringNumberConversionsTest, NumberToString_StdintTypes) {
53 EXPECT_EQ("0", NumberToString<int8_t>(static_cast<int8_t>(0)));
54 EXPECT_EQ("127", NumberToString<int8_t>(std::numeric_limits<int8_t>::max()));
55 EXPECT_EQ("-128", NumberToString<int8_t>(std::numeric_limits<int8_t>::min()));
56
57 EXPECT_EQ("0", NumberToString<uint8_t>(static_cast<uint8_t>(0)));
58 EXPECT_EQ("255",
59 NumberToString<uint8_t>(std::numeric_limits<uint8_t>::max()));
60
61 EXPECT_EQ("0", NumberToString<int16_t>(static_cast<int16_t>(0)));
62 EXPECT_EQ("32767",
63 NumberToString<int16_t>(std::numeric_limits<int16_t>::max()));
64 EXPECT_EQ("-32768",
65 NumberToString<int16_t>(std::numeric_limits<int16_t>::min()));
66
67 EXPECT_EQ("0", NumberToString<uint16_t>(static_cast<uint16_t>(0)));
68 EXPECT_EQ("65535",
69 NumberToString<uint16_t>(std::numeric_limits<uint16_t>::max()));
70
71 EXPECT_EQ("0", NumberToString<int32_t>(static_cast<int32_t>(0)));
72 EXPECT_EQ("2147483647",
73 NumberToString<int32_t>(std::numeric_limits<int32_t>::max()));
74 EXPECT_EQ("-2147483648",
75 NumberToString<int32_t>(std::numeric_limits<int32_t>::min()));
76
77 EXPECT_EQ("0", NumberToString<uint32_t>(static_cast<uint32_t>(0)));
78 EXPECT_EQ("4294967295",
79 NumberToString<uint32_t>(std::numeric_limits<uint32_t>::max()));
80
81 EXPECT_EQ("0", NumberToString<int64_t>(static_cast<int64_t>(0)));
82 EXPECT_EQ("9223372036854775807",
83 NumberToString<int64_t>(std::numeric_limits<int64_t>::max()));
84 EXPECT_EQ("-9223372036854775808",
85 NumberToString<int64_t>(std::numeric_limits<int64_t>::min()));
86
87 EXPECT_EQ("0", NumberToString<uint64_t>(static_cast<uint64_t>(0)));
88 EXPECT_EQ("18446744073709551615",
89 NumberToString<uint64_t>(std::numeric_limits<uint64_t>::max()));
90 }
91
92 TEST(StringNumberConversionsTest, StringToNumberWithError_Basic) {
93 {
94 int32_t number = 42;
95 EXPECT_TRUE(StringToNumberWithError<int32_t>("0", &number));
96 EXPECT_EQ(0, number);
97 EXPECT_TRUE(StringToNumberWithError<int32_t>("123", &number));
98 EXPECT_EQ(123, number);
99 EXPECT_TRUE(StringToNumberWithError<int32_t>("-456", &number));
100 EXPECT_EQ(-456, number);
101 }
102
103 {
104 uint32_t number = 42u;
105 EXPECT_TRUE(StringToNumberWithError<uint32_t>("0", &number));
106 EXPECT_EQ(0u, number);
107 EXPECT_TRUE(StringToNumberWithError<uint32_t>("123", &number));
108 EXPECT_EQ(123u, number);
109 }
110
111 {
112 int number = 42;
113 EXPECT_TRUE(StringToNumberWithError<int>("0", &number));
114 EXPECT_EQ(0, number);
115 EXPECT_TRUE(StringToNumberWithError<int>("123", &number));
116 EXPECT_EQ(123, number);
117 EXPECT_TRUE(StringToNumberWithError<int>("-456", &number));
118 EXPECT_EQ(-456, number);
119 }
120
121 {
122 unsigned number = 42u;
123 EXPECT_TRUE(StringToNumberWithError<unsigned>("0", &number));
124 EXPECT_EQ(0u, number);
125 EXPECT_TRUE(StringToNumberWithError<unsigned>("123", &number));
126 EXPECT_EQ(123u, number);
127 }
128 }
129
130 TEST(StringNumberConversionsTest, StringToNumberWithError_Errors) {
131 {
132 int32_t number = 42;
133 EXPECT_FALSE(StringToNumberWithError<int32_t>("", &number));
134 EXPECT_FALSE(StringToNumberWithError<int32_t>("/", &number));
135 EXPECT_FALSE(StringToNumberWithError<int32_t>(":", &number));
136 EXPECT_FALSE(StringToNumberWithError<int32_t>("A", &number));
137 EXPECT_FALSE(StringToNumberWithError<int32_t>("0x", &number));
138 EXPECT_FALSE(StringToNumberWithError<int32_t>("123x", &number));
139 EXPECT_FALSE(StringToNumberWithError<int32_t>("+123", &number));
140 EXPECT_FALSE(StringToNumberWithError<int32_t>("999999999999999", &number));
141 EXPECT_EQ(42, number);
142 }
143
144 {
145 uint32_t number = 42u;
146 EXPECT_FALSE(StringToNumberWithError<uint32_t>("", &number));
147 EXPECT_FALSE(StringToNumberWithError<uint32_t>("/", &number));
148 EXPECT_FALSE(StringToNumberWithError<uint32_t>(":", &number));
149 EXPECT_FALSE(StringToNumberWithError<uint32_t>("A", &number));
150 EXPECT_FALSE(StringToNumberWithError<uint32_t>("0x", &number));
151 EXPECT_FALSE(StringToNumberWithError<uint32_t>("123x", &number));
152 EXPECT_FALSE(StringToNumberWithError<uint32_t>("+123", &number));
153 EXPECT_FALSE(StringToNumberWithError<uint32_t>("999999999999999", &number));
154 EXPECT_FALSE(StringToNumberWithError<uint32_t>("-123", &number));
155 EXPECT_FALSE(StringToNumberWithError<uint32_t>("-0", &number));
156 EXPECT_EQ(42u, number);
157 }
158 }
159
160 TEST(StringNumberConversionsTest, StringToNumberWithError_LeadingZeros) {
161 {
162 int32_t number = 42;
163 EXPECT_TRUE(StringToNumberWithError<int32_t>("00", &number));
164 EXPECT_EQ(0, number);
165 EXPECT_TRUE(StringToNumberWithError<int32_t>("0123", &number));
166 EXPECT_EQ(123, number);
167 EXPECT_TRUE(StringToNumberWithError<int32_t>("-0", &number));
168 EXPECT_EQ(0, number);
169 EXPECT_TRUE(StringToNumberWithError<int32_t>("-00", &number));
170 EXPECT_EQ(0, number);
171 EXPECT_TRUE(StringToNumberWithError<int32_t>("-0456", &number));
172 EXPECT_EQ(-456, number);
173 }
174
175 {
176 uint32_t number = 42u;
177 EXPECT_TRUE(StringToNumberWithError<uint32_t>("00", &number));
178 EXPECT_EQ(0u, number);
179 EXPECT_TRUE(StringToNumberWithError<uint32_t>("0123", &number));
180 EXPECT_EQ(123u, number);
181 }
182 }
183
184 TEST(StringNumberConversionsTest, StringToNumberWithError_StdintTypes) {
185 {
186 int8_t number = 42;
187 EXPECT_TRUE(StringToNumberWithError<int8_t>("0", &number));
188 EXPECT_EQ(0, number);
189 EXPECT_TRUE(StringToNumberWithError<int8_t>("127", &number));
190 EXPECT_EQ(std::numeric_limits<int8_t>::max(), number);
191 EXPECT_TRUE(StringToNumberWithError<int8_t>("-128", &number));
192 EXPECT_EQ(std::numeric_limits<int8_t>::min(), number);
193 EXPECT_FALSE(StringToNumberWithError<int8_t>("128", &number));
194 EXPECT_FALSE(StringToNumberWithError<int8_t>("-129", &number));
195 }
196
197 {
198 uint8_t number = 42;
199 EXPECT_TRUE(StringToNumberWithError<uint8_t>("0", &number));
200 EXPECT_EQ(0u, number);
201 EXPECT_TRUE(StringToNumberWithError<uint8_t>("255", &number));
202 EXPECT_EQ(std::numeric_limits<uint8_t>::max(), number);
203 EXPECT_FALSE(StringToNumberWithError<uint8_t>("256", &number));
204 EXPECT_FALSE(StringToNumberWithError<uint8_t>("-1", &number));
205 }
206
207 {
208 int16_t number = 42;
209 EXPECT_TRUE(StringToNumberWithError<int16_t>("0", &number));
210 EXPECT_EQ(0, number);
211 EXPECT_TRUE(StringToNumberWithError<int16_t>("32767", &number));
212 EXPECT_EQ(std::numeric_limits<int16_t>::max(), number);
213 EXPECT_TRUE(StringToNumberWithError<int16_t>("-32768", &number));
214 EXPECT_EQ(std::numeric_limits<int16_t>::min(), number);
215 EXPECT_FALSE(StringToNumberWithError<int16_t>("32768", &number));
216 EXPECT_FALSE(StringToNumberWithError<int16_t>("-32769", &number));
217 }
218
219 {
220 uint16_t number = 42;
221 EXPECT_TRUE(StringToNumberWithError<uint16_t>("0", &number));
222 EXPECT_EQ(0u, number);
223 EXPECT_TRUE(StringToNumberWithError<uint16_t>("65535", &number));
224 EXPECT_EQ(std::numeric_limits<uint16_t>::max(), number);
225 EXPECT_FALSE(StringToNumberWithError<uint16_t>("65536", &number));
226 EXPECT_FALSE(StringToNumberWithError<uint16_t>("-1", &number));
227 }
228
229 {
230 int32_t number = 42;
231 EXPECT_TRUE(StringToNumberWithError<int32_t>("0", &number));
232 EXPECT_EQ(0, number);
233 EXPECT_TRUE(StringToNumberWithError<int32_t>("2147483647", &number));
234 EXPECT_EQ(std::numeric_limits<int32_t>::max(), number);
235 EXPECT_TRUE(StringToNumberWithError<int32_t>("-2147483648", &number));
236 EXPECT_EQ(std::numeric_limits<int32_t>::min(), number);
237 EXPECT_FALSE(StringToNumberWithError<int32_t>("2147483648", &number));
238 EXPECT_FALSE(StringToNumberWithError<int32_t>("-2147483649", &number));
239 }
240
241 {
242 uint32_t number = 42;
243 EXPECT_TRUE(StringToNumberWithError<uint32_t>("0", &number));
244 EXPECT_EQ(0u, number);
245 EXPECT_TRUE(StringToNumberWithError<uint32_t>("4294967295", &number));
246 EXPECT_EQ(std::numeric_limits<uint32_t>::max(), number);
247 EXPECT_FALSE(StringToNumberWithError<uint32_t>("4294967296", &number));
248 EXPECT_FALSE(StringToNumberWithError<uint32_t>("-1", &number));
249 }
250
251 {
252 int64_t number = 42;
253 EXPECT_TRUE(StringToNumberWithError<int64_t>("0", &number));
254 EXPECT_EQ(0, number);
255 EXPECT_TRUE(
256 StringToNumberWithError<int64_t>("9223372036854775807", &number));
257 EXPECT_EQ(std::numeric_limits<int64_t>::max(), number);
258 EXPECT_TRUE(
259 StringToNumberWithError<int64_t>("-9223372036854775808", &number));
260 EXPECT_EQ(std::numeric_limits<int64_t>::min(), number);
261 EXPECT_FALSE(
262 StringToNumberWithError<int64_t>("9223372036854775808", &number));
263 EXPECT_FALSE(
264 StringToNumberWithError<int64_t>("-9223372036854775809", &number));
265 }
266
267 {
268 uint64_t number = 42;
269 EXPECT_TRUE(StringToNumberWithError<uint64_t>("0", &number));
270 EXPECT_EQ(0u, number);
271 EXPECT_TRUE(
272 StringToNumberWithError<uint64_t>("18446744073709551615", &number));
273 EXPECT_EQ(std::numeric_limits<uint64_t>::max(), number);
274 EXPECT_FALSE(
275 StringToNumberWithError<uint64_t>("18446744073709551616", &number));
276 EXPECT_FALSE(StringToNumberWithError<uint64_t>("-1", &number));
277 }
278 }
279
280 TEST(StringNumberConversionsTest, StringToNumber_Basic) {
281 EXPECT_EQ(0, StringToNumber<int32_t>("0"));
282 EXPECT_EQ(123, StringToNumber<int32_t>("123"));
283 EXPECT_EQ(-456, StringToNumber<int32_t>("-456"));
284
285 EXPECT_EQ(0u, StringToNumber<uint32_t>("0"));
286 EXPECT_EQ(123u, StringToNumber<uint32_t>("123"));
287
288 EXPECT_EQ(0, StringToNumber<int>("0"));
289 EXPECT_EQ(123, StringToNumber<int>("123"));
290 EXPECT_EQ(-456, StringToNumber<int>("-456"));
291
292 EXPECT_EQ(0u, StringToNumber<unsigned>("0"));
293 EXPECT_EQ(123u, StringToNumber<unsigned>("123"));
294 }
295
296 TEST(StringNumberConversionsTest, StringToNumber_Errors) {
297 EXPECT_EQ(0, StringToNumber<int32_t>(""));
298 EXPECT_EQ(0, StringToNumber<int32_t>("/"));
299 EXPECT_EQ(0, StringToNumber<int32_t>(":"));
300 EXPECT_EQ(0, StringToNumber<int32_t>("A"));
301 EXPECT_EQ(0, StringToNumber<int32_t>("0x"));
302 EXPECT_EQ(0, StringToNumber<int32_t>("123x"));
303 EXPECT_EQ(0, StringToNumber<int32_t>("+123"));
304 EXPECT_EQ(0, StringToNumber<int32_t>("999999999999999"));
305
306 EXPECT_EQ(0u, StringToNumber<uint32_t>(""));
307 EXPECT_EQ(0u, StringToNumber<uint32_t>("/"));
308 EXPECT_EQ(0u, StringToNumber<uint32_t>(":"));
309 EXPECT_EQ(0u, StringToNumber<uint32_t>("A"));
310 EXPECT_EQ(0u, StringToNumber<uint32_t>("0x"));
311 EXPECT_EQ(0u, StringToNumber<uint32_t>("123x"));
312 EXPECT_EQ(0u, StringToNumber<uint32_t>("+123"));
313 EXPECT_EQ(0u, StringToNumber<uint32_t>("999999999999999"));
314 }
315
316 } // namespace
317 } // namespace util
318 } // namespace mojo
OLDNEW
« mojo/edk/util/string_number_conversions.h ('K') | « mojo/edk/util/string_number_conversions.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698