summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/tests/DecimalTest.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-06-20 13:01:08 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-06-20 13:01:08 +0200
commit49233e234e5c787396cadb2cea33b31ae0cd65c1 (patch)
tree5410cb9a8fd53168bb60d62c54b654d86f03c38d /Source/WebKit/chromium/tests/DecimalTest.cpp
parentb211c645d8ab690f713515dfdc84d80b11c27d2c (diff)
downloadqtwebkit-49233e234e5c787396cadb2cea33b31ae0cd65c1.tar.gz
Imported WebKit commit 3a8c29f35d00659d2ce7a0ccdfa8304f14e82327 (http://svn.webkit.org/repository/webkit/trunk@120813)
New snapshot with Windows build fixes
Diffstat (limited to 'Source/WebKit/chromium/tests/DecimalTest.cpp')
-rw-r--r--Source/WebKit/chromium/tests/DecimalTest.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/tests/DecimalTest.cpp b/Source/WebKit/chromium/tests/DecimalTest.cpp
index 18457fdf4..db80f5bfe 100644
--- a/Source/WebKit/chromium/tests/DecimalTest.cpp
+++ b/Source/WebKit/chromium/tests/DecimalTest.cpp
@@ -556,6 +556,32 @@ TEST_F(DecimalTest, FloorSpecialValues)
EXPECT_EQ(Decimal::nan(), Decimal::nan().floor());
}
+TEST_F(DecimalTest, FromDouble)
+{
+ EXPECT_EQ(encode(0, 0, Positive), Decimal::fromDouble(0.0));
+ EXPECT_EQ(encode(0, 0, Negative), Decimal::fromDouble(-0.0));
+ EXPECT_EQ(encode(1, 0, Positive), Decimal::fromDouble(1));
+ EXPECT_EQ(encode(1, 0, Negative), Decimal::fromDouble(-1));
+ EXPECT_EQ(encode(123, 0, Positive), Decimal::fromDouble(123));
+ EXPECT_EQ(encode(123, 0, Negative), Decimal::fromDouble(-123));
+ EXPECT_EQ(encode(1, -1, Positive), Decimal::fromDouble(0.1));
+ EXPECT_EQ(encode(1, -1, Negative), Decimal::fromDouble(-0.1));
+}
+
+TEST_F(DecimalTest, FromDoubleLimits)
+{
+ EXPECT_EQ(encode(UINT64_C(2220446049250313), -31, Positive), Decimal::fromDouble(std::numeric_limits<double>::epsilon()));
+ EXPECT_EQ(encode(UINT64_C(2220446049250313), -31, Negative), Decimal::fromDouble(-std::numeric_limits<double>::epsilon()));
+ EXPECT_EQ(encode(UINT64_C(17976931348623157), 292, Positive), Decimal::fromDouble(std::numeric_limits<double>::max()));
+ EXPECT_EQ(encode(UINT64_C(17976931348623157), 292, Negative), Decimal::fromDouble(-std::numeric_limits<double>::max()));
+ EXPECT_EQ(encode(UINT64_C(22250738585072014), -324, Positive), Decimal::fromDouble(std::numeric_limits<double>::min()));
+ EXPECT_EQ(encode(UINT64_C(22250738585072014), -324, Negative), Decimal::fromDouble(-std::numeric_limits<double>::min()));
+ EXPECT_TRUE(Decimal::fromDouble(std::numeric_limits<double>::infinity()).isInfinity());
+ EXPECT_TRUE(Decimal::fromDouble(-std::numeric_limits<double>::infinity()).isInfinity());
+ EXPECT_TRUE(Decimal::fromDouble(std::numeric_limits<double>::quiet_NaN()).isNaN());
+ EXPECT_TRUE(Decimal::fromDouble(-std::numeric_limits<double>::quiet_NaN()).isNaN());
+}
+
TEST_F(DecimalTest, FromInt32)
{
EXPECT_EQ(encode(0, 0, Positive), Decimal(0));
@@ -750,24 +776,32 @@ TEST_F(DecimalTest, NegateSpecialValues)
TEST_F(DecimalTest, Predicates)
{
EXPECT_TRUE(Decimal::zero(Positive).isFinite());
+ EXPECT_FALSE(Decimal::zero(Positive).isInfinity());
+ EXPECT_FALSE(Decimal::zero(Positive).isNaN());
EXPECT_TRUE(Decimal::zero(Positive).isPositive());
EXPECT_FALSE(Decimal::zero(Positive).isNegative());
EXPECT_FALSE(Decimal::zero(Positive).isSpecial());
EXPECT_TRUE(Decimal::zero(Positive).isZero());
EXPECT_TRUE(Decimal::zero(Negative).isFinite());
+ EXPECT_FALSE(Decimal::zero(Negative).isInfinity());
+ EXPECT_FALSE(Decimal::zero(Negative).isNaN());
EXPECT_FALSE(Decimal::zero(Negative).isPositive());
EXPECT_TRUE(Decimal::zero(Negative).isNegative());
EXPECT_FALSE(Decimal::zero(Negative).isSpecial());
EXPECT_TRUE(Decimal::zero(Negative).isZero());
EXPECT_TRUE(Decimal(123).isFinite());
+ EXPECT_FALSE(Decimal(123).isInfinity());
+ EXPECT_FALSE(Decimal(123).isNaN());
EXPECT_TRUE(Decimal(123).isPositive());
EXPECT_FALSE(Decimal(123).isNegative());
EXPECT_FALSE(Decimal(123).isSpecial());
EXPECT_FALSE(Decimal(123).isZero());
EXPECT_TRUE(Decimal(-123).isFinite());
+ EXPECT_FALSE(Decimal(-123).isInfinity());
+ EXPECT_FALSE(Decimal(-123).isNaN());
EXPECT_FALSE(Decimal(-123).isPositive());
EXPECT_TRUE(Decimal(-123).isNegative());
EXPECT_FALSE(Decimal(-123).isSpecial());
@@ -777,18 +811,24 @@ TEST_F(DecimalTest, Predicates)
TEST_F(DecimalTest, PredicatesSpecialValues)
{
EXPECT_FALSE(Decimal::infinity(Positive).isFinite());
+ EXPECT_TRUE(Decimal::infinity(Positive).isInfinity());
+ EXPECT_FALSE(Decimal::infinity(Positive).isNaN());
EXPECT_TRUE(Decimal::infinity(Positive).isPositive());
EXPECT_FALSE(Decimal::infinity(Positive).isNegative());
EXPECT_TRUE(Decimal::infinity(Positive).isSpecial());
EXPECT_FALSE(Decimal::infinity(Positive).isZero());
EXPECT_FALSE(Decimal::infinity(Negative).isFinite());
+ EXPECT_TRUE(Decimal::infinity(Negative).isInfinity());
+ EXPECT_FALSE(Decimal::infinity(Negative).isNaN());
EXPECT_FALSE(Decimal::infinity(Negative).isPositive());
EXPECT_TRUE(Decimal::infinity(Negative).isNegative());
EXPECT_TRUE(Decimal::infinity(Negative).isSpecial());
EXPECT_FALSE(Decimal::infinity(Negative).isZero());
EXPECT_FALSE(Decimal::nan().isFinite());
+ EXPECT_FALSE(Decimal::nan().isInfinity());
+ EXPECT_TRUE(Decimal::nan().isNaN());
EXPECT_TRUE(Decimal::nan().isSpecial());
EXPECT_FALSE(Decimal::nan().isZero());
}
@@ -940,6 +980,42 @@ TEST_F(DecimalTest, SubtractSpecialValues)
EXPECT_EQ(NaN, MinusInfinity - NaN);
}
+TEST_F(DecimalTest, ToDouble)
+{
+ EXPECT_EQ(0.0, encode(0, 0, Positive).toDouble());
+ EXPECT_EQ(-0.0, encode(0, 0, Negative).toDouble());
+
+ EXPECT_EQ(1.0, encode(1, 0, Positive).toDouble());
+ EXPECT_EQ(-1.0, encode(1, 0, Negative).toDouble());
+
+ EXPECT_EQ(0.1, encode(1, -1, Positive).toDouble());
+ EXPECT_EQ(-0.1, encode(1, -1, Negative).toDouble());
+ EXPECT_EQ(0.3, encode(3, -1, Positive).toDouble());
+ EXPECT_EQ(-0.3, encode(3, -1, Negative).toDouble());
+ EXPECT_EQ(0.6, encode(6, -1, Positive).toDouble());
+ EXPECT_EQ(-0.6, encode(6, -1, Negative).toDouble());
+ EXPECT_EQ(0.7, encode(7, -1, Positive).toDouble());
+ EXPECT_EQ(-0.7, encode(7, -1, Negative).toDouble());
+
+ EXPECT_EQ(0.01, encode(1, -2, Positive).toDouble());
+ EXPECT_EQ(0.001, encode(1, -3, Positive).toDouble());
+ EXPECT_EQ(0.0001, encode(1, -4, Positive).toDouble());
+ EXPECT_EQ(0.00001, encode(1, -5, Positive).toDouble());
+
+ EXPECT_EQ(1e+308, encode(1, 308, Positive).toDouble());
+ EXPECT_EQ(1e-307, encode(1, -307, Positive).toDouble());
+
+ EXPECT_TRUE(isinf(encode(1, 1000, Positive).toDouble()));
+ EXPECT_EQ(0.0, encode(1, -1000, Positive).toDouble());
+}
+
+TEST_F(DecimalTest, ToDoubleSpecialValues)
+{
+ EXPECT_TRUE(isinf(Decimal::infinity(Decimal::Positive).toDouble()));
+ EXPECT_TRUE(isinf(Decimal::infinity(Decimal::Negative).toDouble()));
+ EXPECT_TRUE(isnan(Decimal::nan().toDouble()));
+}
+
TEST_F(DecimalTest, ToString)
{
EXPECT_EQ(String("0"), Decimal::zero(Positive).toString());