blob: eb8d98c1f06f40b7d0567602554b1ed9067022b9 [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"
Danil Chapovalove638ada2020-02-17 15:00:07 +010012
13#include <limits>
14
Sebastian Jansson30bd4032018-04-13 13:56:17 +020015#include "test/gtest.h"
16
17namespace webrtc {
18namespace test {
19
Sebastian Jansson8e064192018-08-07 12:34:33 +020020TEST(DataSizeTest, ConstExpr) {
Sebastian Janssonc1c8b8e2018-08-07 15:29:04 +020021 constexpr int64_t kValue = 12345;
Sebastian Jansson8e064192018-08-07 12:34:33 +020022 constexpr DataSize kDataSizeZero = DataSize::Zero();
23 constexpr DataSize kDataSizeInf = DataSize::Infinity();
24 static_assert(kDataSizeZero.IsZero(), "");
25 static_assert(kDataSizeInf.IsInfinite(), "");
Sebastian Janssonc1c8b8e2018-08-07 15:29:04 +020026 static_assert(kDataSizeInf.bytes_or(-1) == -1, "");
27 static_assert(kDataSizeInf > kDataSizeZero, "");
28
Danil Chapovalove638ada2020-02-17 15:00:07 +010029 constexpr DataSize kDataSize = DataSize::Bytes(kValue);
Sebastian Janssonc1c8b8e2018-08-07 15:29:04 +020030 static_assert(kDataSize.bytes_or(-1) == kValue, "");
31
32 EXPECT_EQ(kDataSize.bytes(), kValue);
Sebastian Jansson8e064192018-08-07 12:34:33 +020033}
34
Sebastian Jansson30bd4032018-04-13 13:56:17 +020035TEST(DataSizeTest, GetBackSameValues) {
36 const int64_t kValue = 123 * 8;
Danil Chapovalove638ada2020-02-17 15:00:07 +010037 EXPECT_EQ(DataSize::Bytes(kValue).bytes(), kValue);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020038}
39
Sebastian Jansson30bd4032018-04-13 13:56:17 +020040TEST(DataSizeTest, IdentityChecks) {
41 const int64_t kValue = 3000;
42 EXPECT_TRUE(DataSize::Zero().IsZero());
Danil Chapovalove638ada2020-02-17 15:00:07 +010043 EXPECT_FALSE(DataSize::Bytes(kValue).IsZero());
Sebastian Jansson30bd4032018-04-13 13:56:17 +020044
45 EXPECT_TRUE(DataSize::Infinity().IsInfinite());
46 EXPECT_FALSE(DataSize::Zero().IsInfinite());
Danil Chapovalove638ada2020-02-17 15:00:07 +010047 EXPECT_FALSE(DataSize::Bytes(kValue).IsInfinite());
Sebastian Jansson30bd4032018-04-13 13:56:17 +020048
49 EXPECT_FALSE(DataSize::Infinity().IsFinite());
Danil Chapovalove638ada2020-02-17 15:00:07 +010050 EXPECT_TRUE(DataSize::Bytes(kValue).IsFinite());
Sebastian Jansson30bd4032018-04-13 13:56:17 +020051 EXPECT_TRUE(DataSize::Zero().IsFinite());
52}
53
54TEST(DataSizeTest, ComparisonOperators) {
55 const int64_t kSmall = 450;
56 const int64_t kLarge = 451;
Danil Chapovalove638ada2020-02-17 15:00:07 +010057 const DataSize small = DataSize::Bytes(kSmall);
58 const DataSize large = DataSize::Bytes(kLarge);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020059
Danil Chapovalove638ada2020-02-17 15:00:07 +010060 EXPECT_EQ(DataSize::Zero(), DataSize::Bytes(0));
Sebastian Jansson30bd4032018-04-13 13:56:17 +020061 EXPECT_EQ(DataSize::Infinity(), DataSize::Infinity());
62 EXPECT_EQ(small, small);
63 EXPECT_LE(small, small);
64 EXPECT_GE(small, small);
65 EXPECT_NE(small, large);
66 EXPECT_LE(small, large);
67 EXPECT_LT(small, large);
68 EXPECT_GE(large, small);
69 EXPECT_GT(large, small);
70 EXPECT_LT(DataSize::Zero(), small);
71 EXPECT_GT(DataSize::Infinity(), large);
72}
73
Sebastian Jansson942b3602018-05-30 15:47:44 +020074TEST(DataSizeTest, ConvertsToAndFromDouble) {
75 const int64_t kValue = 128;
76 const double kDoubleValue = static_cast<double>(kValue);
77
Danil Chapovalove638ada2020-02-17 15:00:07 +010078 EXPECT_EQ(DataSize::Bytes(kValue).bytes<double>(), kDoubleValue);
79 EXPECT_EQ(DataSize::Bytes(kDoubleValue).bytes(), kValue);
Sebastian Jansson942b3602018-05-30 15:47:44 +020080
81 const double kInfinity = std::numeric_limits<double>::infinity();
82 EXPECT_EQ(DataSize::Infinity().bytes<double>(), kInfinity);
Danil Chapovalove638ada2020-02-17 15:00:07 +010083 EXPECT_TRUE(DataSize::Bytes(kInfinity).IsInfinite());
Sebastian Jansson942b3602018-05-30 15:47:44 +020084}
85
Sebastian Jansson30bd4032018-04-13 13:56:17 +020086TEST(DataSizeTest, MathOperations) {
87 const int64_t kValueA = 450;
88 const int64_t kValueB = 267;
Danil Chapovalove638ada2020-02-17 15:00:07 +010089 const DataSize size_a = DataSize::Bytes(kValueA);
90 const DataSize size_b = DataSize::Bytes(kValueB);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020091 EXPECT_EQ((size_a + size_b).bytes(), kValueA + kValueB);
92 EXPECT_EQ((size_a - size_b).bytes(), kValueA - kValueB);
93
94 const int32_t kInt32Value = 123;
95 const double kFloatValue = 123.0;
96 EXPECT_EQ((size_a * kValueB).bytes(), kValueA * kValueB);
97 EXPECT_EQ((size_a * kInt32Value).bytes(), kValueA * kInt32Value);
98 EXPECT_EQ((size_a * kFloatValue).bytes(), kValueA * kFloatValue);
99
100 EXPECT_EQ((size_a / 10).bytes(), kValueA / 10);
Sebastian Jansson942b3602018-05-30 15:47:44 +0200101 EXPECT_EQ(size_a / size_b, static_cast<double>(kValueA) / kValueB);
Sebastian Jansson30bd4032018-04-13 13:56:17 +0200102
Danil Chapovalove638ada2020-02-17 15:00:07 +0100103 DataSize mutable_size = DataSize::Bytes(kValueA);
Sebastian Jansson30bd4032018-04-13 13:56:17 +0200104 mutable_size += size_b;
105 EXPECT_EQ(mutable_size.bytes(), kValueA + kValueB);
106 mutable_size -= size_a;
107 EXPECT_EQ(mutable_size.bytes(), kValueB);
108}
109} // namespace test
110} // namespace webrtc