10#include "build/build_config.h"
11#include "core/fxcrt/compiler_specific.h"
12#include "core/fxcrt/fx_string.h"
13#include "core/fxcrt/fx_system.h"
14#include "testing/gtest/include/gtest/gtest.h"
23const char kSentinel = 0x7f;
25void Check32BitBase16Itoa(int32_t input,
const char* expected_output) {
26 const size_t kBufLen = 11;
29 buf[kBufLen - 1] = kSentinel;
30 FXSYS_itoa(input, buf, 16);
31 EXPECT_STREQ(expected_output, buf);
32 EXPECT_EQ(kSentinel, buf[kBufLen - 1]);
36void Check32BitBase10Itoa(int32_t input,
const char* expected_output) {
37 const size_t kBufLen = 13;
40 buf[kBufLen - 1] = kSentinel;
41 FXSYS_itoa(input, buf, 10);
42 EXPECT_STREQ(expected_output, buf);
43 EXPECT_EQ(kSentinel, buf[kBufLen - 1]);
47void Check32BitBase2Itoa(int32_t input,
const char* expected_output) {
48 const size_t kBufLen = 35;
51 buf[kBufLen - 1] = kSentinel;
52 FXSYS_itoa(input, buf, 2);
53 EXPECT_STREQ(expected_output, buf);
54 EXPECT_EQ(kSentinel, buf[kBufLen - 1]);
58void Check64BitBase16Itoa(int64_t input,
const char* expected_output) {
59 const size_t kBufLen = 19;
62 buf[kBufLen - 1] = kSentinel;
63 FXSYS_i64toa(input, buf, 16);
64 EXPECT_STREQ(expected_output, buf);
65 EXPECT_EQ(kSentinel, buf[kBufLen - 1]);
69void Check64BitBase10Itoa(int64_t input,
const char* expected_output) {
70 const size_t kBufLen = 22;
73 buf[kBufLen - 1] = kSentinel;
74 FXSYS_i64toa(input, buf, 10);
75 EXPECT_STREQ(expected_output, buf);
76 EXPECT_EQ(kSentinel, buf[kBufLen - 1]);
80void Check64BitBase2Itoa(int64_t input,
const char* expected_output) {
81 const size_t kBufLen = 67;
84 buf[kBufLen - 1] = kSentinel;
85 FXSYS_i64toa(input, buf, 2);
86 EXPECT_STREQ(expected_output, buf);
87 EXPECT_EQ(kSentinel, buf[kBufLen - 1]);
93TEST(fxcrt, FXSYS_roundf) {
94 EXPECT_EQ(0, FXSYS_roundf(0.0f));
95 EXPECT_EQ(0, FXSYS_roundf(-0.0f));
96 EXPECT_EQ(0, FXSYS_roundf(0.00001f));
97 EXPECT_EQ(0, FXSYS_roundf(-0.00001f));
98 EXPECT_EQ(3, FXSYS_roundf(3.14159f));
99 EXPECT_EQ(4, FXSYS_roundf(3.5f));
102 EXPECT_EQ(0, FXSYS_roundf(std::numeric_limits<
float>::min()));
103 EXPECT_EQ(0, FXSYS_roundf(-std::numeric_limits<
float>::min()));
108 EXPECT_EQ(-3, FXSYS_roundf(-3.14159f));
109 EXPECT_EQ(-4, FXSYS_roundf(-3.5f));
118 EXPECT_EQ(2147483520, FXSYS_roundf(2.14748352e+9f));
121 EXPECT_EQ(2147483647, FXSYS_roundf(2.14748365e+9f));
123 EXPECT_EQ(2147483647, FXSYS_roundf(2.14748365e+10f));
124 EXPECT_EQ(2147483647, FXSYS_roundf(std::numeric_limits<
float>::max()));
134 EXPECT_EQ(-2147483648, FXSYS_roundf(-2.147483648e+10f));
135 EXPECT_EQ(-2147483648, FXSYS_roundf(-2.147483648e+9f));
136 EXPECT_EQ(-2147483520, FXSYS_roundf(-2.14748352e+9f));
137 EXPECT_EQ(-2147483648, FXSYS_roundf(-std::numeric_limits<
float>::max()));
140 EXPECT_EQ(0, FXSYS_roundf(NAN));
143TEST(fxcrt, FXSYS_round) {
144 EXPECT_EQ(0, FXSYS_round(0.0));
145 EXPECT_EQ(0, FXSYS_round(-0.0));
146 EXPECT_EQ(0, FXSYS_round(0.00001));
147 EXPECT_EQ(0, FXSYS_round(-0.00001));
148 EXPECT_EQ(3, FXSYS_round(3.14159));
149 EXPECT_EQ(4, FXSYS_round(3.5));
152 EXPECT_EQ(0, FXSYS_round(std::numeric_limits<
double>::min()));
153 EXPECT_EQ(0, FXSYS_round(-std::numeric_limits<
double>::min()));
158 EXPECT_EQ(-3, FXSYS_round(-3.14159));
159 EXPECT_EQ(-4, FXSYS_round(-3.5));
169 EXPECT_EQ(2147483647, FXSYS_round(2.147483647e+9));
172 EXPECT_EQ(2147483647, FXSYS_round(2.14748365e+9));
174 EXPECT_EQ(2147483647, FXSYS_round(2.14748365e+10));
175 EXPECT_EQ(2147483647, FXSYS_round(std::numeric_limits<
double>::max()));
185 EXPECT_EQ(-2147483648, FXSYS_round(-2.1474836479999998e+9));
186 EXPECT_EQ(-2147483648, FXSYS_round(-2.147483648e+9));
187 EXPECT_EQ(-2147483648, FXSYS_round(-2.147483648e+10));
188 EXPECT_EQ(-2147483648, FXSYS_round(-std::numeric_limits<
double>::max()));
191 EXPECT_EQ(0, FXSYS_round(NAN));
194TEST(fxcrt, FXSYS_itoa_InvalidRadix) {
197 FXSYS_itoa(42, buf, 17);
198 EXPECT_STREQ(
"", buf);
200 FXSYS_itoa(42, buf, 1);
201 EXPECT_STREQ(
"", buf);
203 FXSYS_itoa(42, buf, 0);
204 EXPECT_STREQ(
"", buf);
206 FXSYS_itoa(42, buf, -1);
207 EXPECT_STREQ(
"", buf);
210TEST(fxcrt, FXSYS_itoa) {
211 Check32BitBase16Itoa(std::numeric_limits<int32_t>::min(),
"-80000000");
212 Check32BitBase10Itoa(std::numeric_limits<int32_t>::min(),
"-2147483648");
213 Check32BitBase2Itoa(std::numeric_limits<int32_t>::min(),
214 "-10000000000000000000000000000000");
216 Check32BitBase16Itoa(-1,
"-1");
217 Check32BitBase10Itoa(-1,
"-1");
218 Check32BitBase2Itoa(-1,
"-1");
220 Check32BitBase16Itoa(0,
"0");
221 Check32BitBase10Itoa(0,
"0");
222 Check32BitBase2Itoa(0,
"0");
224 Check32BitBase16Itoa(42,
"2a");
225 Check32BitBase10Itoa(42,
"42");
226 Check32BitBase2Itoa(42,
"101010");
228 Check32BitBase16Itoa(std::numeric_limits<int32_t>::max(),
"7fffffff");
229 Check32BitBase10Itoa(std::numeric_limits<int32_t>::max(),
"2147483647");
230 Check32BitBase2Itoa(std::numeric_limits<int32_t>::max(),
231 "1111111111111111111111111111111");
234TEST(fxcrt, FXSYS_i64toa_InvalidRadix) {
237 FXSYS_i64toa(42, buf, 17);
238 EXPECT_STREQ(
"", buf);
240 FXSYS_i64toa(42, buf, 1);
241 EXPECT_STREQ(
"", buf);
243 FXSYS_i64toa(42, buf, 0);
244 EXPECT_STREQ(
"", buf);
246 FXSYS_i64toa(42, buf, -1);
247 EXPECT_STREQ(
"", buf);
250TEST(fxcrt, FXSYS_i64toa) {
251 Check64BitBase16Itoa(std::numeric_limits<int64_t>::min(),
252 "-8000000000000000");
253 Check64BitBase10Itoa(std::numeric_limits<int64_t>::min(),
254 "-9223372036854775808");
256 std::numeric_limits<int64_t>::min(),
257 "-1000000000000000000000000000000000000000000000000000000000000000");
259 Check64BitBase16Itoa(-1,
"-1");
260 Check64BitBase10Itoa(-1,
"-1");
261 Check64BitBase2Itoa(-1,
"-1");
263 Check64BitBase16Itoa(0,
"0");
264 Check64BitBase10Itoa(0,
"0");
265 Check64BitBase2Itoa(0,
"0");
267 Check64BitBase16Itoa(42,
"2a");
268 Check64BitBase10Itoa(42,
"42");
269 Check64BitBase2Itoa(42,
"101010");
271 Check64BitBase16Itoa(std::numeric_limits<int64_t>::max(),
"7fffffffffffffff");
272 Check64BitBase10Itoa(std::numeric_limits<int64_t>::max(),
273 "9223372036854775807");
275 std::numeric_limits<int64_t>::max(),
276 "111111111111111111111111111111111111111111111111111111111111111");
282 struct tm good_time = {};
283 good_time.tm_year = 74;
284 good_time.tm_mon = 7;
285 good_time.tm_mday = 9;
286 good_time.tm_hour = 11;
287 good_time.tm_min = 59;
288 good_time.tm_sec = 59;
290 wchar_t buf[100] = {};
292 L"%Y-%m-%dT%H:%M:%S", &good_time)));
293 EXPECT_STREQ(L"1974-08-09T11:59:59", buf);
296 struct tm year_time = {};
297 year_time.tm_mon = 7;
298 year_time.tm_mday = 9;
299 year_time.tm_hour = 11;
300 year_time.tm_min = 59;
301 year_time.tm_sec = 59;
303 for (
int year = -2500; year <= 8500; ++year) {
304 year_time.tm_year = year;
305 wchar_t year_buf[100] = {};
307 L"%Y-%m-%dT%H:%M:%S", &year_time));
311 struct tm bad_time = {};
312 bad_time.tm_year = -1;
313 bad_time.tm_mon = -1;
314 bad_time.tm_mday = -1;
315 bad_time.tm_hour = -1;
316 bad_time.tm_min = -1;
317 bad_time.tm_sec = -1;
320 FXSYS_wcsftime(buf, std::size(buf), L"%y-%m-%dT%H:%M:%S", &bad_time));
323 struct tm feb_time = {};
324 feb_time.tm_year = 115;
326 feb_time.tm_mday = 30;
327 feb_time.tm_hour = 12;
328 feb_time.tm_min = 00;
329 feb_time.tm_sec = 00;
332 FXSYS_wcsftime(buf, std::size(buf), L"%y-%m-%dT%H:%M:%S", &feb_time));
336 EXPECT_EQ(0, FXSYS_atoi(
""));
337 EXPECT_EQ(0, FXSYS_atoi(
"0"));
338 EXPECT_EQ(-1, FXSYS_atoi(
"-1"));
339 EXPECT_EQ(2345, FXSYS_atoi(
"2345"));
340 EXPECT_EQ(-2147483647, FXSYS_atoi(
"-2147483647"));
342 EXPECT_EQ(-2345, FXSYS_atoi(
"-2345"));
343 EXPECT_EQ(2345, FXSYS_atoi(
"+2345"));
345 EXPECT_EQ(2147483647, FXSYS_atoi(
"2147483647"));
348 EXPECT_EQ(-2147483647 - 1, FXSYS_atoi(
"-2147483648"));
350 EXPECT_EQ(9, FXSYS_atoi(
"9x9"));
353 EXPECT_EQ(2147483647, FXSYS_atoi(
"2147483623423412348"));
354 EXPECT_EQ(2147483647, FXSYS_atoi(
"2147483648"));
355 EXPECT_EQ(-2147483647 - 1, FXSYS_atoi(
"-2147483650"));
359 EXPECT_EQ(0, FXSYS_atoi64(
""));
360 EXPECT_EQ(0, FXSYS_atoi64(
"0"));
361 EXPECT_EQ(-1, FXSYS_atoi64(
"-1"));
362 EXPECT_EQ(2345, FXSYS_atoi64(
"2345"));
363 EXPECT_EQ(-9223372036854775807LL, FXSYS_atoi64(
"-9223372036854775807"));
365 EXPECT_EQ(-2345, FXSYS_atoi64(
"-2345"));
366 EXPECT_EQ(2345, FXSYS_atoi64(
"+2345"));
368 EXPECT_EQ(9223372036854775807LL, FXSYS_atoi64(
"9223372036854775807"));
370 EXPECT_EQ(-9223372036854775807LL - 1LL, FXSYS_atoi64(
"-9223372036854775808"));
372 EXPECT_EQ(9, FXSYS_atoi64(
"9x9"));
375 EXPECT_EQ(9223372036854775807LL, FXSYS_atoi64(
"922337203685471234123475807"));
376 EXPECT_EQ(9223372036854775807LL, FXSYS_atoi64(
"9223372036854775808"));
377 EXPECT_EQ(-9223372036854775807LL - 1LL, FXSYS_atoi64(
"-9223372036854775810"));
381 EXPECT_EQ(0, FXSYS_wtoi(L""));
382 EXPECT_EQ(0, FXSYS_wtoi(L"0"));
383 EXPECT_EQ(-1, FXSYS_wtoi(L"-1"));
384 EXPECT_EQ(2345, FXSYS_wtoi(L"2345"));
385 EXPECT_EQ(-2147483647, FXSYS_wtoi(L"-2147483647"));
387 EXPECT_EQ(2147483647, FXSYS_wtoi(L"2147483647"));
389 EXPECT_EQ(-2147483647 - 1, FXSYS_wtoi(L"-2147483648"));
392 EXPECT_EQ(2147483647, FXSYS_wtoi(L"2147483623423412348"));
393 EXPECT_EQ(2147483647, FXSYS_wtoi(L"2147483648"));
394 EXPECT_EQ(-2147483647 - 1, FXSYS_wtoi(L"-2147483652"));
398 EXPECT_EQ(0u, FXSYS_atoui(
""));
399 EXPECT_EQ(0u, FXSYS_atoui(
"0"));
400 EXPECT_EQ(4294967295, FXSYS_atoui(
"-1"));
401 EXPECT_EQ(2345u, FXSYS_atoui(
"2345"));
403 EXPECT_EQ(4294964951, FXSYS_atoui(
"-2345"));
404 EXPECT_EQ(2345u, FXSYS_atoui(
"+2345"));
406 EXPECT_EQ(4294967295, FXSYS_atoui(
"4294967295"));
407 EXPECT_EQ(9u, FXSYS_atoui(
"9x9"));
410 EXPECT_EQ(4294967295, FXSYS_atoui(
"2147483623423412348"));
411 EXPECT_EQ(4294967295, FXSYS_atoui(
"4294967296"));
412 EXPECT_EQ(4294967295, FXSYS_atoui(
"-4294967345"));
TEST(FXCRYPT, CryptToBase16)
int32_t FXSYS_atoi(const char *str)
uint32_t FXSYS_atoui(const char *str)
int32_t FXSYS_wtoi(const wchar_t *str)
int64_t FXSYS_atoi64(const char *str)