OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "net/base/int128.h" | 7 #include "net/base/int128.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 | |
11 TEST(Int128, AllTests) { | 10 TEST(Int128, AllTests) { |
12 uint128 zero(0); | 11 uint128 zero(0); |
13 uint128 one(1); | 12 uint128 one(1); |
14 uint128 one_2arg(0, 1); | 13 uint128 one_2arg(0, 1); |
15 uint128 two(0, 2); | 14 uint128 two(0, 2); |
16 uint128 three(0, 3); | 15 uint128 three(0, 3); |
17 uint128 big(2000, 2); | 16 uint128 big(2000, 2); |
18 uint128 big_minus_one(2000, 1); | 17 uint128 big_minus_one(2000, 1); |
19 uint128 bigger(2001, 1); | 18 uint128 bigger(2001, 1); |
20 uint128 biggest(kuint128max); | 19 uint128 biggest(kuint128max); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 EXPECT_EQ(big, -(-big)); | 107 EXPECT_EQ(big, -(-big)); |
109 EXPECT_EQ(two, -((-one) - 1)); | 108 EXPECT_EQ(two, -((-one) - 1)); |
110 EXPECT_EQ(kuint128max, -one); | 109 EXPECT_EQ(kuint128max, -one); |
111 EXPECT_EQ(zero, -zero); | 110 EXPECT_EQ(zero, -zero); |
112 | 111 |
113 LOG(INFO) << one; | 112 LOG(INFO) << one; |
114 LOG(INFO) << big_minus_one; | 113 LOG(INFO) << big_minus_one; |
115 } | 114 } |
116 | 115 |
117 TEST(Int128, PodTests) { | 116 TEST(Int128, PodTests) { |
118 uint128_pod pod = { 12345, 67890 }; | 117 uint128_pod pod = {12345, 67890}; |
119 uint128 from_pod(pod); | 118 uint128 from_pod(pod); |
120 EXPECT_EQ(12345u, Uint128High64(from_pod)); | 119 EXPECT_EQ(12345u, Uint128High64(from_pod)); |
121 EXPECT_EQ(67890u, Uint128Low64(from_pod)); | 120 EXPECT_EQ(67890u, Uint128Low64(from_pod)); |
122 | 121 |
123 uint128 zero(0); | 122 uint128 zero(0); |
124 uint128_pod zero_pod = {0, 0}; | 123 uint128_pod zero_pod = {0, 0}; |
125 uint128 one(1); | 124 uint128 one(1); |
126 uint128_pod one_pod = {0, 1}; | 125 uint128_pod one_pod = {0, 1}; |
127 uint128 two(2); | 126 uint128 two(2); |
128 uint128_pod two_pod = {0, 2}; | 127 uint128_pod two_pod = {0, 2}; |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 c = uint128(0) - 1; | 217 c = uint128(0) - 1; |
219 c *= c; | 218 c *= c; |
220 EXPECT_EQ(1, c); | 219 EXPECT_EQ(1, c); |
221 | 220 |
222 // 1-bit x 1-bit. | 221 // 1-bit x 1-bit. |
223 for (int i = 0; i < 64; ++i) { | 222 for (int i = 0; i < 64; ++i) { |
224 for (int j = 0; j < 64; ++j) { | 223 for (int j = 0; j < 64; ++j) { |
225 a = uint128(1) << i; | 224 a = uint128(1) << i; |
226 b = uint128(1) << j; | 225 b = uint128(1) << j; |
227 c = a * b; | 226 c = a * b; |
228 EXPECT_EQ(uint128(1) << (i+j), c); | 227 EXPECT_EQ(uint128(1) << (i + j), c); |
229 } | 228 } |
230 } | 229 } |
231 | 230 |
232 // Verified with dc. | 231 // Verified with dc. |
233 a = uint128(0xffffeeeeddddccccULL, 0xbbbbaaaa99998888ULL); | 232 a = uint128(0xffffeeeeddddccccULL, 0xbbbbaaaa99998888ULL); |
234 b = uint128(0x7777666655554444ULL, 0x3333222211110000ULL); | 233 b = uint128(0x7777666655554444ULL, 0x3333222211110000ULL); |
235 c = a * b; | 234 c = a * b; |
236 EXPECT_EQ(uint128(0x530EDA741C71D4C3ULL, 0xBF25975319080000ULL), c); | 235 EXPECT_EQ(uint128(0x530EDA741C71D4C3ULL, 0xBF25975319080000ULL), c); |
237 EXPECT_EQ(0, c - b * a); | 236 EXPECT_EQ(0, c - b * a); |
238 EXPECT_EQ(a*a - b*b, (a+b) * (a-b)); | 237 EXPECT_EQ(a * a - b * b, (a + b) * (a - b)); |
239 | 238 |
240 // Verified with dc. | 239 // Verified with dc. |
241 a = uint128(0x0123456789abcdefULL, 0xfedcba9876543210ULL); | 240 a = uint128(0x0123456789abcdefULL, 0xfedcba9876543210ULL); |
242 b = uint128(0x02468ace13579bdfULL, 0xfdb97531eca86420ULL); | 241 b = uint128(0x02468ace13579bdfULL, 0xfdb97531eca86420ULL); |
243 c = a * b; | 242 c = a * b; |
244 EXPECT_EQ(uint128(0x97a87f4f261ba3f2ULL, 0x342d0bbf48948200ULL), c); | 243 EXPECT_EQ(uint128(0x97a87f4f261ba3f2ULL, 0x342d0bbf48948200ULL), c); |
245 EXPECT_EQ(0, c - b * a); | 244 EXPECT_EQ(0, c - b * a); |
246 EXPECT_EQ(a*a - b*b, (a+b) * (a-b)); | 245 EXPECT_EQ(a * a - b * b, (a + b) * (a - b)); |
247 } | 246 } |
248 | 247 |
249 TEST(Int128, AliasTests) { | 248 TEST(Int128, AliasTests) { |
250 uint128 x1(1, 2); | 249 uint128 x1(1, 2); |
251 uint128 x2(2, 4); | 250 uint128 x2(2, 4); |
252 x1 += x1; | 251 x1 += x1; |
253 EXPECT_EQ(x2, x1); | 252 EXPECT_EQ(x2, x1); |
254 | 253 |
255 uint128 x3(1, 1ull << 63); | 254 uint128 x3(1, 1ull << 63); |
256 uint128 x4(3, 0); | 255 uint128 x4(3, 0); |
257 x3 += x3; | 256 x3 += x3; |
258 EXPECT_EQ(x4, x3); | 257 EXPECT_EQ(x4, x3); |
259 } | 258 } |
OLD | NEW |