diff --git a/api/units/time_delta_unittest.cc b/api/units/time_delta_unittest.cc index 3483d641bd..51a7aa233a 100644 --- a/api/units/time_delta_unittest.cc +++ b/api/units/time_delta_unittest.cc @@ -187,14 +187,6 @@ TEST(TimeDeltaTest, MathOperations) { EXPECT_EQ((delta_a + delta_b).ms(), kValueA + kValueB); EXPECT_EQ((delta_a - delta_b).ms(), kValueA - kValueB); - const int32_t kInt32Value = 123; - const double kFloatValue = 123.0; - EXPECT_EQ((TimeDelta::Micros(kValueA) * kValueB).us(), kValueA * kValueB); - EXPECT_EQ((TimeDelta::Micros(kValueA) * kInt32Value).us(), - kValueA * kInt32Value); - EXPECT_EQ((TimeDelta::Micros(kValueA) * kFloatValue).us(), - kValueA * kFloatValue); - EXPECT_EQ((delta_b / 10).ms(), kValueB / 10); EXPECT_EQ(delta_b / delta_a, static_cast(kValueB) / kValueA); @@ -208,6 +200,26 @@ TEST(TimeDeltaTest, MathOperations) { EXPECT_EQ(mutable_delta, TimeDelta::Millis(kValueA)); } +TEST(TimeDeltaTest, MultiplyByScalar) { + const TimeDelta kValue = TimeDelta::Micros(267); + const int64_t kInt64 = 450; + const int32_t kInt32 = 123; + const size_t kUnsignedInt = 125; + const double kFloat = 123.0; + + EXPECT_EQ((kValue * kInt64).us(), kValue.us() * kInt64); + EXPECT_EQ(kValue * kInt64, kInt64 * kValue); + + EXPECT_EQ((kValue * kInt32).us(), kValue.us() * kInt32); + EXPECT_EQ(kValue * kInt32, kInt32 * kValue); + + EXPECT_EQ((kValue * kUnsignedInt).us(), kValue.us() * int64_t{kUnsignedInt}); + EXPECT_EQ(kValue * kUnsignedInt, kUnsignedInt * kValue); + + EXPECT_DOUBLE_EQ((kValue * kFloat).us(), kValue.us() * kFloat); + EXPECT_EQ(kValue * kFloat, kFloat * kValue); +} + TEST(TimeDeltaTest, InfinityOperations) { const int64_t kValue = 267; const TimeDelta finite = TimeDelta::Millis(kValue); diff --git a/rtc_base/units/unit_base.h b/rtc_base/units/unit_base.h index 57cdd8c8b6..0cd6a61215 100644 --- a/rtc_base/units/unit_base.h +++ b/rtc_base/units/unit_base.h @@ -281,6 +281,9 @@ class RelativeUnit : public UnitBase { constexpr Unit_T operator*(int32_t scalar) const { return UnitBase::FromValue(this->ToValue() * scalar); } + constexpr Unit_T operator*(size_t scalar) const { + return UnitBase::FromValue(this->ToValue() * scalar); + } protected: using UnitBase::UnitBase; @@ -298,6 +301,11 @@ template inline constexpr Unit_T operator*(int32_t scalar, RelativeUnit other) { return other * scalar; } +template +inline constexpr Unit_T operator*(size_t scalar, RelativeUnit other) { + return other * scalar; +} + template inline constexpr Unit_T operator-(RelativeUnit other) { if (other.IsPlusInfinity())