Fix bug in MediaTime comparison for negative values with different scale.
authoraboya@igalia.com <aboya@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Feb 2018 09:14:09 +0000 (09:14 +0000)
committeraboya@igalia.com <aboya@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 5 Feb 2018 09:14:09 +0000 (09:14 +0000)
https://bugs.webkit.org/show_bug.cgi?id=182433

Source/WTF:

Reviewed by Xabier Rodriguez-Calvar.

* wtf/MediaTime.cpp:
(WTF::MediaTime::compare const):

Tools:

Improved test coverage for MediaTime::compare().

Reviewed by Xabier Rodriguez-Calvar.

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

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

Source/WTF/ChangeLog
Source/WTF/wtf/MediaTime.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WTF/MediaTime.cpp

index a75e46d..ad67f9f 100644 (file)
@@ -1,3 +1,13 @@
+2018-02-05  Alicia Boya García  <aboya@igalia.com>
+
+        Fix bug in MediaTime comparison for negative values with different scale.
+        https://bugs.webkit.org/show_bug.cgi?id=182433
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        * wtf/MediaTime.cpp:
+        (WTF::MediaTime::compare const):
+
 2018-02-02  Mark Lam  <mark.lam@apple.com>
 
         More ARM64_32 fixes.
index 5401ddd..03050b5 100644 (file)
@@ -391,11 +391,19 @@ MediaTime::ComparisonFlags MediaTime::compare(const MediaTime& rhs) const
     if (m_timeValue == rhs.m_timeValue)
         return m_timeScale < rhs.m_timeScale ? GreaterThan : LessThan;
 
-    if (m_timeValue < rhs.m_timeValue && m_timeScale > rhs.m_timeScale)
-        return LessThan;
+    if (m_timeValue >= 0) {
+        if (m_timeValue < rhs.m_timeValue && m_timeScale > rhs.m_timeScale)
+            return LessThan;
 
-    if (m_timeValue > rhs.m_timeValue && m_timeScale < rhs.m_timeScale)
-        return GreaterThan;
+        if (m_timeValue > rhs.m_timeValue && m_timeScale < rhs.m_timeScale)
+            return GreaterThan;
+    } else {
+        if (m_timeValue < rhs.m_timeValue && m_timeScale < rhs.m_timeScale)
+            return LessThan;
+
+        if (m_timeValue > rhs.m_timeValue && m_timeScale > rhs.m_timeScale)
+            return GreaterThan;
+    }
 
     int64_t lhsFactor;
     int64_t rhsFactor;
index a91dd2c..19bbca1 100644 (file)
@@ -1,3 +1,15 @@
+2018-02-05  Alicia Boya García  <aboya@igalia.com>
+
+        Fix bug in MediaTime comparison for negative values with different scale.
+        https://bugs.webkit.org/show_bug.cgi?id=182433
+
+        Improved test coverage for MediaTime::compare().
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        * TestWebKitAPI/Tests/WTF/MediaTime.cpp:
+        (TestWebKitAPI::TEST):
+
 2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [SOUP] WebSockets must use system proxy settings
index d8d8c32..d1ec813 100644 (file)
@@ -85,6 +85,12 @@ TEST(WTF, MediaTime)
     EXPECT_EQ(MediaTime(1, 1) != MediaTime(2, 1), true);
     EXPECT_EQ(MediaTime(2, 1) == MediaTime(2, 1), true);
     EXPECT_EQ(MediaTime(2, 1) == MediaTime(4, 2), true);
+    EXPECT_EQ(MediaTime(-2, 1) < MediaTime(-1, 1), true);
+    EXPECT_EQ(MediaTime(-2, 1) <= MediaTime(-1, 1), true);
+    EXPECT_EQ(MediaTime(-1, 1) < MediaTime(-2, 1), false);
+    EXPECT_EQ(MediaTime(-1, 1) < MediaTime(2, 1), true);
+    EXPECT_EQ(MediaTime(1, 1) > MediaTime(-2, 1), true);
+    EXPECT_EQ(MediaTime(-8, 10) >= MediaTime(-1, 1), true);
     EXPECT_TRUE((bool)MediaTime(1, 1));
     EXPECT_TRUE(!MediaTime(0, 1));