xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/quic_bandwidth_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "quiche/quic/core/quic_bandwidth.h"
6 
7 #include <limits>
8 
9 #include "quiche/quic/core/quic_time.h"
10 #include "quiche/quic/platform/api/quic_test.h"
11 
12 namespace quic {
13 namespace test {
14 
15 class QuicBandwidthTest : public QuicTest {};
16 
TEST_F(QuicBandwidthTest,FromTo)17 TEST_F(QuicBandwidthTest, FromTo) {
18   EXPECT_EQ(QuicBandwidth::FromKBitsPerSecond(1),
19             QuicBandwidth::FromBitsPerSecond(1000));
20   EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(1),
21             QuicBandwidth::FromBytesPerSecond(1000));
22   EXPECT_EQ(QuicBandwidth::FromBitsPerSecond(8000),
23             QuicBandwidth::FromBytesPerSecond(1000));
24   EXPECT_EQ(QuicBandwidth::FromKBitsPerSecond(8),
25             QuicBandwidth::FromKBytesPerSecond(1));
26 
27   EXPECT_EQ(0, QuicBandwidth::Zero().ToBitsPerSecond());
28   EXPECT_EQ(0, QuicBandwidth::Zero().ToKBitsPerSecond());
29   EXPECT_EQ(0, QuicBandwidth::Zero().ToBytesPerSecond());
30   EXPECT_EQ(0, QuicBandwidth::Zero().ToKBytesPerSecond());
31 
32   EXPECT_EQ(1, QuicBandwidth::FromBitsPerSecond(1000).ToKBitsPerSecond());
33   EXPECT_EQ(1000, QuicBandwidth::FromKBitsPerSecond(1).ToBitsPerSecond());
34   EXPECT_EQ(1, QuicBandwidth::FromBytesPerSecond(1000).ToKBytesPerSecond());
35   EXPECT_EQ(1000, QuicBandwidth::FromKBytesPerSecond(1).ToBytesPerSecond());
36 }
37 
TEST_F(QuicBandwidthTest,Add)38 TEST_F(QuicBandwidthTest, Add) {
39   QuicBandwidth bandwidht_1 = QuicBandwidth::FromKBitsPerSecond(1);
40   QuicBandwidth bandwidht_2 = QuicBandwidth::FromKBytesPerSecond(1);
41 
42   EXPECT_EQ(9000, (bandwidht_1 + bandwidht_2).ToBitsPerSecond());
43   EXPECT_EQ(9000, (bandwidht_2 + bandwidht_1).ToBitsPerSecond());
44 }
45 
TEST_F(QuicBandwidthTest,Subtract)46 TEST_F(QuicBandwidthTest, Subtract) {
47   QuicBandwidth bandwidht_1 = QuicBandwidth::FromKBitsPerSecond(1);
48   QuicBandwidth bandwidht_2 = QuicBandwidth::FromKBytesPerSecond(1);
49 
50   EXPECT_EQ(7000, (bandwidht_2 - bandwidht_1).ToBitsPerSecond());
51 }
52 
TEST_F(QuicBandwidthTest,TimeDelta)53 TEST_F(QuicBandwidthTest, TimeDelta) {
54   EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(1000),
55             QuicBandwidth::FromBytesAndTimeDelta(
56                 1000, QuicTime::Delta::FromMilliseconds(1)));
57 
58   EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(10),
59             QuicBandwidth::FromBytesAndTimeDelta(
60                 1000, QuicTime::Delta::FromMilliseconds(100)));
61 
62   EXPECT_EQ(QuicBandwidth::Zero(), QuicBandwidth::FromBytesAndTimeDelta(
63                                        0, QuicTime::Delta::FromSeconds(9)));
64 
65   EXPECT_EQ(
66       QuicBandwidth::FromBitsPerSecond(1),
67       QuicBandwidth::FromBytesAndTimeDelta(1, QuicTime::Delta::FromSeconds(9)));
68 }
69 
TEST_F(QuicBandwidthTest,Scale)70 TEST_F(QuicBandwidthTest, Scale) {
71   EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(500),
72             QuicBandwidth::FromKBytesPerSecond(1000) * 0.5f);
73   EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(750),
74             0.75f * QuicBandwidth::FromKBytesPerSecond(1000));
75   EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(1250),
76             QuicBandwidth::FromKBytesPerSecond(1000) * 1.25f);
77 
78   // Ensure we are rounding correctly within a 1bps level of precision.
79   EXPECT_EQ(QuicBandwidth::FromBitsPerSecond(5),
80             QuicBandwidth::FromBitsPerSecond(9) * 0.5f);
81   EXPECT_EQ(QuicBandwidth::FromBitsPerSecond(2),
82             QuicBandwidth::FromBitsPerSecond(12) * 0.2f);
83 }
84 
TEST_F(QuicBandwidthTest,BytesPerPeriod)85 TEST_F(QuicBandwidthTest, BytesPerPeriod) {
86   EXPECT_EQ(2000, QuicBandwidth::FromKBytesPerSecond(2000).ToBytesPerPeriod(
87                       QuicTime::Delta::FromMilliseconds(1)));
88   EXPECT_EQ(2, QuicBandwidth::FromKBytesPerSecond(2000).ToKBytesPerPeriod(
89                    QuicTime::Delta::FromMilliseconds(1)));
90   EXPECT_EQ(200000, QuicBandwidth::FromKBytesPerSecond(2000).ToBytesPerPeriod(
91                         QuicTime::Delta::FromMilliseconds(100)));
92   EXPECT_EQ(200, QuicBandwidth::FromKBytesPerSecond(2000).ToKBytesPerPeriod(
93                      QuicTime::Delta::FromMilliseconds(100)));
94 
95   // 1599 * 1001 = 1600599 bits/ms = 200.074875 bytes/s.
96   EXPECT_EQ(200, QuicBandwidth::FromBitsPerSecond(1599).ToBytesPerPeriod(
97                      QuicTime::Delta::FromMilliseconds(1001)));
98 
99   EXPECT_EQ(200, QuicBandwidth::FromBitsPerSecond(1599).ToKBytesPerPeriod(
100                      QuicTime::Delta::FromSeconds(1001)));
101 }
102 
TEST_F(QuicBandwidthTest,TransferTime)103 TEST_F(QuicBandwidthTest, TransferTime) {
104   EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
105             QuicBandwidth::FromKBytesPerSecond(1).TransferTime(1000));
106   EXPECT_EQ(QuicTime::Delta::Zero(), QuicBandwidth::Zero().TransferTime(1000));
107 }
108 
TEST_F(QuicBandwidthTest,RelOps)109 TEST_F(QuicBandwidthTest, RelOps) {
110   const QuicBandwidth b1 = QuicBandwidth::FromKBitsPerSecond(1);
111   const QuicBandwidth b2 = QuicBandwidth::FromKBytesPerSecond(2);
112   EXPECT_EQ(b1, b1);
113   EXPECT_NE(b1, b2);
114   EXPECT_LT(b1, b2);
115   EXPECT_GT(b2, b1);
116   EXPECT_LE(b1, b1);
117   EXPECT_LE(b1, b2);
118   EXPECT_GE(b1, b1);
119   EXPECT_GE(b2, b1);
120 }
121 
TEST_F(QuicBandwidthTest,DebuggingValue)122 TEST_F(QuicBandwidthTest, DebuggingValue) {
123   EXPECT_EQ("128 bits/s (16 bytes/s)",
124             QuicBandwidth::FromBytesPerSecond(16).ToDebuggingValue());
125   EXPECT_EQ("4096 bits/s (512 bytes/s)",
126             QuicBandwidth::FromBytesPerSecond(512).ToDebuggingValue());
127 
128   QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(1000 * 50);
129   EXPECT_EQ("400.00 kbits/s (50.00 kbytes/s)", bandwidth.ToDebuggingValue());
130 
131   bandwidth = bandwidth * 1000;
132   EXPECT_EQ("400.00 Mbits/s (50.00 Mbytes/s)", bandwidth.ToDebuggingValue());
133 
134   bandwidth = bandwidth * 1000;
135   EXPECT_EQ("400.00 Gbits/s (50.00 Gbytes/s)", bandwidth.ToDebuggingValue());
136 }
137 
TEST_F(QuicBandwidthTest,SpecialValues)138 TEST_F(QuicBandwidthTest, SpecialValues) {
139   EXPECT_EQ(0, QuicBandwidth::Zero().ToBitsPerSecond());
140   EXPECT_EQ(std::numeric_limits<int64_t>::max(),
141             QuicBandwidth::Infinite().ToBitsPerSecond());
142 
143   EXPECT_TRUE(QuicBandwidth::Zero().IsZero());
144   EXPECT_FALSE(QuicBandwidth::Zero().IsInfinite());
145 
146   EXPECT_TRUE(QuicBandwidth::Infinite().IsInfinite());
147   EXPECT_FALSE(QuicBandwidth::Infinite().IsZero());
148 }
149 
150 }  // namespace test
151 }  // namespace quic
152