| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <type_traits> | 9 #include <type_traits> |
| 10 | 10 |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 CheckedNumeric<Dst> checked_dst = 1; | 216 CheckedNumeric<Dst> checked_dst = 1; |
| 217 TEST_EXPECTED_VALUE(2, checked_dst += 1); | 217 TEST_EXPECTED_VALUE(2, checked_dst += 1); |
| 218 checked_dst = 1; | 218 checked_dst = 1; |
| 219 TEST_EXPECTED_VALUE(0, checked_dst -= 1); | 219 TEST_EXPECTED_VALUE(0, checked_dst -= 1); |
| 220 checked_dst = 1; | 220 checked_dst = 1; |
| 221 TEST_EXPECTED_VALUE(1, checked_dst *= 1); | 221 TEST_EXPECTED_VALUE(1, checked_dst *= 1); |
| 222 checked_dst = 1; | 222 checked_dst = 1; |
| 223 TEST_EXPECTED_VALUE(1, checked_dst /= 1); | 223 TEST_EXPECTED_VALUE(1, checked_dst /= 1); |
| 224 | 224 |
| 225 // Generic negation. | 225 // Generic negation. |
| 226 TEST_EXPECTED_VALUE(0, -CheckedNumeric<Dst>()); | 226 if (DstLimits::is_signed) { |
| 227 TEST_EXPECTED_VALUE(-1, -CheckedNumeric<Dst>(1)); | 227 TEST_EXPECTED_VALUE(0, -CheckedNumeric<Dst>()); |
| 228 TEST_EXPECTED_VALUE(1, -CheckedNumeric<Dst>(-1)); | 228 TEST_EXPECTED_VALUE(-1, -CheckedNumeric<Dst>(1)); |
| 229 TEST_EXPECTED_VALUE(static_cast<Dst>(DstLimits::max() * -1), | 229 TEST_EXPECTED_VALUE(1, -CheckedNumeric<Dst>(-1)); |
| 230 -CheckedNumeric<Dst>(DstLimits::max())); | 230 TEST_EXPECTED_VALUE(static_cast<Dst>(DstLimits::max() * -1), |
| 231 -CheckedNumeric<Dst>(DstLimits::max())); |
| 232 } |
| 231 | 233 |
| 232 // Generic absolute value. | 234 // Generic absolute value. |
| 233 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>().Abs()); | 235 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>().Abs()); |
| 234 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(1).Abs()); | 236 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(1).Abs()); |
| 235 TEST_EXPECTED_VALUE(DstLimits::max(), | 237 TEST_EXPECTED_VALUE(DstLimits::max(), |
| 236 CheckedNumeric<Dst>(DstLimits::max()).Abs()); | 238 CheckedNumeric<Dst>(DstLimits::max()).Abs()); |
| 237 | 239 |
| 238 // Generic addition. | 240 // Generic addition. |
| 239 TEST_EXPECTED_VALUE(1, (CheckedNumeric<Dst>() + 1)); | 241 TEST_EXPECTED_VALUE(1, (CheckedNumeric<Dst>() + 1)); |
| 240 TEST_EXPECTED_VALUE(2, (CheckedNumeric<Dst>(1) + 1)); | 242 TEST_EXPECTED_VALUE(2, (CheckedNumeric<Dst>(1) + 1)); |
| 241 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(-1) + 1)); | 243 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(-1) + 1)); |
| 242 TEST_EXPECTED_SUCCESS(CheckedNumeric<Dst>(DstLimits::min()) + 1); | 244 TEST_EXPECTED_SUCCESS(CheckedNumeric<Dst>(DstLimits::min()) + 1); |
| 243 TEST_EXPECTED_FAILURE(CheckedNumeric<Dst>(DstLimits::max()) + | 245 TEST_EXPECTED_FAILURE(CheckedNumeric<Dst>(DstLimits::max()) + |
| 244 DstLimits::max()); | 246 DstLimits::max()); |
| 245 | 247 |
| 246 // Generic subtraction. | 248 // Generic subtraction. |
| 247 TEST_EXPECTED_VALUE(-1, (CheckedNumeric<Dst>() - 1)); | 249 TEST_EXPECTED_VALUE(-1, (CheckedNumeric<Dst>() - 1)); |
| 248 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(1) - 1)); | 250 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(1) - 1)); |
| 249 TEST_EXPECTED_VALUE(-2, (CheckedNumeric<Dst>(-1) - 1)); | 251 TEST_EXPECTED_VALUE(-2, (CheckedNumeric<Dst>(-1) - 1)); |
| 250 TEST_EXPECTED_SUCCESS(CheckedNumeric<Dst>(DstLimits::max()) - 1); | 252 TEST_EXPECTED_SUCCESS(CheckedNumeric<Dst>(DstLimits::max()) - 1); |
| 251 | 253 |
| 252 // Generic multiplication. | 254 // Generic multiplication. |
| 253 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>() * 1)); | 255 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>() * 1)); |
| 254 TEST_EXPECTED_VALUE(1, (CheckedNumeric<Dst>(1) * 1)); | 256 TEST_EXPECTED_VALUE(1, (CheckedNumeric<Dst>(1) * 1)); |
| 255 TEST_EXPECTED_VALUE(-2, (CheckedNumeric<Dst>(-1) * 2)); | |
| 256 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(0) * 0)); | 257 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(0) * 0)); |
| 257 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(-1) * 0)); | 258 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(-1) * 0)); |
| 258 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(0) * -1)); | 259 TEST_EXPECTED_VALUE(0, (CheckedNumeric<Dst>(0) * -1)); |
| 259 TEST_EXPECTED_FAILURE(CheckedNumeric<Dst>(DstLimits::max()) * | 260 TEST_EXPECTED_FAILURE(CheckedNumeric<Dst>(DstLimits::max()) * |
| 260 DstLimits::max()); | 261 DstLimits::max()); |
| 262 if (DstLimits::is_signed) { |
| 263 TEST_EXPECTED_VALUE(-2, (CheckedNumeric<Dst>(-1) * 2)); |
| 264 } |
| 261 | 265 |
| 262 // Generic division. | 266 // Generic division. |
| 263 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>() / 1); | 267 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>() / 1); |
| 264 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(1) / 1); | 268 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(1) / 1); |
| 265 TEST_EXPECTED_VALUE(DstLimits::min() / 2, | 269 TEST_EXPECTED_VALUE(DstLimits::min() / 2, |
| 266 CheckedNumeric<Dst>(DstLimits::min()) / 2); | 270 CheckedNumeric<Dst>(DstLimits::min()) / 2); |
| 267 TEST_EXPECTED_VALUE(DstLimits::max() / 2, | 271 TEST_EXPECTED_VALUE(DstLimits::max() / 2, |
| 268 CheckedNumeric<Dst>(DstLimits::max()) / 2); | 272 CheckedNumeric<Dst>(DstLimits::max()) / 2); |
| 269 | 273 |
| 270 TestSpecializedArithmetic<Dst>(dst, line); | 274 TestSpecializedArithmetic<Dst>(dst, line); |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 | 755 |
| 752 CheckedNumeric<int> too_large = std::numeric_limits<int>::max(); | 756 CheckedNumeric<int> too_large = std::numeric_limits<int>::max(); |
| 753 EXPECT_TRUE(too_large.IsValid()); | 757 EXPECT_TRUE(too_large.IsValid()); |
| 754 too_large += d; | 758 too_large += d; |
| 755 EXPECT_FALSE(too_large.IsValid()); | 759 EXPECT_FALSE(too_large.IsValid()); |
| 756 too_large -= d; | 760 too_large -= d; |
| 757 EXPECT_FALSE(too_large.IsValid()); | 761 EXPECT_FALSE(too_large.IsValid()); |
| 758 too_large /= d; | 762 too_large /= d; |
| 759 EXPECT_FALSE(too_large.IsValid()); | 763 EXPECT_FALSE(too_large.IsValid()); |
| 760 } | 764 } |
| OLD | NEW |