Index: webrtc/modules/audio_coding/audio_network_adaptor/util/threshold_curve_unittest.cc |
diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/util/threshold_curve_unittest.cc b/webrtc/modules/audio_coding/audio_network_adaptor/util/threshold_curve_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e6c45e65fe5a105c4d3139e036d533cbe5e83f0f |
--- /dev/null |
+++ b/webrtc/modules/audio_coding/audio_network_adaptor/util/threshold_curve_unittest.cc |
@@ -0,0 +1,576 @@ |
+/* |
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#include <memory> |
+ |
+#include "webrtc/modules/audio_coding/audio_network_adaptor/util/threshold_curve.h" |
+#include "webrtc/test/gtest.h" |
+ |
+namespace webrtc { |
+ |
+namespace { |
+enum RelativePosition { kBelow, kOn, kAbove }; |
+ |
+void CheckRelativePosition(const ThresholdCurve& curve, |
+ ThresholdCurve::Point point, |
+ RelativePosition pos) { |
+ RTC_CHECK(pos == kBelow || pos == kOn || pos == kAbove); |
+ |
+ EXPECT_EQ(pos == kBelow, curve.IsBelowCurve(point)); |
+ EXPECT_EQ(pos == kAbove, curve.IsAboveCurve(point)); |
+} |
+} // namespace |
+ |
+TEST(ThresholdCurveTest, PointPosition) { |
+ // The points (P1-P2) define the curve. // |
+ // All other points are above/below/on the curve. // |
+ // // |
+ // ^ // |
+ // | | // |
+ // | A F J R V // |
+ // | | // |
+ // | B P1 K S W // |
+ // | \ // |
+ // | \ // |
+ // | \ L // |
+ // | \ // |
+ // | C G M T X // |
+ // | \ // |
+ // | N \ // |
+ // | \ // |
+ // | D H O P2--Y---------------- // |
+ // | E I Q U Z // |
+ // *----------------------------------> // |
+ constexpr ThresholdCurve::Point p1{1000, 2000}; |
+ constexpr ThresholdCurve::Point p2{2000, 1000}; |
+ |
+ RTC_CHECK_GT((p1.x + p2.x) / 2, p1.x); |
+ RTC_CHECK_LT((p1.x + p2.x) / 2, p2.x); |
+ RTC_CHECK_LT((p1.y + p2.y) / 2, p1.y); |
+ RTC_CHECK_GT((p1.y + p2.y) / 2, p2.y); |
+ |
+ const ThresholdCurve curve(p1, p2); |
+ |
+ { |
+ // All cases where the point lies to the left of P1. |
+ constexpr float x = p1.x - 1; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kBelow); // A |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kBelow); // B |
+ CheckRelativePosition(curve, {x, (p1.y + p2.y) / 2}, kBelow); // C |
+ CheckRelativePosition(curve, {x, p2.y + 0}, kBelow); // D |
+ CheckRelativePosition(curve, {x, p2.y - 1}, kBelow); // E |
+ } |
+ |
+ { |
+ // All cases where the point has the same x-value as P1. |
+ constexpr float x = p1.x; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kOn); // F |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kOn); // P1 |
+ CheckRelativePosition(curve, {x, (p1.y + p2.y) / 2}, kBelow); // G |
+ CheckRelativePosition(curve, {x, p2.y + 0}, kBelow); // H |
+ CheckRelativePosition(curve, {x, p2.y - 1}, kBelow); // I |
+ } |
+ |
+ { |
+ // To make sure we're really covering all of the cases, make sure that P1 |
+ // and P2 were chosen so that L would really be below K, and O would really |
+ // be below N. (This would not hold if the Y values are too close together.) |
+ RTC_CHECK_LT(((p1.y + p2.y) / 2) + 1, p1.y); |
+ RTC_CHECK_LT(p2.y, ((p1.y + p2.y) / 2) - 1); |
+ |
+ // All cases where the point's x-value is between P1 and P2. |
+ constexpr float x = (p1.x + p2.x) / 2; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kAbove); // J |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kAbove); // K |
+ CheckRelativePosition(curve, {x, ((p1.y + p2.y) / 2) + 1}, kAbove); // L |
+ CheckRelativePosition(curve, {x, (p1.y + p2.y) / 2}, kOn); // M |
+ CheckRelativePosition(curve, {x, ((p1.y + p2.y) / 2) - 1}, kBelow); // N |
+ CheckRelativePosition(curve, {x, p2.y + 0}, kBelow); // O |
+ CheckRelativePosition(curve, {x, p2.y - 1}, kBelow); // Q |
+ } |
+ |
+ { |
+ // All cases where the point has the same x-value as P2. |
+ constexpr float x = p2.x; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kAbove); // R |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kAbove); // S |
+ CheckRelativePosition(curve, {x, (p1.y + p2.y) / 2}, kAbove); // T |
+ CheckRelativePosition(curve, {x, p2.y + 0}, kOn); // P2 |
+ CheckRelativePosition(curve, {x, p2.y - 1}, kBelow); // U |
+ } |
+ |
+ { |
+ // All cases where the point lies to the right of P2. |
+ constexpr float x = p2.x + 1; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kAbove); // V |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kAbove); // W |
+ CheckRelativePosition(curve, {x, (p1.y + p2.y) / 2}, kAbove); // X |
+ CheckRelativePosition(curve, {x, p2.y + 0}, kOn); // Y |
+ CheckRelativePosition(curve, {x, p2.y - 1}, kBelow); // Z |
+ } |
+} |
+ |
+TEST(ThresholdCurveTest, CurvePointsOnHorizontalLine) { |
+ // The points (P1-P2) define the curve. |
+ // All other points are above/below/on the curve. |
+ // |
+ // ^ |
+ // | | |
+ // | | |
+ // | A D F I K |
+ // | | |
+ // | | |
+ // | B P1--G--P2-L-- |
+ // | C E H J M |
+ // *------------------> |
+ |
+ constexpr ThresholdCurve::Point p1{100, 200}; |
+ constexpr ThresholdCurve::Point p2{p1.x + 1, p1.y}; |
+ |
+ RTC_CHECK_GT((p1.x + p2.x) / 2, p1.x); |
+ RTC_CHECK_LT((p1.x + p2.x) / 2, p2.x); |
+ |
+ const ThresholdCurve curve(p1, p2); |
+ |
+ { |
+ // All cases where the point lies to the left of P1. |
+ constexpr float x = p1.x - 1; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kBelow); // A |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kBelow); // B |
+ CheckRelativePosition(curve, {x, p1.y - 1}, kBelow); // C |
+ } |
+ |
+ { |
+ // All cases where the point has the same x-value as P1. |
+ constexpr float x = p1.x; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kOn); // D |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kOn); // P1 |
+ CheckRelativePosition(curve, {x, p1.y - 1}, kBelow); // E |
+ } |
+ |
+ { |
+ // All cases where the point's x-value is between P1 and P2. |
+ constexpr float x = (p1.x + p2.x) / 2; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kAbove); // F |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kOn); // G |
+ CheckRelativePosition(curve, {x, p1.y - 1}, kBelow); // H |
+ } |
+ |
+ { |
+ // All cases where the point has the same x-value as P2. |
+ constexpr float x = p2.x; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kAbove); // I |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kOn); // P2 |
+ CheckRelativePosition(curve, {x, p1.y - 1}, kBelow); // J |
+ } |
+ |
+ { |
+ // All cases where the point lies to the right of P2. |
+ constexpr float x = p2.x + 1; |
+ CheckRelativePosition(curve, {x, p1.y + 1}, kAbove); // K |
+ CheckRelativePosition(curve, {x, p1.y + 0}, kOn); // L |
+ CheckRelativePosition(curve, {x, p1.y - 1}, kBelow); // M |
+ } |
+} |
+ |
+TEST(ThresholdCurveTest, CurvePointsOnVerticalLine) { |
+ // The points (P1-P2) define the curve. |
+ // All other points are above/below/on the curve. |
+ // |
+ // ^ |
+ // | | |
+ // | A B C |
+ // | | |
+ // | D P1 E |
+ // | | |
+ // | F G H |
+ // | | |
+ // | I P2--J------ |
+ // | K L M |
+ // *------------------> |
+ |
+ constexpr ThresholdCurve::Point p1{100, 200}; |
+ constexpr ThresholdCurve::Point p2{p1.x, p1.y - 1}; |
+ |
+ constexpr float left = p1.x - 1; |
+ constexpr float on = p1.x; |
+ constexpr float right = p1.x + 1; |
+ |
+ RTC_CHECK_LT((p1.y + p2.y) / 2, p1.y); |
+ RTC_CHECK_GT((p1.y + p2.y) / 2, p2.y); |
+ |
+ const ThresholdCurve curve(p1, p2); |
+ |
+ { |
+ // All cases where the point lies above P1. |
+ constexpr float y = p1.y + 1; |
+ CheckRelativePosition(curve, {left, y}, kBelow); // A |
+ CheckRelativePosition(curve, {on, y}, kOn); // B |
+ CheckRelativePosition(curve, {right, y}, kAbove); // C |
+ } |
+ |
+ { |
+ // All cases where the point has the same y-value as P1. |
+ constexpr float y = p1.y; |
+ CheckRelativePosition(curve, {left, y}, kBelow); // D |
+ CheckRelativePosition(curve, {on, y}, kOn); // P1 |
+ CheckRelativePosition(curve, {right, y}, kAbove); // E |
+ } |
+ |
+ { |
+ // All cases where the point's y-value is between P1 and P2. |
+ constexpr float y = (p1.y + p2.y) / 2; |
+ CheckRelativePosition(curve, {left, y}, kBelow); // F |
+ CheckRelativePosition(curve, {on, y}, kOn); // G |
+ CheckRelativePosition(curve, {right, y}, kAbove); // H |
+ } |
+ |
+ { |
+ // All cases where the point has the same y-value as P2. |
+ constexpr float y = p2.y; |
+ CheckRelativePosition(curve, {left, y}, kBelow); // I |
+ CheckRelativePosition(curve, {on, y}, kOn); // P2 |
+ CheckRelativePosition(curve, {right, y}, kOn); // J |
+ } |
+ |
+ { |
+ // All cases where the point lies below P2. |
+ constexpr float y = p2.y - 1; |
+ CheckRelativePosition(curve, {left, y}, kBelow); // K |
+ CheckRelativePosition(curve, {on, y}, kBelow); // L |
+ CheckRelativePosition(curve, {right, y}, kBelow); // M |
+ } |
+} |
+ |
+TEST(ThresholdCurveTest, SinglePointCurve) { |
+ // The points (P1-P2) define the curve. |
+ // All other points are above/below/on the curve. |
+ // |
+ // ^ |
+ // | | |
+ // | A D F |
+ // | | |
+ // | B P---G------ |
+ // | C E H |
+ // *------------------> |
+ |
+ constexpr ThresholdCurve::Point p{100, 200}; |
+ |
+ const ThresholdCurve curve(p, p); |
+ |
+ { |
+ // All cases where the point lies to the left of P. |
+ constexpr float x = p.x - 1; |
+ CheckRelativePosition(curve, {x, p.y + 1}, kBelow); // A |
+ CheckRelativePosition(curve, {x, p.y + 0}, kBelow); // B |
+ CheckRelativePosition(curve, {x, p.y - 1}, kBelow); // C |
+ } |
+ |
+ { |
+ // All cases where the point has the same x-value as P. |
+ constexpr float x = p.x + 0; |
+ CheckRelativePosition(curve, {x, p.y + 1}, kOn); // D |
+ CheckRelativePosition(curve, {x, p.y + 0}, kOn); // P |
+ CheckRelativePosition(curve, {x, p.y - 1}, kBelow); // E |
+ } |
+ |
+ { |
+ // All cases where the point lies to the right of P. |
+ constexpr float x = p.x + 1; |
+ CheckRelativePosition(curve, {x, p.y + 1}, kAbove); // F |
+ CheckRelativePosition(curve, {x, p.y + 0}, kOn); // G |
+ CheckRelativePosition(curve, {x, p.y - 1}, kBelow); // H |
+ } |
+} |
+ |
+TEST(ThresholdCurveTest, TwoCurvesSameProjection) { |
+ // ^ // |
+ // | C1 + C2 // |
+ // | | // |
+ // | |\ // |
+ // | | \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ -------- C2 // |
+ // | --------- C1 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ // Same x-values, but higher on Y. (Can be parallel, but doesn't have to be.) |
+ constexpr ThresholdCurve::Point c2_left{c1_left.x, c1_left.y + 20}; |
+ constexpr ThresholdCurve::Point c2_right{c1_right.x, c1_right.y + 10}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_TRUE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, HigherCurveProjectionWithinLowerProjection) { |
+ // ^ // |
+ // | C1 C2 // |
+ // | | | // |
+ // | | | // |
+ // | \ | // |
+ // | \ | // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ --------- C2 // |
+ // | \ // |
+ // | \ // |
+ // | ---------C1 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ constexpr ThresholdCurve::Point c2_left{6, 11}; |
+ constexpr ThresholdCurve::Point c2_right{9, 7}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_TRUE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, SecondCurvePointsOnFirstCurveExtensions) { |
+ // ^ |
+ // | C1 + C2 // |
+ // | | // |
+ // | |\ // |
+ // | | \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | ----- C1 + C2 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ // Same x-values, but one of the points is higher on Y (the other isn't). |
+ constexpr ThresholdCurve::Point c2_left{c1_left.x, c1_left.y + 2}; |
+ constexpr ThresholdCurve::Point c2_right{c1_right.x + 3, c1_right.y}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_TRUE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, SecondCurveCrossesLeftExtension) { |
+ // ^ // |
+ // | C2 C1 // |
+ // | | | // |
+ // | \| // |
+ // | | // |
+ // | |\ // |
+ // | | \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ ------- C2 // |
+ // | -------- C1 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ constexpr ThresholdCurve::Point c2_left{c1_left.x - 1, c1_left.y + 1}; |
+ constexpr ThresholdCurve::Point c2_right{c1_right.x, c1_right.y + 1}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_FALSE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, SecondCurveCrossesRightExtension) { |
+ // ^ // |
+ // | C1 + C2 // |
+ // | | // |
+ // | |\ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | ----------- C1 // |
+ // | \ // |
+ // | ------- C2 // |
+ // *--------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ constexpr ThresholdCurve::Point c2_left{c1_left.x, c1_left.y + 1}; |
+ constexpr ThresholdCurve::Point c2_right{c1_right.x + 2, c1_right.y - 1}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_FALSE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, SecondCurveCrossesFirstCurveBetweenPoints) { |
+ // ^ // |
+ // | C2 C1 // |
+ // | | | // |
+ // | | | // |
+ // | | \ // |
+ // | | \ // |
+ // | -_ \ // |
+ // | -_ \ // |
+ // | -_\ // |
+ // | -_ // |
+ // | \-_ // |
+ // | \ ---------- C2 // |
+ // | ----------- C1 // |
+ // | // |
+ // | // |
+ // *-------------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ constexpr ThresholdCurve::Point c2_left{4, 9}; |
+ constexpr ThresholdCurve::Point c2_right{10, 6}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ // The test is structured so that the two curves intersect at (8, 7). |
+ RTC_CHECK(!c1_curve.IsAboveCurve({8, 7})); |
+ RTC_CHECK(!c1_curve.IsBelowCurve({8, 7})); |
+ RTC_CHECK(!c2_curve.IsAboveCurve({8, 7})); |
+ RTC_CHECK(!c2_curve.IsBelowCurve({8, 7})); |
+ |
+ EXPECT_FALSE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, SecondCurveRightPointAboveFirstRightExtension) { |
+ // ^ // |
+ // | C1 + C2 // |
+ // | | // |
+ // | |\ // |
+ // | | \ // |
+ // | | \ // |
+ // | | \ // |
+ // | | \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ \ // |
+ // | \ ----- C2 // |
+ // | --------- C1 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_right); |
+ |
+ constexpr ThresholdCurve::Point c2_left{c1_left.x, c1_left.y + 1}; |
+ constexpr ThresholdCurve::Point c2_right{c1_right.x + 1, c1_right.y + 1}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_TRUE(c1_curve <= c2_curve); |
+ EXPECT_FALSE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, IdenticalCurves) { |
+ // ^ // |
+ // | C1 + C2 // |
+ // | | // |
+ // | | // |
+ // | \ // |
+ // | \ // |
+ // | \ // |
+ // | ------- C1 + C2 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point left{5, 10}; |
+ constexpr ThresholdCurve::Point right{10, 5}; |
+ |
+ const ThresholdCurve c1_curve(left, right); |
+ const ThresholdCurve c2_curve(left, right); |
+ |
+ EXPECT_TRUE(c1_curve <= c2_curve); |
+ EXPECT_TRUE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, AlmostIdenticalCurvesSecondContinuesOnOtherLeftSide) { |
+ // ^ // |
+ // | C2 C1 // |
+ // | | | // |
+ // | | | // |
+ // | \| // |
+ // | | // |
+ // | \ // |
+ // | \ // |
+ // | \ // |
+ // | ----- C1 + C2 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_left); |
+ |
+ constexpr ThresholdCurve::Point c2_left{c1_left.x - 1, c1_left.y + 1}; |
+ constexpr ThresholdCurve::Point c2_right = c1_right; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_FALSE(c1_curve <= c2_curve); |
+ EXPECT_TRUE(c2_curve <= c1_curve); |
+} |
+ |
+TEST(ThresholdCurveTest, AlmostIdenticalCurvesSecondContinuesOnOtherRightSide) { |
+ // ^ // |
+ // | C1 + C2 // |
+ // | | // |
+ // | | // |
+ // | \ // |
+ // | \ // |
+ // | \ // |
+ // | \----------- C1 // |
+ // | \ // |
+ // | ---------- C2 // |
+ // *---------------------> // |
+ |
+ constexpr ThresholdCurve::Point c1_left{5, 10}; |
+ constexpr ThresholdCurve::Point c1_right{10, 5}; |
+ const ThresholdCurve c1_curve(c1_left, c1_left); |
+ |
+ constexpr ThresholdCurve::Point c2_left = c1_left; |
+ constexpr ThresholdCurve::Point c2_right{c1_right.x + 1, c1_right.y - 1}; |
+ const ThresholdCurve c2_curve(c2_left, c2_right); |
+ |
+ EXPECT_FALSE(c1_curve <= c2_curve); |
+ EXPECT_TRUE(c2_curve <= c1_curve); |
+} |
+ |
+#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
+TEST(ThresholdCurveTest, WrongOrderPoints) { |
+ std::unique_ptr<ThresholdCurve> curve; |
+ constexpr ThresholdCurve::Point left{5, 10}; |
+ constexpr ThresholdCurve::Point right{10, 5}; |
+ EXPECT_DEATH(curve.reset(new ThresholdCurve(right, left)), ""); |
+} |
+ |
+TEST(ThresholdCurveTest, SlopeMustBeNonPositive) { |
+ std::unique_ptr<ThresholdCurve> curve; |
+ constexpr ThresholdCurve::Point left{5, 5}; |
+ constexpr ThresholdCurve::Point right{10, 10}; |
+ EXPECT_DEATH(curve.reset(new ThresholdCurve(right, left)), ""); |
+} |
+#endif |
+ |
+} // namespace webrtc |