Adds clamping to TimeDelta.
Bug: webrtc:9709 Change-Id: I6447d8b0ac55b38eaa187b4d44426ec95c377ffb Reviewed-on: https://webrtc-review.googlesource.com/c/110787 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Sebastian Jansson <srte@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25681}
This commit is contained in:

committed by
Commit Bot

parent
b5f82011ba
commit
0a8bd9cdc9
@ -16,6 +16,7 @@
|
|||||||
#endif // UNIT_TEST
|
#endif // UNIT_TEST
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
@ -189,6 +190,12 @@ class TimeDelta {
|
|||||||
constexpr bool IsMinusInfinity() const {
|
constexpr bool IsMinusInfinity() const {
|
||||||
return microseconds_ == timedelta_impl::kMinusInfinityVal;
|
return microseconds_ == timedelta_impl::kMinusInfinityVal;
|
||||||
}
|
}
|
||||||
|
TimeDelta Clamped(TimeDelta min_delta, TimeDelta max_delta) const {
|
||||||
|
return std::max(min_delta, std::min(*this, max_delta));
|
||||||
|
}
|
||||||
|
void Clamp(TimeDelta min_delta, TimeDelta max_delta) {
|
||||||
|
*this = Clamped(min_delta, max_delta);
|
||||||
|
}
|
||||||
TimeDelta operator+(const TimeDelta& other) const {
|
TimeDelta operator+(const TimeDelta& other) const {
|
||||||
if (IsPlusInfinity() || other.IsPlusInfinity()) {
|
if (IsPlusInfinity() || other.IsPlusInfinity()) {
|
||||||
RTC_DCHECK(!IsMinusInfinity());
|
RTC_DCHECK(!IsMinusInfinity());
|
||||||
|
@ -106,6 +106,27 @@ TEST(TimeDeltaTest, ComparisonOperators) {
|
|||||||
EXPECT_LT(TimeDelta::MinusInfinity(), TimeDelta::Zero());
|
EXPECT_LT(TimeDelta::MinusInfinity(), TimeDelta::Zero());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(TimeDeltaTest, Clamping) {
|
||||||
|
const TimeDelta upper = TimeDelta::ms(800);
|
||||||
|
const TimeDelta lower = TimeDelta::ms(100);
|
||||||
|
const TimeDelta under = TimeDelta::ms(100);
|
||||||
|
const TimeDelta inside = TimeDelta::ms(500);
|
||||||
|
const TimeDelta over = TimeDelta::ms(1000);
|
||||||
|
EXPECT_EQ(under.Clamped(lower, upper), lower);
|
||||||
|
EXPECT_EQ(inside.Clamped(lower, upper), inside);
|
||||||
|
EXPECT_EQ(over.Clamped(lower, upper), upper);
|
||||||
|
|
||||||
|
TimeDelta mutable_delta = lower;
|
||||||
|
mutable_delta.Clamp(lower, upper);
|
||||||
|
EXPECT_EQ(mutable_delta, lower);
|
||||||
|
mutable_delta = inside;
|
||||||
|
mutable_delta.Clamp(lower, upper);
|
||||||
|
EXPECT_EQ(mutable_delta, inside);
|
||||||
|
mutable_delta = over;
|
||||||
|
mutable_delta.Clamp(lower, upper);
|
||||||
|
EXPECT_EQ(mutable_delta, upper);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(TimeDeltaTest, CanBeInititializedFromLargeInt) {
|
TEST(TimeDeltaTest, CanBeInititializedFromLargeInt) {
|
||||||
const int kMaxInt = std::numeric_limits<int>::max();
|
const int kMaxInt = std::numeric_limits<int>::max();
|
||||||
EXPECT_EQ(TimeDelta::seconds(kMaxInt).us(),
|
EXPECT_EQ(TimeDelta::seconds(kMaxInt).us(),
|
||||||
|
Reference in New Issue
Block a user