blob: fe7f591dc0d96231298f24b25c10bef237c5e10b [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) {
Sebastian Janssonc1c8b8e2018-08-07 15:29:04 +020018 constexpr int64_t kValue = 12345;
Sebastian Jansson8e064192018-08-07 12:34:33 +020019 constexpr DataSize kDataSizeZero = DataSize::Zero();
20 constexpr DataSize kDataSizeInf = DataSize::Infinity();
21 static_assert(kDataSizeZero.IsZero(), "");
22 static_assert(kDataSizeInf.IsInfinite(), "");
Sebastian Janssonc1c8b8e2018-08-07 15:29:04 +020023 static_assert(kDataSizeInf.bytes_or(-1) == -1, "");
24 static_assert(kDataSizeInf > kDataSizeZero, "");
25
26 constexpr DataSize kDataSize = DataSize::Bytes<kValue>();
27 static_assert(kDataSize.bytes_or(-1) == kValue, "");
28
29 EXPECT_EQ(kDataSize.bytes(), kValue);
Sebastian Jansson8e064192018-08-07 12:34:33 +020030}
31
Sebastian Jansson30bd4032018-04-13 13:56:17 +020032TEST(DataSizeTest, GetBackSameValues) {
33 const int64_t kValue = 123 * 8;
34 EXPECT_EQ(DataSize::bytes(kValue).bytes(), kValue);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020035}
36
Sebastian Jansson30bd4032018-04-13 13:56:17 +020037TEST(DataSizeTest, IdentityChecks) {
38 const int64_t kValue = 3000;
39 EXPECT_TRUE(DataSize::Zero().IsZero());
40 EXPECT_FALSE(DataSize::bytes(kValue).IsZero());
41
42 EXPECT_TRUE(DataSize::Infinity().IsInfinite());
43 EXPECT_FALSE(DataSize::Zero().IsInfinite());
44 EXPECT_FALSE(DataSize::bytes(kValue).IsInfinite());
45
46 EXPECT_FALSE(DataSize::Infinity().IsFinite());
47 EXPECT_TRUE(DataSize::bytes(kValue).IsFinite());
48 EXPECT_TRUE(DataSize::Zero().IsFinite());
49}
50
51TEST(DataSizeTest, ComparisonOperators) {
52 const int64_t kSmall = 450;
53 const int64_t kLarge = 451;
54 const DataSize small = DataSize::bytes(kSmall);
55 const DataSize large = DataSize::bytes(kLarge);
56
57 EXPECT_EQ(DataSize::Zero(), DataSize::bytes(0));
58 EXPECT_EQ(DataSize::Infinity(), DataSize::Infinity());
59 EXPECT_EQ(small, small);
60 EXPECT_LE(small, small);
61 EXPECT_GE(small, small);
62 EXPECT_NE(small, large);
63 EXPECT_LE(small, large);
64 EXPECT_LT(small, large);
65 EXPECT_GE(large, small);
66 EXPECT_GT(large, small);
67 EXPECT_LT(DataSize::Zero(), small);
68 EXPECT_GT(DataSize::Infinity(), large);
69}
70
Sebastian Jansson942b3602018-05-30 15:47:44 +020071TEST(DataSizeTest, ConvertsToAndFromDouble) {
72 const int64_t kValue = 128;
73 const double kDoubleValue = static_cast<double>(kValue);
74
75 EXPECT_EQ(DataSize::bytes(kValue).bytes<double>(), kDoubleValue);
76 EXPECT_EQ(DataSize::bytes(kDoubleValue).bytes(), kValue);
77
78 const double kInfinity = std::numeric_limits<double>::infinity();
79 EXPECT_EQ(DataSize::Infinity().bytes<double>(), kInfinity);
80 EXPECT_TRUE(DataSize::bytes(kInfinity).IsInfinite());
81}
82
Sebastian Jansson30bd4032018-04-13 13:56:17 +020083TEST(DataSizeTest, MathOperations) {
84 const int64_t kValueA = 450;
85 const int64_t kValueB = 267;
86 const DataSize size_a = DataSize::bytes(kValueA);
87 const DataSize size_b = DataSize::bytes(kValueB);
88 EXPECT_EQ((size_a + size_b).bytes(), kValueA + kValueB);
89 EXPECT_EQ((size_a - size_b).bytes(), kValueA - kValueB);
90
91 const int32_t kInt32Value = 123;
92 const double kFloatValue = 123.0;
93 EXPECT_EQ((size_a * kValueB).bytes(), kValueA * kValueB);
94 EXPECT_EQ((size_a * kInt32Value).bytes(), kValueA * kInt32Value);
95 EXPECT_EQ((size_a * kFloatValue).bytes(), kValueA * kFloatValue);
96
97 EXPECT_EQ((size_a / 10).bytes(), kValueA / 10);
Sebastian Jansson942b3602018-05-30 15:47:44 +020098 EXPECT_EQ(size_a / size_b, static_cast<double>(kValueA) / kValueB);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020099
100 DataSize mutable_size = DataSize::bytes(kValueA);
101 mutable_size += size_b;
102 EXPECT_EQ(mutable_size.bytes(), kValueA + kValueB);
103 mutable_size -= size_a;
104 EXPECT_EQ(mutable_size.bytes(), kValueB);
105}
106} // namespace test
107} // namespace webrtc