aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/core/lib/strings/numbers_test.cc
diff options
context:
space:
mode:
authorGravatar A. Unique TensorFlower <nobody@tensorflow.org>2016-04-05 14:42:45 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2016-04-05 15:51:36 -0700
commit1d004f969867ee38c5398d68574e141ce8de86cb (patch)
treea10822e17b47992312f87043e508b967a7519569 /tensorflow/core/lib/strings/numbers_test.cc
parenta8f0dd875b86e0dcefbd978441f79c51f3cc241e (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.cc96
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