blob: ed23dac1675b97482552dcee53e5b1f73fb81602 [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// 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 "net/third_party/quiche/src/quic/core/quic_bandwidth.h"
6#include "net/third_party/quiche/src/quic/core/quic_time.h"
7#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
8
9namespace quic {
10namespace test {
11
12class QuicBandwidthTest : public QuicTest {};
13
14TEST_F(QuicBandwidthTest, FromTo) {
15 EXPECT_EQ(QuicBandwidth::FromKBitsPerSecond(1),
16 QuicBandwidth::FromBitsPerSecond(1000));
17 EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(1),
18 QuicBandwidth::FromBytesPerSecond(1000));
19 EXPECT_EQ(QuicBandwidth::FromBitsPerSecond(8000),
20 QuicBandwidth::FromBytesPerSecond(1000));
21 EXPECT_EQ(QuicBandwidth::FromKBitsPerSecond(8),
22 QuicBandwidth::FromKBytesPerSecond(1));
23
24 EXPECT_EQ(0, QuicBandwidth::Zero().ToBitsPerSecond());
25 EXPECT_EQ(0, QuicBandwidth::Zero().ToKBitsPerSecond());
26 EXPECT_EQ(0, QuicBandwidth::Zero().ToBytesPerSecond());
27 EXPECT_EQ(0, QuicBandwidth::Zero().ToKBytesPerSecond());
28
29 EXPECT_EQ(1, QuicBandwidth::FromBitsPerSecond(1000).ToKBitsPerSecond());
30 EXPECT_EQ(1000, QuicBandwidth::FromKBitsPerSecond(1).ToBitsPerSecond());
31 EXPECT_EQ(1, QuicBandwidth::FromBytesPerSecond(1000).ToKBytesPerSecond());
32 EXPECT_EQ(1000, QuicBandwidth::FromKBytesPerSecond(1).ToBytesPerSecond());
33}
34
35TEST_F(QuicBandwidthTest, Add) {
36 QuicBandwidth bandwidht_1 = QuicBandwidth::FromKBitsPerSecond(1);
37 QuicBandwidth bandwidht_2 = QuicBandwidth::FromKBytesPerSecond(1);
38
39 EXPECT_EQ(9000, (bandwidht_1 + bandwidht_2).ToBitsPerSecond());
40 EXPECT_EQ(9000, (bandwidht_2 + bandwidht_1).ToBitsPerSecond());
41}
42
43TEST_F(QuicBandwidthTest, Subtract) {
44 QuicBandwidth bandwidht_1 = QuicBandwidth::FromKBitsPerSecond(1);
45 QuicBandwidth bandwidht_2 = QuicBandwidth::FromKBytesPerSecond(1);
46
47 EXPECT_EQ(7000, (bandwidht_2 - bandwidht_1).ToBitsPerSecond());
48}
49
50TEST_F(QuicBandwidthTest, TimeDelta) {
51 EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(1000),
52 QuicBandwidth::FromBytesAndTimeDelta(
53 1000, QuicTime::Delta::FromMilliseconds(1)));
54
55 EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(10),
56 QuicBandwidth::FromBytesAndTimeDelta(
57 1000, QuicTime::Delta::FromMilliseconds(100)));
58}
59
60TEST_F(QuicBandwidthTest, Scale) {
61 EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(500),
62 QuicBandwidth::FromKBytesPerSecond(1000) * 0.5f);
63 EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(750),
64 0.75f * QuicBandwidth::FromKBytesPerSecond(1000));
65 EXPECT_EQ(QuicBandwidth::FromKBytesPerSecond(1250),
66 QuicBandwidth::FromKBytesPerSecond(1000) * 1.25f);
67
68 // Ensure we are rounding correctly within a 1bps level of precision.
69 EXPECT_EQ(QuicBandwidth::FromBitsPerSecond(5),
70 QuicBandwidth::FromBitsPerSecond(9) * 0.5f);
71 EXPECT_EQ(QuicBandwidth::FromBitsPerSecond(2),
72 QuicBandwidth::FromBitsPerSecond(12) * 0.2f);
73}
74
75TEST_F(QuicBandwidthTest, BytesPerPeriod) {
76 EXPECT_EQ(2000u, QuicBandwidth::FromKBytesPerSecond(2000).ToBytesPerPeriod(
77 QuicTime::Delta::FromMilliseconds(1)));
78 EXPECT_EQ(2u, QuicBandwidth::FromKBytesPerSecond(2000).ToKBytesPerPeriod(
79 QuicTime::Delta::FromMilliseconds(1)));
80 EXPECT_EQ(200000u, QuicBandwidth::FromKBytesPerSecond(2000).ToBytesPerPeriod(
81 QuicTime::Delta::FromMilliseconds(100)));
82 EXPECT_EQ(200u, QuicBandwidth::FromKBytesPerSecond(2000).ToKBytesPerPeriod(
83 QuicTime::Delta::FromMilliseconds(100)));
84}
85
86TEST_F(QuicBandwidthTest, TransferTime) {
87 EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
88 QuicBandwidth::FromKBytesPerSecond(1).TransferTime(1000));
89 EXPECT_EQ(QuicTime::Delta::Zero(), QuicBandwidth::Zero().TransferTime(1000));
90}
91
92TEST_F(QuicBandwidthTest, RelOps) {
93 const QuicBandwidth b1 = QuicBandwidth::FromKBitsPerSecond(1);
94 const QuicBandwidth b2 = QuicBandwidth::FromKBytesPerSecond(2);
95 EXPECT_EQ(b1, b1);
96 EXPECT_NE(b1, b2);
97 EXPECT_LT(b1, b2);
98 EXPECT_GT(b2, b1);
99 EXPECT_LE(b1, b1);
100 EXPECT_LE(b1, b2);
101 EXPECT_GE(b1, b1);
102 EXPECT_GE(b2, b1);
103}
104
105TEST_F(QuicBandwidthTest, DebugValue) {
106 EXPECT_EQ("128 bits/s (16 bytes/s)",
107 QuicBandwidth::FromBytesPerSecond(16).ToDebugValue());
108 EXPECT_EQ("4096 bits/s (512 bytes/s)",
109 QuicBandwidth::FromBytesPerSecond(512).ToDebugValue());
110
111 QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(1000 * 50);
112 EXPECT_EQ("400.00 kbits/s (50.00 kbytes/s)", bandwidth.ToDebugValue());
113
114 bandwidth = bandwidth * 1000;
115 EXPECT_EQ("400.00 Mbits/s (50.00 Mbytes/s)", bandwidth.ToDebugValue());
116
117 bandwidth = bandwidth * 1000;
118 EXPECT_EQ("400.00 Gbits/s (50.00 Gbytes/s)", bandwidth.ToDebugValue());
119}
120
121} // namespace test
122} // namespace quic