Extend UnitBase multiplication to support size_t

Bug: None
Change-Id: I8dcb85cdb2819df54d4cb0cae59b77d7d629123a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/260941
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36828}
This commit is contained in:
Danil Chapovalov 2022-05-09 16:01:25 +02:00 committed by WebRTC LUCI CQ
parent 9266c7015e
commit adaf511221
2 changed files with 28 additions and 8 deletions

View file

@ -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<double>(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);

View file

@ -281,6 +281,9 @@ class RelativeUnit : public UnitBase<Unit_T> {
constexpr Unit_T operator*(int32_t scalar) const {
return UnitBase<Unit_T>::FromValue(this->ToValue() * scalar);
}
constexpr Unit_T operator*(size_t scalar) const {
return UnitBase<Unit_T>::FromValue(this->ToValue() * scalar);
}
protected:
using UnitBase<Unit_T>::UnitBase;
@ -298,6 +301,11 @@ template <class Unit_T>
inline constexpr Unit_T operator*(int32_t scalar, RelativeUnit<Unit_T> other) {
return other * scalar;
}
template <class Unit_T>
inline constexpr Unit_T operator*(size_t scalar, RelativeUnit<Unit_T> other) {
return other * scalar;
}
template <class Unit_T>
inline constexpr Unit_T operator-(RelativeUnit<Unit_T> other) {
if (other.IsPlusInfinity())