diff options
author | Elliott Hughes <enh@google.com> | 2014-10-28 17:54:23 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2014-10-28 17:54:23 -0700 |
commit | 89aaaffbf8f2d09b56c1cc1345cdaf28c331ab5e (patch) | |
tree | 88117e80c7f4c4ca41512e73e2995fd29526a8f6 | |
parent | 13dcb88b0f8ce238456059fdc0b6c946caed1e3a (diff) |
Extra strtod/strtof tests.
Check that libc doesn't suffer from a couple of bugs that affected
Java in the past.
Bug: 2206701
Change-Id: I9eb64d7ff2fa0b79e93079b897a5fb78bef866be
-rw-r--r-- | tests/stdlib_test.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/stdlib_test.cpp b/tests/stdlib_test.cpp index 9ad96fd81..ea88f39b7 100644 --- a/tests/stdlib_test.cpp +++ b/tests/stdlib_test.cpp @@ -229,6 +229,23 @@ TEST(stdlib, strtold) { ASSERT_DOUBLE_EQ(1.23, strtold("1.23", NULL)); } +TEST(stdlib, strtof_2206701) { + ASSERT_EQ(0.0f, strtof("7.0064923216240853546186479164495e-46", NULL)); + ASSERT_EQ(1.4e-45f, strtof("7.0064923216240853546186479164496e-46", NULL)); +} + +TEST(stdlib, strtod_largest_subnormal) { + // This value has been known to cause javac and java to infinite loop. + // http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ + ASSERT_EQ(2.2250738585072014e-308, strtod("2.2250738585072012e-308", NULL)); + ASSERT_EQ(2.2250738585072014e-308, strtod("0.00022250738585072012e-304", NULL)); + ASSERT_EQ(2.2250738585072014e-308, strtod("00000002.2250738585072012e-308", NULL)); + ASSERT_EQ(2.2250738585072014e-308, strtod("2.225073858507201200000e-308", NULL)); + ASSERT_EQ(2.2250738585072014e-308, strtod("2.2250738585072012e-00308", NULL)); + ASSERT_EQ(2.2250738585072014e-308, strtod("2.22507385850720129978001e-308", NULL)); + ASSERT_EQ(-2.2250738585072014e-308, strtod("-2.2250738585072012e-308", NULL)); +} + TEST(stdlib, quick_exit) { pid_t pid = fork(); ASSERT_NE(-1, pid) << strerror(errno); |