blob: 7747258dc820b792ad53a04608512711e0c8c07d [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
17TEST(DataSizeTest, GetBackSameValues) {
18 const int64_t kValue = 123 * 8;
19 EXPECT_EQ(DataSize::bytes(kValue).bytes(), kValue);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020020}
21
Sebastian Jansson30bd4032018-04-13 13:56:17 +020022TEST(DataSizeTest, IdentityChecks) {
23 const int64_t kValue = 3000;
24 EXPECT_TRUE(DataSize::Zero().IsZero());
25 EXPECT_FALSE(DataSize::bytes(kValue).IsZero());
26
27 EXPECT_TRUE(DataSize::Infinity().IsInfinite());
28 EXPECT_FALSE(DataSize::Zero().IsInfinite());
29 EXPECT_FALSE(DataSize::bytes(kValue).IsInfinite());
30
31 EXPECT_FALSE(DataSize::Infinity().IsFinite());
32 EXPECT_TRUE(DataSize::bytes(kValue).IsFinite());
33 EXPECT_TRUE(DataSize::Zero().IsFinite());
34}
35
36TEST(DataSizeTest, ComparisonOperators) {
37 const int64_t kSmall = 450;
38 const int64_t kLarge = 451;
39 const DataSize small = DataSize::bytes(kSmall);
40 const DataSize large = DataSize::bytes(kLarge);
41
42 EXPECT_EQ(DataSize::Zero(), DataSize::bytes(0));
43 EXPECT_EQ(DataSize::Infinity(), DataSize::Infinity());
44 EXPECT_EQ(small, small);
45 EXPECT_LE(small, small);
46 EXPECT_GE(small, small);
47 EXPECT_NE(small, large);
48 EXPECT_LE(small, large);
49 EXPECT_LT(small, large);
50 EXPECT_GE(large, small);
51 EXPECT_GT(large, small);
52 EXPECT_LT(DataSize::Zero(), small);
53 EXPECT_GT(DataSize::Infinity(), large);
54}
55
Sebastian Jansson942b3602018-05-30 15:47:44 +020056TEST(DataSizeTest, ConvertsToAndFromDouble) {
57 const int64_t kValue = 128;
58 const double kDoubleValue = static_cast<double>(kValue);
59
60 EXPECT_EQ(DataSize::bytes(kValue).bytes<double>(), kDoubleValue);
61 EXPECT_EQ(DataSize::bytes(kDoubleValue).bytes(), kValue);
62
63 const double kInfinity = std::numeric_limits<double>::infinity();
64 EXPECT_EQ(DataSize::Infinity().bytes<double>(), kInfinity);
65 EXPECT_TRUE(DataSize::bytes(kInfinity).IsInfinite());
66}
67
Sebastian Jansson30bd4032018-04-13 13:56:17 +020068TEST(DataSizeTest, MathOperations) {
69 const int64_t kValueA = 450;
70 const int64_t kValueB = 267;
71 const DataSize size_a = DataSize::bytes(kValueA);
72 const DataSize size_b = DataSize::bytes(kValueB);
73 EXPECT_EQ((size_a + size_b).bytes(), kValueA + kValueB);
74 EXPECT_EQ((size_a - size_b).bytes(), kValueA - kValueB);
75
76 const int32_t kInt32Value = 123;
77 const double kFloatValue = 123.0;
78 EXPECT_EQ((size_a * kValueB).bytes(), kValueA * kValueB);
79 EXPECT_EQ((size_a * kInt32Value).bytes(), kValueA * kInt32Value);
80 EXPECT_EQ((size_a * kFloatValue).bytes(), kValueA * kFloatValue);
81
82 EXPECT_EQ((size_a / 10).bytes(), kValueA / 10);
Sebastian Jansson942b3602018-05-30 15:47:44 +020083 EXPECT_EQ(size_a / size_b, static_cast<double>(kValueA) / kValueB);
Sebastian Jansson30bd4032018-04-13 13:56:17 +020084
85 DataSize mutable_size = DataSize::bytes(kValueA);
86 mutable_size += size_b;
87 EXPECT_EQ(mutable_size.bytes(), kValueA + kValueB);
88 mutable_size -= size_a;
89 EXPECT_EQ(mutable_size.bytes(), kValueB);
90}
91} // namespace test
92} // namespace webrtc