| // Copyright (c) 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/third_party/quiche/src/quic/quartc/quartc_interval_counter.h" |
| |
| #include "net/third_party/quiche/src/quic/core/quic_interval.h" |
| #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" |
| |
| namespace quic { |
| namespace { |
| |
| class QuartcIntervalCounterTest : public QuicTest { |
| protected: |
| QuartcIntervalCounter<int> counter_; |
| }; |
| |
| void ExpectCount(const QuartcIntervalCounter<int>& counter, |
| QuicInterval<int> interval, |
| size_t count) { |
| for (int i = interval.min(); i < interval.max(); ++i) { |
| EXPECT_EQ(counter.Count(i), count) << "i=" << i; |
| } |
| } |
| |
| TEST_F(QuartcIntervalCounterTest, InitiallyEmpty) { |
| EXPECT_EQ(counter_.MaxCount(), 0u); |
| } |
| |
| TEST_F(QuartcIntervalCounterTest, SameInterval) { |
| counter_.AddInterval(QuicInterval<int>(0, 6)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 6), 1); |
| |
| counter_.AddInterval(QuicInterval<int>(0, 6)); |
| EXPECT_EQ(counter_.MaxCount(), 2u); |
| ExpectCount(counter_, QuicInterval<int>(0, 6), 2); |
| } |
| |
| TEST_F(QuartcIntervalCounterTest, DisjointIntervals) { |
| counter_.AddInterval(QuicInterval<int>(0, 5)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 5), 1); |
| ExpectCount(counter_, QuicInterval<int>(5, 10), 0); |
| |
| counter_.AddInterval(QuicInterval<int>(5, 10)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 5), 1); |
| ExpectCount(counter_, QuicInterval<int>(5, 10), 1); |
| } |
| |
| TEST_F(QuartcIntervalCounterTest, OverlappingIntervals) { |
| counter_.AddInterval(QuicInterval<int>(0, 6)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 6), 1); |
| ExpectCount(counter_, QuicInterval<int>(6, 10), 0); |
| |
| counter_.AddInterval(QuicInterval<int>(5, 10)); |
| EXPECT_EQ(counter_.MaxCount(), 2u); |
| ExpectCount(counter_, QuicInterval<int>(0, 5), 1); |
| EXPECT_EQ(counter_.Count(5), 2u); |
| ExpectCount(counter_, QuicInterval<int>(6, 10), 1); |
| } |
| |
| TEST_F(QuartcIntervalCounterTest, IntervalsWithGapThenOverlap) { |
| counter_.AddInterval(QuicInterval<int>(0, 4)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 4), 1); |
| ExpectCount(counter_, QuicInterval<int>(4, 10), 0); |
| |
| counter_.AddInterval(QuicInterval<int>(7, 10)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 4), 1); |
| ExpectCount(counter_, QuicInterval<int>(4, 7), 0); |
| ExpectCount(counter_, QuicInterval<int>(7, 10), 1); |
| |
| counter_.AddInterval(QuicInterval<int>(3, 8)); |
| EXPECT_EQ(counter_.MaxCount(), 2u); |
| ExpectCount(counter_, QuicInterval<int>(0, 3), 1); |
| EXPECT_EQ(counter_.Count(3), 2u); |
| ExpectCount(counter_, QuicInterval<int>(4, 7), 1); |
| EXPECT_EQ(counter_.Count(7), 2u); |
| ExpectCount(counter_, QuicInterval<int>(8, 10), 1); |
| } |
| |
| TEST_F(QuartcIntervalCounterTest, RemoveIntervals) { |
| counter_.AddInterval(QuicInterval<int>(0, 5)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 5), 1); |
| |
| counter_.AddInterval(QuicInterval<int>(4, 10)); |
| EXPECT_EQ(counter_.MaxCount(), 2u); |
| ExpectCount(counter_, QuicInterval<int>(0, 4), 1); |
| EXPECT_EQ(counter_.Count(4), 2u); |
| ExpectCount(counter_, QuicInterval<int>(5, 10), 1); |
| |
| counter_.RemoveInterval(QuicInterval<int>(0, 5)); |
| EXPECT_EQ(counter_.MaxCount(), 1u); |
| ExpectCount(counter_, QuicInterval<int>(0, 5), 0); |
| ExpectCount(counter_, QuicInterval<int>(5, 10), 1); |
| |
| counter_.RemoveInterval(QuicInterval<int>(5, 10)); |
| EXPECT_EQ(counter_.MaxCount(), 0u); |
| ExpectCount(counter_, QuicInterval<int>(0, 10), 0); |
| } |
| |
| } // namespace |
| } // namespace quic |