| 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 #if defined(COMPILER_MSVC) && defined(ARCH_CPU_32_BITS) | 5 #if defined(COMPILER_MSVC) && defined(ARCH_CPU_32_BITS) |
| 6 #include <mmintrin.h> | 6 #include <mmintrin.h> |
| 7 #endif | 7 #endif |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 using base::IsValueInRangeForNumericType; | 21 using base::IsValueInRangeForNumericType; |
| 22 using base::SizeT; | 22 using base::SizeT; |
| 23 using base::StrictNumeric; | 23 using base::StrictNumeric; |
| 24 using base::saturated_cast; | 24 using base::saturated_cast; |
| 25 using base::strict_cast; | 25 using base::strict_cast; |
| 26 using base::internal::MaxExponent; | 26 using base::internal::MaxExponent; |
| 27 using base::internal::RANGE_VALID; | 27 using base::internal::RANGE_VALID; |
| 28 using base::internal::RANGE_INVALID; | 28 using base::internal::RANGE_INVALID; |
| 29 using base::internal::RANGE_OVERFLOW; | 29 using base::internal::RANGE_OVERFLOW; |
| 30 using base::internal::RANGE_UNDERFLOW; | 30 using base::internal::RANGE_UNDERFLOW; |
| 31 using base::internal::SignedIntegerForSize; |
| 31 using base::enable_if; | 32 using base::enable_if; |
| 32 | 33 |
| 33 // These tests deliberately cause arithmetic overflows. If the compiler is | 34 // These tests deliberately cause arithmetic overflows. If the compiler is |
| 34 // aggressive enough, it can const fold these overflows. Disable warnings about | 35 // aggressive enough, it can const fold these overflows. Disable warnings about |
| 35 // overflows for const expressions. | 36 // overflows for const expressions. |
| 36 #if defined(OS_WIN) | 37 #if defined(OS_WIN) |
| 37 #pragma warning(disable:4756) | 38 #pragma warning(disable:4756) |
| 38 #endif | 39 #endif |
| 39 | 40 |
| 40 // This is a helper function for finding the maximum value in Src that can be | 41 // This is a helper function for finding the maximum value in Src that can be |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 typedef numeric_limits<Dst> DstLimits; | 137 typedef numeric_limits<Dst> DstLimits; |
| 137 TEST_EXPECTED_VALIDITY(RANGE_VALID, -CheckedNumeric<Dst>(DstLimits::min())); | 138 TEST_EXPECTED_VALIDITY(RANGE_VALID, -CheckedNumeric<Dst>(DstLimits::min())); |
| 138 TEST_EXPECTED_VALIDITY(RANGE_VALID, | 139 TEST_EXPECTED_VALIDITY(RANGE_VALID, |
| 139 CheckedNumeric<Dst>(DstLimits::min()).Abs()); | 140 CheckedNumeric<Dst>(DstLimits::min()).Abs()); |
| 140 TEST_EXPECTED_VALIDITY(RANGE_UNDERFLOW, | 141 TEST_EXPECTED_VALIDITY(RANGE_UNDERFLOW, |
| 141 CheckedNumeric<Dst>(DstLimits::min()) + -1); | 142 CheckedNumeric<Dst>(DstLimits::min()) + -1); |
| 142 TEST_EXPECTED_VALIDITY(RANGE_UNDERFLOW, | 143 TEST_EXPECTED_VALIDITY(RANGE_UNDERFLOW, |
| 143 CheckedNumeric<Dst>(DstLimits::min()) - 1); | 144 CheckedNumeric<Dst>(DstLimits::min()) - 1); |
| 144 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(DstLimits::min()) * 2); | 145 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(DstLimits::min()) * 2); |
| 145 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(1) / 2); | 146 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(1) / 2); |
| 147 TEST_EXPECTED_VALIDITY(RANGE_VALID, |
| 148 CheckedNumeric<Dst>(DstLimits::min()).UnsignedAbs()); |
| 149 TEST_EXPECTED_VALIDITY( |
| 150 RANGE_VALID, |
| 151 CheckedNumeric<typename SignedIntegerForSize<Dst>::type>( |
| 152 std::numeric_limits<typename SignedIntegerForSize<Dst>::type>::min()) |
| 153 .UnsignedAbs()); |
| 146 | 154 |
| 147 // Modulus is legal only for integers. | 155 // Modulus is legal only for integers. |
| 148 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>() % 1); | 156 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>() % 1); |
| 149 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(1) % 1); | 157 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(1) % 1); |
| 150 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(1) % 2); | 158 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(1) % 2); |
| 151 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(DstLimits::min()) % 2); | 159 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(DstLimits::min()) % 2); |
| 152 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(DstLimits::max()) % 2); | 160 TEST_EXPECTED_VALUE(1, CheckedNumeric<Dst>(DstLimits::max()) % 2); |
| 153 // Test all the different modulus combinations. | 161 // Test all the different modulus combinations. |
| 154 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(1) % CheckedNumeric<Dst>(1)); | 162 TEST_EXPECTED_VALUE(0, CheckedNumeric<Dst>(1) % CheckedNumeric<Dst>(1)); |
| 155 TEST_EXPECTED_VALUE(0, 1 % CheckedNumeric<Dst>(1)); | 163 TEST_EXPECTED_VALUE(0, 1 % CheckedNumeric<Dst>(1)); |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 IsValueInRangeForNumericType<int64_t>(UINT64_C(0x8000000000000000))); | 720 IsValueInRangeForNumericType<int64_t>(UINT64_C(0x8000000000000000))); |
| 713 EXPECT_FALSE( | 721 EXPECT_FALSE( |
| 714 IsValueInRangeForNumericType<int64_t>(UINT64_C(0xffffffffffffffff))); | 722 IsValueInRangeForNumericType<int64_t>(UINT64_C(0xffffffffffffffff))); |
| 715 EXPECT_TRUE(IsValueInRangeForNumericType<int64_t>( | 723 EXPECT_TRUE(IsValueInRangeForNumericType<int64_t>( |
| 716 std::numeric_limits<int32_t>::min())); | 724 std::numeric_limits<int32_t>::min())); |
| 717 EXPECT_TRUE(IsValueInRangeForNumericType<int64_t>( | 725 EXPECT_TRUE(IsValueInRangeForNumericType<int64_t>( |
| 718 implicit_cast<int64_t>(std::numeric_limits<int32_t>::min()))); | 726 implicit_cast<int64_t>(std::numeric_limits<int32_t>::min()))); |
| 719 EXPECT_TRUE(IsValueInRangeForNumericType<int64_t>( | 727 EXPECT_TRUE(IsValueInRangeForNumericType<int64_t>( |
| 720 std::numeric_limits<int64_t>::min())); | 728 std::numeric_limits<int64_t>::min())); |
| 721 } | 729 } |
| OLD | NEW |