| Index: webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
|
| diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
|
| index 627260678bfb637694aff793f9931cd8d2ec7fed..6bdfa847dfdbb3c392f998954b06c228a521faec 100644
|
| --- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
|
| +++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc
|
| @@ -22,39 +22,6 @@ namespace webrtc {
|
| namespace testing {
|
| namespace bwe {
|
|
|
| -TEST(BweTestFramework_RandomTest, Gaussian) {
|
| - enum {
|
| - kN = 100000,
|
| - kBuckets = 100,
|
| - kMean = 49,
|
| - kStddev = 10
|
| - };
|
| -
|
| - test::Random random(0x12345678);
|
| -
|
| - int buckets[kBuckets] = {0};
|
| - for (int i = 0; i < kN; ++i) {
|
| - int index = random.Gaussian(kMean, kStddev);
|
| - if (index >= 0 && index < kBuckets) {
|
| - buckets[index]++;
|
| - }
|
| - }
|
| -
|
| - const double kPi = 3.14159265358979323846;
|
| - const double kScale = kN / (kStddev * sqrt(2.0 * kPi));
|
| - const double kDiv = -2.0 * kStddev * kStddev;
|
| - double self_corr = 0.0;
|
| - double bucket_corr = 0.0;
|
| - for (int n = 0; n < kBuckets; ++n) {
|
| - double normal_dist = kScale * exp((n - kMean) * (n - kMean) / kDiv);
|
| - self_corr += normal_dist * normal_dist;
|
| - bucket_corr += normal_dist * buckets[n];
|
| - }
|
| - printf("Correlation: %f (random sample), %f (self), %f (quotient)\n",
|
| - bucket_corr, self_corr, bucket_corr / self_corr);
|
| - EXPECT_NEAR(1.0, bucket_corr / self_corr, 0.0004);
|
| -}
|
| -
|
| static bool IsSequenceNumberSorted(const Packets& packets) {
|
| PacketsConstIt last_it = packets.begin();
|
| for (PacketsConstIt it = last_it; it != packets.end(); ++it) {
|
| @@ -533,7 +500,7 @@ TEST(BweTestFramework_JitterFilterTest, Jitter1031) {
|
| TestJitterFilter(1031);
|
| }
|
|
|
| -static void TestReorderFilter(uint16_t reorder_percent, uint16_t near_value) {
|
| +static void TestReorderFilter(uint16_t reorder_percent) {
|
| const uint16_t kPacketCount = 10000;
|
|
|
| // Generate packets with 10 ms interval.
|
| @@ -559,16 +526,23 @@ static void TestReorderFilter(uint16_t reorder_percent, uint16_t near_value) {
|
| for (auto* packet : packets) {
|
| const MediaPacket* media_packet = static_cast<const MediaPacket*>(packet);
|
| uint16_t sequence_number = media_packet->header().sequenceNumber;
|
| + // The expected position for sequence number s is in position s-1.
|
| if (sequence_number < last_sequence_number) {
|
| distance += last_sequence_number - sequence_number;
|
| }
|
| last_sequence_number = sequence_number;
|
| }
|
|
|
| - // Because reordering is random, we allow a threshold when comparing. The
|
| - // maximum distance a packet can be moved is PacketCount - 1.
|
| - EXPECT_NEAR(
|
| - ((kPacketCount - 1) * reorder_percent) / 100, distance, near_value);
|
| + // The probability that two elements are swapped is p = reorder_percent / 100.
|
| + double p = static_cast<double>(reorder_percent) / 100;
|
| + // The expected number of swaps we perform is p * (PacketCount - 1),
|
| + // and each swap increases the distance by one.
|
| + double mean = p * (kPacketCount - 1);
|
| + // If pair i is chosen to be swapped with probability p, the variance for that
|
| + // pair is p * (1 - p). Since there are (kPacketCount - 1) independent pairs,
|
| + // the variance for the number of swaps is (kPacketCount - 1) * p * (1 - p).
|
| + double std_deviation = sqrt((kPacketCount - 1) * p * (1 - p));
|
| + EXPECT_NEAR(mean, distance, 3 * std_deviation);
|
|
|
| for (auto* packet : packets)
|
| delete packet;
|
| @@ -576,23 +550,23 @@ static void TestReorderFilter(uint16_t reorder_percent, uint16_t near_value) {
|
|
|
| TEST(BweTestFramework_ReorderFilterTest, Reorder0) {
|
| // For 0% reordering, no packets should have been moved, so result is exact.
|
| - TestReorderFilter(0, 0);
|
| + TestReorderFilter(0);
|
| }
|
|
|
| TEST(BweTestFramework_ReorderFilterTest, Reorder10) {
|
| - TestReorderFilter(10, 30);
|
| + TestReorderFilter(10);
|
| }
|
|
|
| TEST(BweTestFramework_ReorderFilterTest, Reorder20) {
|
| - TestReorderFilter(20, 20);
|
| + TestReorderFilter(20);
|
| }
|
|
|
| TEST(BweTestFramework_ReorderFilterTest, Reorder50) {
|
| - TestReorderFilter(50, 20);
|
| + TestReorderFilter(50);
|
| }
|
|
|
| TEST(BweTestFramework_ReorderFilterTest, Reorder70) {
|
| - TestReorderFilter(70, 20);
|
| + TestReorderFilter(70);
|
| }
|
|
|
| TEST(BweTestFramework_ReorderFilterTest, Reorder100) {
|
| @@ -600,7 +574,7 @@ TEST(BweTestFramework_ReorderFilterTest, Reorder100) {
|
| // adjacent packets, when the likelihood of a swap is 1.0, a swap will always
|
| // occur, so the stream will be in order except for the first packet, which
|
| // has been moved to the end. Therefore we expect the result to be exact here.
|
| - TestReorderFilter(100.0, 0);
|
| + TestReorderFilter(100.0);
|
| }
|
|
|
| class BweTestFramework_ChokeFilterTest : public ::testing::Test {
|
|
|