1 /*
2 * Copyright (c) 2021 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 #include "net/dcsctp/common/math.h"
11
12 #include "test/gmock.h"
13
14 namespace dcsctp {
15 namespace {
16
TEST(MathUtilTest,CanRoundUpTo4)17 TEST(MathUtilTest, CanRoundUpTo4) {
18 // Signed numbers
19 EXPECT_EQ(RoundUpTo4(static_cast<int>(-5)), -4);
20 EXPECT_EQ(RoundUpTo4(static_cast<int>(-4)), -4);
21 EXPECT_EQ(RoundUpTo4(static_cast<int>(-3)), 0);
22 EXPECT_EQ(RoundUpTo4(static_cast<int>(-2)), 0);
23 EXPECT_EQ(RoundUpTo4(static_cast<int>(-1)), 0);
24 EXPECT_EQ(RoundUpTo4(static_cast<int>(0)), 0);
25 EXPECT_EQ(RoundUpTo4(static_cast<int>(1)), 4);
26 EXPECT_EQ(RoundUpTo4(static_cast<int>(2)), 4);
27 EXPECT_EQ(RoundUpTo4(static_cast<int>(3)), 4);
28 EXPECT_EQ(RoundUpTo4(static_cast<int>(4)), 4);
29 EXPECT_EQ(RoundUpTo4(static_cast<int>(5)), 8);
30 EXPECT_EQ(RoundUpTo4(static_cast<int>(6)), 8);
31 EXPECT_EQ(RoundUpTo4(static_cast<int>(7)), 8);
32 EXPECT_EQ(RoundUpTo4(static_cast<int>(8)), 8);
33 EXPECT_EQ(RoundUpTo4(static_cast<int64_t>(10000000000)), 10000000000);
34 EXPECT_EQ(RoundUpTo4(static_cast<int64_t>(10000000001)), 10000000004);
35
36 // Unsigned numbers
37 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(0)), 0u);
38 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(1)), 4u);
39 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(2)), 4u);
40 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(3)), 4u);
41 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(4)), 4u);
42 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(5)), 8u);
43 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(6)), 8u);
44 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(7)), 8u);
45 EXPECT_EQ(RoundUpTo4(static_cast<unsigned int>(8)), 8u);
46 EXPECT_EQ(RoundUpTo4(static_cast<uint64_t>(10000000000)), 10000000000u);
47 EXPECT_EQ(RoundUpTo4(static_cast<uint64_t>(10000000001)), 10000000004u);
48 }
49
TEST(MathUtilTest,CanRoundDownTo4)50 TEST(MathUtilTest, CanRoundDownTo4) {
51 // Signed numbers
52 EXPECT_EQ(RoundDownTo4(static_cast<int>(-5)), -8);
53 EXPECT_EQ(RoundDownTo4(static_cast<int>(-4)), -4);
54 EXPECT_EQ(RoundDownTo4(static_cast<int>(-3)), -4);
55 EXPECT_EQ(RoundDownTo4(static_cast<int>(-2)), -4);
56 EXPECT_EQ(RoundDownTo4(static_cast<int>(-1)), -4);
57 EXPECT_EQ(RoundDownTo4(static_cast<int>(0)), 0);
58 EXPECT_EQ(RoundDownTo4(static_cast<int>(1)), 0);
59 EXPECT_EQ(RoundDownTo4(static_cast<int>(2)), 0);
60 EXPECT_EQ(RoundDownTo4(static_cast<int>(3)), 0);
61 EXPECT_EQ(RoundDownTo4(static_cast<int>(4)), 4);
62 EXPECT_EQ(RoundDownTo4(static_cast<int>(5)), 4);
63 EXPECT_EQ(RoundDownTo4(static_cast<int>(6)), 4);
64 EXPECT_EQ(RoundDownTo4(static_cast<int>(7)), 4);
65 EXPECT_EQ(RoundDownTo4(static_cast<int>(8)), 8);
66 EXPECT_EQ(RoundDownTo4(static_cast<int64_t>(10000000000)), 10000000000);
67 EXPECT_EQ(RoundDownTo4(static_cast<int64_t>(10000000001)), 10000000000);
68
69 // Unsigned numbers
70 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(0)), 0u);
71 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(1)), 0u);
72 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(2)), 0u);
73 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(3)), 0u);
74 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(4)), 4u);
75 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(5)), 4u);
76 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(6)), 4u);
77 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(7)), 4u);
78 EXPECT_EQ(RoundDownTo4(static_cast<unsigned int>(8)), 8u);
79 EXPECT_EQ(RoundDownTo4(static_cast<uint64_t>(10000000000)), 10000000000u);
80 EXPECT_EQ(RoundDownTo4(static_cast<uint64_t>(10000000001)), 10000000000u);
81 }
82
TEST(MathUtilTest,IsDivisibleBy4)83 TEST(MathUtilTest, IsDivisibleBy4) {
84 // Signed numbers
85 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(-4)), true);
86 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(-3)), false);
87 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(-2)), false);
88 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(-1)), false);
89 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(0)), true);
90 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(1)), false);
91 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(2)), false);
92 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(3)), false);
93 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(4)), true);
94 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(5)), false);
95 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(6)), false);
96 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(7)), false);
97 EXPECT_EQ(IsDivisibleBy4(static_cast<int>(8)), true);
98 EXPECT_EQ(IsDivisibleBy4(static_cast<int64_t>(10000000000)), true);
99 EXPECT_EQ(IsDivisibleBy4(static_cast<int64_t>(10000000001)), false);
100
101 // Unsigned numbers
102 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(0)), true);
103 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(1)), false);
104 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(2)), false);
105 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(3)), false);
106 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(4)), true);
107 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(5)), false);
108 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(6)), false);
109 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(7)), false);
110 EXPECT_EQ(IsDivisibleBy4(static_cast<unsigned int>(8)), true);
111 EXPECT_EQ(IsDivisibleBy4(static_cast<uint64_t>(10000000000)), true);
112 EXPECT_EQ(IsDivisibleBy4(static_cast<uint64_t>(10000000001)), false);
113 }
114
115 } // namespace
116 } // namespace dcsctp
117