diff options
author | 2016-04-05 14:42:45 -0800 | |
---|---|---|
committer | 2016-04-05 15:51:36 -0700 | |
commit | 1d004f969867ee38c5398d68574e141ce8de86cb (patch) | |
tree | a10822e17b47992312f87043e508b967a7519569 /tensorflow/core/lib/strings/numbers_test.cc | |
parent | a8f0dd875b86e0dcefbd978441f79c51f3cc241e (diff) |
Add safe_strtou32, safe_strtou64, and safe_strtod to numbers.h.
Change: 119099796
Diffstat (limited to 'tensorflow/core/lib/strings/numbers_test.cc')
-rw-r--r-- | tensorflow/core/lib/strings/numbers_test.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/tensorflow/core/lib/strings/numbers_test.cc b/tensorflow/core/lib/strings/numbers_test.cc index 88acd57852..52b77ac2f9 100644 --- a/tensorflow/core/lib/strings/numbers_test.cc +++ b/tensorflow/core/lib/strings/numbers_test.cc @@ -119,6 +119,39 @@ TEST(safe_strto32, Int32s) { EXPECT_EQ(false, safe_strto32(StringPiece(nullptr, 0), &result)); } +TEST(safe_strtou32, UInt32s) { + uint32 result; + + EXPECT_TRUE(safe_strtou32("0", &result)); + EXPECT_EQ(0, result); + EXPECT_TRUE(safe_strtou32("1", &result)); + EXPECT_EQ(1, result); + EXPECT_TRUE(safe_strtou32("123", &result)); + EXPECT_EQ(123, result); + EXPECT_TRUE(safe_strtou32("4294967295", &result)); + EXPECT_EQ(4294967295, result); + + // Invalid argument + EXPECT_FALSE(safe_strtou32(" 132as ", &result)); + EXPECT_FALSE(safe_strtou32(" 132.2 ", &result)); + EXPECT_FALSE(safe_strtou32(" -", &result)); + EXPECT_FALSE(safe_strtou32("", &result)); + EXPECT_FALSE(safe_strtou32(" ", &result)); + EXPECT_FALSE(safe_strtou32("123 a", &result)); + EXPECT_FALSE(safe_strtou32("123 456", &result)); + + // Overflow + EXPECT_FALSE(safe_strtou32("4294967296", &result)); + EXPECT_FALSE(safe_strtou32("-1", &result)); + + // Check that the StringPiece's length is respected. + EXPECT_TRUE(safe_strtou32(StringPiece("123", 1), &result)); + EXPECT_EQ(1, result); + EXPECT_TRUE(safe_strtou32(StringPiece(" 123", 3), &result)); + EXPECT_EQ(12, result); + EXPECT_FALSE(safe_strtou32(StringPiece(nullptr, 0), &result)); +} + TEST(safe_strto64, Int64s) { int64 result; @@ -155,5 +188,68 @@ TEST(safe_strto64, Int64s) { EXPECT_EQ(false, safe_strto64(StringPiece(nullptr, 0), &result)); } +TEST(safe_strtou64, UInt64s) { + uint64 result; + + EXPECT_TRUE(safe_strtou64("0", &result)); + EXPECT_EQ(0, result); + EXPECT_TRUE(safe_strtou64("1", &result)); + EXPECT_EQ(1, result); + EXPECT_TRUE(safe_strtou64("123", &result)); + EXPECT_EQ(123, result); + EXPECT_TRUE(safe_strtou64(" 345 ", &result)); + EXPECT_EQ(345, result); + EXPECT_TRUE(safe_strtou64("18446744073709551615", &result)); + EXPECT_EQ(18446744073709551615UL, result); + + // Invalid argument + EXPECT_FALSE(safe_strtou64(" 132.2 ", &result)); + EXPECT_FALSE(safe_strtou64(" 132.2 ", &result)); + EXPECT_FALSE(safe_strtou64(" -", &result)); + EXPECT_FALSE(safe_strtou64("", &result)); + EXPECT_FALSE(safe_strtou64(" ", &result)); + EXPECT_FALSE(safe_strtou64("123 a", &result)); + EXPECT_FALSE(safe_strtou64("123 456", &result)); + + // Overflow + EXPECT_FALSE(safe_strtou64("18446744073709551616", &result)); + EXPECT_FALSE(safe_strtou64("-1", &result)); + + // Check that the StringPiece's length is respected. + EXPECT_TRUE(safe_strtou64(StringPiece("123", 1), &result)); + EXPECT_EQ(1, result); + EXPECT_TRUE(safe_strtou64(StringPiece(" 123", 3), &result)); + EXPECT_EQ(12, result); + EXPECT_FALSE(safe_strtou64(StringPiece(nullptr, 0), &result)); +} + +TEST(safe_strtof, Float) { + float result = 0; + + EXPECT_TRUE(safe_strtof("0.123456", &result)); + EXPECT_EQ(0.123456f, result); + EXPECT_FALSE(safe_strtof("0.12345abc", &result)); + + // Overflow to infinity, underflow to 0. + EXPECT_TRUE(safe_strtof("1e39", &result)); + EXPECT_EQ(std::numeric_limits<float>::infinity(), result); + EXPECT_TRUE(safe_strtof("1e-50", &result)); + EXPECT_EQ(0, result); +} + +TEST(safe_strtod, Double) { + double result = 0; + + EXPECT_TRUE(safe_strtod("0.1234567890123", &result)); + EXPECT_EQ(0.1234567890123, result); + EXPECT_FALSE(safe_strtod("0.1234567890123abc", &result)); + + // Overflow to infinity, underflow to 0. + EXPECT_TRUE(safe_strtod("1e310", &result)); + EXPECT_EQ(std::numeric_limits<double>::infinity(), result); + EXPECT_TRUE(safe_strtod("1e-325", &result)); + EXPECT_EQ(0, result); +} + } // namespace strings } // namespace tensorflow |