Adds infinite addition and subtraction to time units.
This prepares for allowing use making arithmetic operators constexpr.
This also makes it easier to use for comparisons with offsets.
Now a > b + 10 ms works even if b is infinite.
Bug: webrtc:9574
Change-Id: Ie36092b72c2ec0f0c541641199a39155f5a796f3
Reviewed-on: https://webrtc-review.googlesource.com/96820
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24530}
diff --git a/api/units/time_delta_unittest.cc b/api/units/time_delta_unittest.cc
index 9eddee7..e5906bf 100644
--- a/api/units/time_delta_unittest.cc
+++ b/api/units/time_delta_unittest.cc
@@ -164,6 +164,26 @@
EXPECT_EQ(TimeDelta::us(-kValueA).Abs().us(), kValueA);
EXPECT_EQ(TimeDelta::us(kValueA).Abs().us(), kValueA);
+
+ TimeDelta mutable_delta = TimeDelta::ms(kValueA);
+ mutable_delta += TimeDelta::ms(kValueB);
+ EXPECT_EQ(mutable_delta, TimeDelta::ms(kValueA + kValueB));
+ mutable_delta -= TimeDelta::ms(kValueB);
+ EXPECT_EQ(mutable_delta, TimeDelta::ms(kValueA));
+}
+
+TEST(TimeDeltaTest, InfinityOperations) {
+ const int64_t kValue = 267;
+ const TimeDelta finite = TimeDelta::ms(kValue);
+ EXPECT_TRUE((TimeDelta::PlusInfinity() + finite).IsPlusInfinity());
+ EXPECT_TRUE((TimeDelta::PlusInfinity() - finite).IsPlusInfinity());
+ EXPECT_TRUE((finite + TimeDelta::PlusInfinity()).IsPlusInfinity());
+ EXPECT_TRUE((finite - TimeDelta::MinusInfinity()).IsPlusInfinity());
+
+ EXPECT_TRUE((TimeDelta::MinusInfinity() + finite).IsMinusInfinity());
+ EXPECT_TRUE((TimeDelta::MinusInfinity() - finite).IsMinusInfinity());
+ EXPECT_TRUE((finite + TimeDelta::MinusInfinity()).IsMinusInfinity());
+ EXPECT_TRUE((finite - TimeDelta::PlusInfinity()).IsMinusInfinity());
}
} // namespace test
} // namespace webrtc