Index: core/src/fxcrt/fx_system_unittest.cpp |
diff --git a/core/src/fxcrt/fx_system_unittest.cpp b/core/src/fxcrt/fx_system_unittest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f1a4aee6bdab82ebfa85c0222c4fb8138737a807 |
--- /dev/null |
+++ b/core/src/fxcrt/fx_system_unittest.cpp |
@@ -0,0 +1,212 @@ |
+// Copyright 2015 PDFium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <string> |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "../../../testing/fx_string_testhelpers.h" |
+#include "../../include/fxcrt/fx_system.h" |
+ |
+// Unit test covering cases where PDFium replaces well-known library |
+// functionality on any given platformn. |
+ |
+TEST(fxcrt, FXSYS_itoa) { |
+ const size_t kBase2SentinelLocation = 34; // "-" + 32 digits + null == 34. |
brucedawson
2015/08/07 20:55:49
I think that the preferred abbreviation for the nu
|
+ const size_t kBase10SentinelLocation = 12; // "-" + 10 digits + null == 12. |
+ const size_t kBase16SentinelLocation = 10; // "-" + 8 digits + null == 10. |
+ const size_t kBufLen = 35; |
+ const FX_CHAR kSentinel = 0x7f; |
+ |
+ FX_CHAR buf[kBufLen]; |
+ |
+ FXSYS_itoa(42, buf, 17); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ FXSYS_itoa(42, buf, 1); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ FXSYS_itoa(42, buf, 0); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ FXSYS_itoa(42, buf, -1); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
Lei Zhang
2015/08/07 20:50:12
Maybe write CheckBase16ItoA(int32_t input, const c
Tom Sepez
2015/08/07 21:58:14
Done.
|
+ FXSYS_itoa(std::numeric_limits<int32_t>::min(), buf, 16); |
+ EXPECT_EQ(std::string("-80000000"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_itoa(std::numeric_limits<int32_t>::min(), buf, 10); |
+ EXPECT_EQ(std::string("-2147483648"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_itoa(std::numeric_limits<int32_t>::min(), buf, 2); |
+ EXPECT_EQ(std::string("-10000000000000000000000000000000"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
Lei Zhang
2015/08/07 20:50:12
Repeat of last line?
Tom Sepez
2015/08/07 21:58:14
Done.
|
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_itoa(-1, buf, 16); |
+ EXPECT_EQ(std::string("-1"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_itoa(-1, buf, 10); |
+ EXPECT_EQ(std::string("-1"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_itoa(-1, buf, 2); |
+ EXPECT_EQ(std::string("-1"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_itoa(0, buf, 16); |
+ EXPECT_EQ(std::string("0"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_itoa(0, buf, 10); |
+ EXPECT_EQ(std::string("0"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_itoa(0, buf, 2); |
+ EXPECT_EQ(std::string("0"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_itoa(42, buf, 16); |
+ EXPECT_EQ(std::string("2a"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_itoa(42, buf, 10); |
+ EXPECT_EQ(std::string("42"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_itoa(42, buf, 2); |
+ EXPECT_EQ(std::string("101010"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_itoa(std::numeric_limits<int32_t>::max(), buf, 16); |
+ EXPECT_EQ(std::string("7fffffff"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_itoa(std::numeric_limits<int32_t>::max(), buf, 10); |
+ EXPECT_EQ(std::string("2147483647"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_itoa(std::numeric_limits<int32_t>::max(), buf, 2); |
+ EXPECT_EQ(std::string("1111111111111111111111111111111"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+} |
+ |
+TEST(fxcrt, FXSYS_i64toa) { |
+ const size_t kBufLen = 67; |
+ const size_t kBase2SentinelLocation = 66; // "-" + 64 digits + null. |
+ const size_t kBase10SentinelLocation = 21; // "-" + 19 digits + null. |
+ const size_t kBase16SentinelLocation = 18; // "-" + 16 digits + null. |
+ const FX_CHAR kSentinel = 0x7f; |
+ |
+ FX_CHAR buf[kBufLen]; |
+ |
+ FXSYS_i64toa(42, buf, 17); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ FXSYS_i64toa(42, buf, 1); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ FXSYS_i64toa(42, buf, 0); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ FXSYS_i64toa(42, buf, -1); |
+ EXPECT_EQ(std::string(""), buf); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(std::numeric_limits<int64_t>::min(), buf, 16); |
+ EXPECT_EQ(std::string("-8000000000000000"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(std::numeric_limits<int64_t>::min(), buf, 10); |
+ EXPECT_EQ(std::string("-9223372036854775808"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(std::numeric_limits<int64_t>::min(), buf, 2); |
+ EXPECT_EQ(std::string( |
+ "-1000000000000000000000000000000000000000000000000000000000000000"), |
+ buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(-1, buf, 16); |
+ EXPECT_EQ(std::string("-1"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(-1, buf, 10); |
+ EXPECT_EQ(std::string("-1"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(-1, buf, 2); |
+ EXPECT_EQ(std::string("-1"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(0, buf, 16); |
+ EXPECT_EQ(std::string("0"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(0, buf, 10); |
+ EXPECT_EQ(std::string("0"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(0, buf, 2); |
+ EXPECT_EQ(std::string("0"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(42, buf, 16); |
+ EXPECT_EQ(std::string("2a"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(42, buf, 10); |
+ EXPECT_EQ(std::string("42"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(42, buf, 2); |
+ EXPECT_EQ(std::string("101010"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+ |
+ buf[kBase16SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(std::numeric_limits<int64_t>::max(), buf, 16); |
+ EXPECT_EQ(std::string("7fffffffffffffff"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase16SentinelLocation]); |
+ |
+ buf[kBase10SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(std::numeric_limits<int64_t>::max(), buf, 10); |
+ EXPECT_EQ(std::string("9223372036854775807"), buf); |
+ EXPECT_EQ(kSentinel, buf[kBase10SentinelLocation]); |
+ |
+ buf[kBase2SentinelLocation] = kSentinel; |
+ FXSYS_i64toa(std::numeric_limits<int64_t>::max(), buf, 2); |
+ EXPECT_EQ(std::string( |
+ "111111111111111111111111111111111111111111111111111111111111111"), |
+ buf); |
+ EXPECT_EQ(kSentinel, buf[kBase2SentinelLocation]); |
+} |