blob: e8e16362c572507a0a73d2243c71922b89c09ca8 [file] [log] [blame]
Sebastian Jansson30bd4032018-04-13 13:56:17 +02001/*
2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Sebastian Jansson6fae6ec2018-05-08 10:43:18 +020011#include "api/units/data_size.h"
Sebastian Jansson30bd4032018-04-13 13:56:17 +020012#include "test/gtest.h"
13
14namespace webrtc {
15namespace test {
16
Sebastian Jansson8e064192018-08-07 12:34:33 +020017TEST(DataSizeTest, ConstExpr) {
18 constexpr DataSize kDataSizeZero = DataSize::Zero();
19 constexpr DataSize kDataSizeInf = DataSize::Infinity();
20 static_assert(kDataSizeZero.IsZero(), "");
21 static_assert(kDataSizeInf.IsInfinite(), "");
22}
23
Sebastian Jansson30bd4032018-04-13 13:56:17 +020024TEST(DataSizeTest, GetBackSameValues) {
25 const int64_t kValue = 123 * 8;
26 EXPECT_EQ(DataSize::bytes(kValue).bytes(), kValue);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020027}
28
Sebastian Jansson30bd4032018-04-13 13:56:17 +020029TEST(DataSizeTest, IdentityChecks) {
30 const int64_t kValue = 3000;
31 EXPECT_TRUE(DataSize::Zero().IsZero());
32 EXPECT_FALSE(DataSize::bytes(kValue).IsZero());
33
34 EXPECT_TRUE(DataSize::Infinity().IsInfinite());
35 EXPECT_FALSE(DataSize::Zero().IsInfinite());
36 EXPECT_FALSE(DataSize::bytes(kValue).IsInfinite());
37
38 EXPECT_FALSE(DataSize::Infinity().IsFinite());
39 EXPECT_TRUE(DataSize::bytes(kValue).IsFinite());
40 EXPECT_TRUE(DataSize::Zero().IsFinite());
41}
42
43TEST(DataSizeTest, ComparisonOperators) {
44 const int64_t kSmall = 450;
45 const int64_t kLarge = 451;
46 const DataSize small = DataSize::bytes(kSmall);
47 const DataSize large = DataSize::bytes(kLarge);
48
49 EXPECT_EQ(DataSize::Zero(), DataSize::bytes(0));
50 EXPECT_EQ(DataSize::Infinity(), DataSize::Infinity());
51 EXPECT_EQ(small, small);
52 EXPECT_LE(small, small);
53 EXPECT_GE(small, small);
54 EXPECT_NE(small, large);
55 EXPECT_LE(small, large);
56 EXPECT_LT(small, large);
57 EXPECT_GE(large, small);
58 EXPECT_GT(large, small);
59 EXPECT_LT(DataSize::Zero(), small);
60 EXPECT_GT(DataSize::Infinity(), large);
61}
62
Sebastian Jansson942b3602018-05-30 15:47:44 +020063TEST(DataSizeTest, ConvertsToAndFromDouble) {
64 const int64_t kValue = 128;
65 const double kDoubleValue = static_cast<double>(kValue);
66
67 EXPECT_EQ(DataSize::bytes(kValue).bytes<double>(), kDoubleValue);
68 EXPECT_EQ(DataSize::bytes(kDoubleValue).bytes(), kValue);
69
70 const double kInfinity = std::numeric_limits<double>::infinity();
71 EXPECT_EQ(DataSize::Infinity().bytes<double>(), kInfinity);
72 EXPECT_TRUE(DataSize::bytes(kInfinity).IsInfinite());
73}
74
Sebastian Jansson30bd4032018-04-13 13:56:17 +020075TEST(DataSizeTest, MathOperations) {
76 const int64_t kValueA = 450;
77 const int64_t kValueB = 267;
78 const DataSize size_a = DataSize::bytes(kValueA);
79 const DataSize size_b = DataSize::bytes(kValueB);
80 EXPECT_EQ((size_a + size_b).bytes(), kValueA + kValueB);
81 EXPECT_EQ((size_a - size_b).bytes(), kValueA - kValueB);
82
83 const int32_t kInt32Value = 123;
84 const double kFloatValue = 123.0;
85 EXPECT_EQ((size_a * kValueB).bytes(), kValueA * kValueB);
86 EXPECT_EQ((size_a * kInt32Value).bytes(), kValueA * kInt32Value);
87 EXPECT_EQ((size_a * kFloatValue).bytes(), kValueA * kFloatValue);
88
89 EXPECT_EQ((size_a / 10).bytes(), kValueA / 10);
Sebastian Jansson942b3602018-05-30 15:47:44 +020090 EXPECT_EQ(size_a / size_b, static_cast<double>(kValueA) / kValueB);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020091
92 DataSize mutable_size = DataSize::bytes(kValueA);
93 mutable_size += size_b;
94 EXPECT_EQ(mutable_size.bytes(), kValueA + kValueB);
95 mutable_size -= size_a;
96 EXPECT_EQ(mutable_size.bytes(), kValueB);
97}
98} // namespace test
99} // namespace webrtc