diff options
Diffstat (limited to 'webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc')
-rw-r--r-- | webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework_unittest.cc | 62 |
1 files changed, 18 insertions, 44 deletions
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 627260678b..6bdfa847df 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 { |