Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: webrtc/modules/congestion_controller/trendline_estimator_unittest.cc

Issue 2577463002: Avoid precision loss in TrendlineEstimator from int64_t -> double conversion (Closed)
Patch Set: Avoid precision loss in TrendlineFilter by passing the arrival time as an int64_t rather than a dou… Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/congestion_controller/trendline_estimator_unittest.cc
diff --git a/webrtc/modules/congestion_controller/trendline_estimator_unittest.cc b/webrtc/modules/congestion_controller/trendline_estimator_unittest.cc
index 51778e6cf37f2b099b0c518b070b363ba4473027..04f30f0c71a02807850487548af1a1d5815b46b6 100644
--- a/webrtc/modules/congestion_controller/trendline_estimator_unittest.cc
+++ b/webrtc/modules/congestion_controller/trendline_estimator_unittest.cc
@@ -24,12 +24,12 @@ constexpr int64_t kAvgTimeBetweenPackets = 10;
TEST(TrendlineEstimator, PerfectLineSlopeOneHalf) {
TrendlineEstimator estimator(kWindowSize, kSmoothing, kGain);
Random rand(0x1234567);
- double now_ms = rand.Rand<double>() * 10000;
+ int64_t arrival_time_ms = rand.Rand(1, 1000000);
for (size_t i = 1; i < 2 * kWindowSize; i++) {
- double send_delta = rand.Rand<double>() * 2 * kAvgTimeBetweenPackets;
- double recv_delta = 2 * send_delta;
- now_ms += recv_delta;
- estimator.Update(recv_delta, send_delta, now_ms);
+ int64_t send_delta = rand.Rand(2 * kAvgTimeBetweenPackets);
+ int64_t recv_delta = 2 * send_delta;
+ arrival_time_ms += recv_delta;
+ estimator.Update(recv_delta, send_delta, arrival_time_ms);
if (i < kWindowSize)
EXPECT_NEAR(estimator.trendline_slope(), 0, 0.001);
else
@@ -40,12 +40,12 @@ TEST(TrendlineEstimator, PerfectLineSlopeOneHalf) {
TEST(TrendlineEstimator, PerfectLineSlopeMinusOne) {
TrendlineEstimator estimator(kWindowSize, kSmoothing, kGain);
Random rand(0x1234567);
- double now_ms = rand.Rand<double>() * 10000;
+ int64_t arrival_time_ms = rand.Rand(1, 1000000);
for (size_t i = 1; i < 2 * kWindowSize; i++) {
- double send_delta = rand.Rand<double>() * 2 * kAvgTimeBetweenPackets;
- double recv_delta = 0.5 * send_delta;
- now_ms += recv_delta;
- estimator.Update(recv_delta, send_delta, now_ms);
+ int64_t send_delta = 2 * rand.Rand(kAvgTimeBetweenPackets);
+ int64_t recv_delta = send_delta / 2; // This division is always exact.
+ arrival_time_ms += recv_delta;
+ estimator.Update(recv_delta, send_delta, arrival_time_ms);
if (i < kWindowSize)
EXPECT_NEAR(estimator.trendline_slope(), 0, 0.001);
else
@@ -56,12 +56,12 @@ TEST(TrendlineEstimator, PerfectLineSlopeMinusOne) {
TEST(TrendlineEstimator, PerfectLineSlopeZero) {
TrendlineEstimator estimator(kWindowSize, kSmoothing, kGain);
Random rand(0x1234567);
- double now_ms = rand.Rand<double>() * 10000;
+ int64_t arrival_time_ms = rand.Rand(1, 1000000);
for (size_t i = 1; i < 2 * kWindowSize; i++) {
- double send_delta = rand.Rand<double>() * 2 * kAvgTimeBetweenPackets;
- double recv_delta = send_delta;
- now_ms += recv_delta;
- estimator.Update(recv_delta, send_delta, now_ms);
+ int64_t send_delta = rand.Rand(2 * kAvgTimeBetweenPackets);
+ int64_t recv_delta = send_delta;
+ arrival_time_ms += recv_delta;
+ estimator.Update(recv_delta, send_delta, arrival_time_ms);
EXPECT_NEAR(estimator.trendline_slope(), 0, 0.001);
}
}
@@ -69,12 +69,12 @@ TEST(TrendlineEstimator, PerfectLineSlopeZero) {
TEST(TrendlineEstimator, JitteryLineSlopeOneHalf) {
TrendlineEstimator estimator(kWindowSize, kSmoothing, kGain);
Random rand(0x1234567);
- double now_ms = rand.Rand<double>() * 10000;
+ int64_t arrival_time_ms = rand.Rand(1, 1000000);
for (size_t i = 1; i < 2 * kWindowSize; i++) {
- double send_delta = rand.Rand<double>() * 2 * kAvgTimeBetweenPackets;
- double recv_delta = 2 * send_delta + rand.Gaussian(0, send_delta / 3);
- now_ms += recv_delta;
- estimator.Update(recv_delta, send_delta, now_ms);
+ int64_t send_delta = rand.Rand(2 * kAvgTimeBetweenPackets);
+ int64_t recv_delta = 2 * send_delta + rand.Gaussian(0, send_delta / 3);
+ arrival_time_ms += recv_delta;
+ estimator.Update(recv_delta, send_delta, arrival_time_ms);
if (i < kWindowSize)
EXPECT_NEAR(estimator.trendline_slope(), 0, 0.001);
else
@@ -85,12 +85,12 @@ TEST(TrendlineEstimator, JitteryLineSlopeOneHalf) {
TEST(TrendlineEstimator, JitteryLineSlopeMinusOne) {
TrendlineEstimator estimator(kWindowSize, kSmoothing, kGain);
Random rand(0x1234567);
- double now_ms = rand.Rand<double>() * 10000;
+ int64_t arrival_time_ms = rand.Rand(1000000);
for (size_t i = 1; i < 2 * kWindowSize; i++) {
- double send_delta = rand.Rand<double>() * 2 * kAvgTimeBetweenPackets;
- double recv_delta = 0.5 * send_delta + rand.Gaussian(0, send_delta / 25);
- now_ms += recv_delta;
- estimator.Update(recv_delta, send_delta, now_ms);
+ int64_t send_delta = 2 * rand.Rand(kAvgTimeBetweenPackets);
+ int64_t recv_delta = send_delta / 2 + rand.Gaussian(0, send_delta / 25);
+ arrival_time_ms += recv_delta;
+ estimator.Update(recv_delta, send_delta, arrival_time_ms);
if (i < kWindowSize)
EXPECT_NEAR(estimator.trendline_slope(), 0, 0.001);
else
@@ -101,12 +101,12 @@ TEST(TrendlineEstimator, JitteryLineSlopeMinusOne) {
TEST(TrendlineEstimator, JitteryLineSlopeZero) {
TrendlineEstimator estimator(kWindowSize, kSmoothing, kGain);
Random rand(0x1234567);
- double now_ms = rand.Rand<double>() * 10000;
+ int64_t arrival_time_ms = rand.Rand(1, 1000000);
for (size_t i = 1; i < 2 * kWindowSize; i++) {
- double send_delta = rand.Rand<double>() * 2 * kAvgTimeBetweenPackets;
- double recv_delta = send_delta + rand.Gaussian(0, send_delta / 8);
- now_ms += recv_delta;
- estimator.Update(recv_delta, send_delta, now_ms);
+ int64_t send_delta = rand.Rand(2 * kAvgTimeBetweenPackets);
+ int64_t recv_delta = send_delta + rand.Gaussian(0, send_delta / 8);
+ arrival_time_ms += recv_delta;
+ estimator.Update(recv_delta, send_delta, arrival_time_ms);
EXPECT_NEAR(estimator.trendline_slope(), 0, 0.1);
}
}

Powered by Google App Engine
This is Rietveld 408576698