Add literals for various time units
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 Nov 2016 23:21:39 +0000 (23:21 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 Nov 2016 23:21:39 +0000 (23:21 +0000)
https://bugs.webkit.org/show_bug.cgi?id=165074

Reviewed by Filip Pizlo.

Source/WTF:

Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
and unsigned long long types (those allowed for custom literals).

Add minutes-related functions (there are one or two use cases in WebCore).

* wtf/Seconds.h:
(WTF::Seconds::minutes):
(WTF::Seconds::fromMinutes):
(WTF::Seconds::fromMilliseconds):
(WTF::Seconds::fromMicroseconds):
(WTF::Seconds::fromNanoseconds):
(WTF::operator _min):
(WTF::operator _s):
(WTF::operator _ms):
(WTF::operator _us):
(WTF::operator _ns):

Tools:

Add tests for new time literals. Add new tests for units.

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

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

Source/WTF/ChangeLog
Source/WTF/wtf/Seconds.h
Tools/ChangeLog
Tools/TestWebKitAPI/Tests/WTF/Time.cpp

index 9f3f8f2..9b97c42 100644 (file)
@@ -1,3 +1,27 @@
+2016-11-26  Simon Fraser  <simon.fraser@apple.com>
+
+        Add literals for various time units
+        https://bugs.webkit.org/show_bug.cgi?id=165074
+
+        Reviewed by Filip Pizlo.
+        
+        Add _min, _s, _ms, _us and _ns literals for easy creation of Seconds from long double
+        and unsigned long long types (those allowed for custom literals).
+        
+        Add minutes-related functions (there are one or two use cases in WebCore).
+
+        * wtf/Seconds.h:
+        (WTF::Seconds::minutes):
+        (WTF::Seconds::fromMinutes):
+        (WTF::Seconds::fromMilliseconds):
+        (WTF::Seconds::fromMicroseconds):
+        (WTF::Seconds::fromNanoseconds):
+        (WTF::operator _min):
+        (WTF::operator _s):
+        (WTF::operator _ms):
+        (WTF::operator _us):
+        (WTF::operator _ns):
+
 2016-11-22  Darin Adler  <darin@apple.com>
 
         One more tiny bit of follow-up.
index c3914cb..72eed4a 100644 (file)
@@ -46,24 +46,30 @@ public:
     
     double value() const { return m_value; }
     
+    double minutes() const { return m_value / 60; }
     double seconds() const { return m_value; }
     double milliseconds() const { return seconds() * 1000; }
     double microseconds() const { return milliseconds() * 1000; }
     double nanoseconds() const { return microseconds() * 1000; }
     
-    static constexpr Seconds fromMilliseconds(double value)
+    static constexpr Seconds fromMinutes(double minutes)
     {
-        return Seconds(value / 1000);
+        return Seconds(minutes * 60);
+    }
+
+    static constexpr Seconds fromMilliseconds(double milliseconds)
+    {
+        return Seconds(milliseconds / 1000);
     }
     
-    static constexpr Seconds fromMicroseconds(double value)
+    static constexpr Seconds fromMicroseconds(double microseconds)
     {
-        return fromMilliseconds(value / 1000);
+        return fromMilliseconds(microseconds / 1000);
     }
     
-    static constexpr Seconds fromNanoseconds(double value)
+    static constexpr Seconds fromNanoseconds(double nanoseconds)
     {
-        return fromMicroseconds(value / 1000);
+        return fromMicroseconds(nanoseconds / 1000);
     }
     
     static constexpr Seconds infinity()
@@ -195,6 +201,56 @@ private:
     double m_value { 0 };
 };
 
+constexpr Seconds operator"" _min(long double minutes)
+{
+    return Seconds::fromMinutes(minutes);
+}
+
+constexpr Seconds operator"" _s(long double seconds)
+{
+    return Seconds(seconds);
+}
+
+constexpr Seconds operator"" _ms(long double milliseconds)
+{
+    return Seconds::fromMilliseconds(milliseconds);
+}
+
+constexpr Seconds operator"" _us(long double microseconds)
+{
+    return Seconds::fromMicroseconds(microseconds);
+}
+
+constexpr Seconds operator"" _ns(long double nanoseconds)
+{
+    return Seconds::fromNanoseconds(nanoseconds);
+}
+
+constexpr Seconds operator"" _min(unsigned long long minutes)
+{
+    return Seconds::fromMinutes(minutes);
+}
+
+constexpr Seconds operator"" _s(unsigned long long seconds)
+{
+    return Seconds(seconds);
+}
+
+constexpr Seconds operator"" _ms(unsigned long long milliseconds)
+{
+    return Seconds::fromMilliseconds(milliseconds);
+}
+
+constexpr Seconds operator"" _us(unsigned long long microseconds)
+{
+    return Seconds::fromMicroseconds(microseconds);
+}
+
+constexpr Seconds operator"" _ns(unsigned long long nanoseconds)
+{
+    return Seconds::fromNanoseconds(nanoseconds);
+}
+
 WTF_EXPORT_PRIVATE void sleep(Seconds);
 
 } // namespae WTF
index 6a2536c..50504fd 100644 (file)
@@ -1,3 +1,15 @@
+2016-11-26  Simon Fraser  <simon.fraser@apple.com>
+
+        Add literals for various time units
+        https://bugs.webkit.org/show_bug.cgi?id=165074
+
+        Reviewed by Filip Pizlo.
+        
+        Add tests for new time literals. Add new tests for units.
+
+        * TestWebKitAPI/Tests/WTF/Time.cpp:
+        (TestWebKitAPI::TEST):
+
 2016-11-25  Csaba Osztrogon√°c  <ossy@webkit.org>
 
         Fix compile warnings after r208415
index 5ebd08e..52e7149 100644 (file)
@@ -97,6 +97,20 @@ TimeWithDynamicClockType dtm(double value)
 
 } // anonymous namespace
 
+TEST(WTF_Time, units)
+{
+    EXPECT_EQ(s(60), Seconds::fromMinutes(1));
+    EXPECT_EQ(s(0.001), Seconds::fromMilliseconds(1));
+    EXPECT_EQ(s(0.000001), Seconds::fromMicroseconds(1));
+    EXPECT_EQ(s(0.0000005), Seconds::fromNanoseconds(500));
+
+    EXPECT_EQ(s(120).minutes(), 2);
+    EXPECT_EQ(s(2).seconds(), 2);
+    EXPECT_EQ(s(2).milliseconds(), 2000);
+    EXPECT_EQ(s(2).microseconds(), 2000000);
+    EXPECT_EQ(s(2).nanoseconds(), 2000000000);
+}
+
 TEST(WTF_Time, plus)
 {
     EXPECT_EQ(s(6), s(1) + s(5));
@@ -279,5 +293,26 @@ TEST(WTF_Time, notEqual)
     EXPECT_TRUE(dtm(2) != dtm(3));
 }
 
+TEST(WTF_Time, literals)
+{
+    EXPECT_TRUE(s(120) == 2_min);
+    EXPECT_TRUE(s(2) == 2_s);
+    EXPECT_TRUE(s(2) == 2000_ms);
+    EXPECT_TRUE(s(2) - 1000_ms == s(1));
+    EXPECT_TRUE(2_s - s(1) == 1000_ms);
+
+    EXPECT_TRUE(Seconds::fromMinutes(2) == 2_min);
+    EXPECT_TRUE(Seconds(2) == 2_s);
+    EXPECT_TRUE(Seconds::fromMilliseconds(2) == 2_ms);
+    EXPECT_TRUE(Seconds::fromMicroseconds(2) == 2_us);
+    EXPECT_TRUE(Seconds::fromNanoseconds(2) == 2_ns);
+
+    EXPECT_TRUE(Seconds::fromMinutes(2.5) == 2.5_min);
+    EXPECT_TRUE(Seconds(2.5) == 2.5_s);
+    EXPECT_TRUE(Seconds::fromMilliseconds(2.5) == 2.5_ms);
+    EXPECT_TRUE(Seconds::fromMicroseconds(2.5) == 2.5_us);
+    EXPECT_TRUE(Seconds::fromNanoseconds(2.5) == 2.5_ns);
+}
+
 } // namespace TestWebKitAPI