From 21e97f9b9d720b15ef117ed4bc9bbc73af1330c6 Mon Sep 17 00:00:00 2001 From: Evan Shrubsole Date: Tue, 11 Jan 2022 13:50:00 +0100 Subject: [PATCH] Add unary operator- to units This will be used in the frame buffer 3 scheduler. Bug: webrtc:13343 Change-Id: Ib699072021da30022a34aabe24e36a37e89ddf41 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/245642 Reviewed-by: Mirko Bonadei Commit-Queue: Evan Shrubsole Cr-Commit-Position: refs/heads/main@{#35658} --- BUILD.gn | 1 + rtc_base/units/unit_base.h | 8 ++++++++ rtc_base/units/unit_base_unittest.cc | 11 +++++++++++ 3 files changed, 20 insertions(+) diff --git a/BUILD.gn b/BUILD.gn index 3d4fedfb01..eb06453dea 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -562,6 +562,7 @@ if (rtc_include_tests && !build_with_chromium) { "rtc_base/task_utils:pending_task_safety_flag_unittests", "rtc_base/task_utils:repeating_task_unittests", "rtc_base/task_utils:to_queued_task_unittests", + "rtc_base/units:units_unittests", "sdk:sdk_tests", "test:rtp_test_utils", "test:test_main", diff --git a/rtc_base/units/unit_base.h b/rtc_base/units/unit_base.h index 7196bae346..4ccd9b750a 100644 --- a/rtc_base/units/unit_base.h +++ b/rtc_base/units/unit_base.h @@ -298,6 +298,14 @@ template inline constexpr Unit_T operator*(int32_t scalar, RelativeUnit other) { return other * scalar; } +template +inline constexpr Unit_T operator-(RelativeUnit other) { + if (other.IsPlusInfinity()) + return UnitBase::MinusInfinity(); + if (other.IsMinusInfinity()) + return UnitBase::PlusInfinity(); + return -1 * other; +} } // namespace rtc_units_impl diff --git a/rtc_base/units/unit_base_unittest.cc b/rtc_base/units/unit_base_unittest.cc index bbdbd8cd10..9eb0c33ae5 100644 --- a/rtc_base/units/unit_base_unittest.cc +++ b/rtc_base/units/unit_base_unittest.cc @@ -231,5 +231,16 @@ TEST(UnitBaseTest, InfinityOperations) { EXPECT_TRUE((finite + TestUnit::MinusInfinity()).IsMinusInfinity()); EXPECT_TRUE((finite - TestUnit::PlusInfinity()).IsMinusInfinity()); } + +TEST(UnitBaseTest, UnaryMinus) { + const int64_t kValue = 1337; + const TestUnit unit = TestUnit::FromValue(kValue); + EXPECT_EQ(-unit.ToValue(), -kValue); + + // Check infinity. + EXPECT_EQ(-TestUnit::PlusInfinity(), TestUnit::MinusInfinity()); + EXPECT_EQ(-TestUnit::MinusInfinity(), TestUnit::PlusInfinity()); +} + } // namespace test } // namespace webrtc