Add more tests for clampTo<>()
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 10 Feb 2019 00:41:55 +0000 (00:41 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 10 Feb 2019 00:41:55 +0000 (00:41 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194462

Reviewed by Geoffrey Garen.

Darin suggested to test the very last floating point number
at the boundaries when truncating to integer.
I added test for max/min and max-1/min-1.

* TestWebKitAPI/Tests/WTF/MathExtras.cpp:
(TestWebKitAPI::TEST):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241247 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WTF/MathExtras.cpp

index fb511f4..26456d1 100644 (file)
@@ -1,3 +1,17 @@
+2019-02-09  Benjamin Poulain  <benjamin@webkit.org>
+
+        Add more tests for clampTo<>()
+        https://bugs.webkit.org/show_bug.cgi?id=194462
+
+        Reviewed by Geoffrey Garen.
+
+        Darin suggested to test the very last floating point number
+        at the boundaries when truncating to integer.
+        I added test for max/min and max-1/min-1.
+
+        * TestWebKitAPI/Tests/WTF/MathExtras.cpp:
+        (TestWebKitAPI::TEST):
+
 2019-02-09  Darin Adler  <darin@apple.com>
 
         Eliminate unnecessary String temporaries by using StringConcatenateNumbers
index c74e3c9..1280d8e 100644 (file)
@@ -318,6 +318,25 @@ TEST(WTF, clampFloatToInt)
     EXPECT_EQ(clampTo<int32_t>(static_cast<double>(9007199254740991)), std::numeric_limits<int32_t>::max());
     EXPECT_EQ(clampTo<int32_t>(static_cast<double>(9007199254740992)), std::numeric_limits<int32_t>::max());
     EXPECT_EQ(clampTo<int32_t>(static_cast<double>(9007199254740993)), std::numeric_limits<int32_t>::max());
+
+    // Test the double at the edge of max/min and max-1/min+1.
+    double intMax = static_cast<double>(std::numeric_limits<int32_t>::max());
+    EXPECT_EQ(clampTo<int32_t>(intMax), std::numeric_limits<int32_t>::max());
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMax, 0)), std::numeric_limits<int32_t>::max() - 1);
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMax, std::numeric_limits<double>::max())), std::numeric_limits<int32_t>::max());
+
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMax - 1., 0)), std::numeric_limits<int32_t>::max() - 2);
+    EXPECT_EQ(clampTo<int32_t>(intMax - 1), std::numeric_limits<int32_t>::max() - 1);
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMax - 1., std::numeric_limits<double>::max())), std::numeric_limits<int32_t>::max() - 1);
+
+    double intMin = static_cast<double>(std::numeric_limits<int32_t>::min());
+    EXPECT_EQ(clampTo<int32_t>(intMin), std::numeric_limits<int32_t>::min());
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMin, 0)), std::numeric_limits<int32_t>::min() + 1);
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMin, -std::numeric_limits<double>::max())), std::numeric_limits<int32_t>::min());
+
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMin + 1, 0)), std::numeric_limits<int32_t>::min() + 2);
+    EXPECT_EQ(clampTo<int32_t>(intMin + 1), std::numeric_limits<int32_t>::min() + 1);
+    EXPECT_EQ(clampTo<int32_t>(std::nextafter(intMin + 1, -std::numeric_limits<double>::max())), std::numeric_limits<int32_t>::min() + 1);
 }
 
 template<typename TargetType, typename SourceType>