Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(620)

Side by Side Diff: base/numerics/safe_numerics_unittest.cc

Issue 2516153002: Move the remaining CheckedNumeric logic out of the macro (Closed)
Patch Set: nit Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 if (SrcLimits::digits <= DstLimits::digits && 55 if (SrcLimits::digits <= DstLimits::digits &&
56 MaxExponent<Src>::value <= MaxExponent<Dst>::value) 56 MaxExponent<Src>::value <= MaxExponent<Dst>::value)
57 return SrcLimits::max(); 57 return SrcLimits::max();
58 Src max = SrcLimits::max() / 2 + (SrcLimits::is_integer ? 1 : 0); 58 Src max = SrcLimits::max() / 2 + (SrcLimits::is_integer ? 1 : 0);
59 while (max != static_cast<Src>(static_cast<Dst>(max))) { 59 while (max != static_cast<Src>(static_cast<Dst>(max))) {
60 max /= 2; 60 max /= 2;
61 } 61 }
62 return static_cast<Dst>(max); 62 return static_cast<Dst>(max);
63 } 63 }
64 64
65 namespace base {
66 namespace internal {
67 template <typename U>
68 U GetNumericValueForTest(const CheckedNumeric<U>& src) {
69 return src.state_.value();
70 }
71 } // namespace internal.
72 } // namespace base.
73
74 using base::internal::GetNumericValueForTest;
75
65 // Helper macros to wrap displaying the conversion types and line numbers. 76 // Helper macros to wrap displaying the conversion types and line numbers.
66 #define TEST_EXPECTED_VALIDITY(expected, actual) \ 77 #define TEST_EXPECTED_VALIDITY(expected, actual) \
67 EXPECT_EQ(expected, CheckedNumeric<Dst>(actual).IsValid()) \ 78 EXPECT_EQ(expected, CheckedNumeric<Dst>(actual).IsValid()) \
68 << "Result test: Value " << +(actual).ValueUnsafe() << " as " << dst \ 79 << "Result test: Value " << GetNumericValueForTest(actual) << " as " \
69 << " on line " << line 80 << dst << " on line " << line
70 81
71 #define TEST_EXPECTED_SUCCESS(actual) TEST_EXPECTED_VALIDITY(true, actual) 82 #define TEST_EXPECTED_SUCCESS(actual) TEST_EXPECTED_VALIDITY(true, actual)
72 #define TEST_EXPECTED_FAILURE(actual) TEST_EXPECTED_VALIDITY(false, actual) 83 #define TEST_EXPECTED_FAILURE(actual) TEST_EXPECTED_VALIDITY(false, actual)
73 84
74 #define TEST_EXPECTED_VALUE(expected, actual) \ 85 #define TEST_EXPECTED_VALUE(expected, actual) \
75 EXPECT_EQ(static_cast<Dst>(expected), \ 86 EXPECT_EQ(static_cast<Dst>(expected), \
76 CheckedNumeric<Dst>(actual).ValueOrDie()) \ 87 CheckedNumeric<Dst>(actual).ValueOrDie()) \
77 << "Result test: Value " << +((actual).ValueUnsafe()) << " as " << dst \ 88 << "Result test: Value " << GetNumericValueForTest(actual) << " as " \
78 << " on line " << line 89 << dst << " on line " << line
79 90
80 // Signed integer arithmetic. 91 // Signed integer arithmetic.
81 template <typename Dst> 92 template <typename Dst>
82 static void TestSpecializedArithmetic( 93 static void TestSpecializedArithmetic(
83 const char* dst, 94 const char* dst,
84 int line, 95 int line,
85 typename std::enable_if<numeric_limits<Dst>::is_integer && 96 typename std::enable_if<numeric_limits<Dst>::is_integer &&
86 numeric_limits<Dst>::is_signed, 97 numeric_limits<Dst>::is_signed,
87 int>::type = 0) { 98 int>::type = 0) {
88 typedef numeric_limits<Dst> DstLimits; 99 typedef numeric_limits<Dst> DstLimits;
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 811
801 CheckedNumeric<int> too_large = std::numeric_limits<int>::max(); 812 CheckedNumeric<int> too_large = std::numeric_limits<int>::max();
802 EXPECT_TRUE(too_large.IsValid()); 813 EXPECT_TRUE(too_large.IsValid());
803 too_large += d; 814 too_large += d;
804 EXPECT_FALSE(too_large.IsValid()); 815 EXPECT_FALSE(too_large.IsValid());
805 too_large -= d; 816 too_large -= d;
806 EXPECT_FALSE(too_large.IsValid()); 817 EXPECT_FALSE(too_large.IsValid());
807 too_large /= d; 818 too_large /= d;
808 EXPECT_FALSE(too_large.IsValid()); 819 EXPECT_FALSE(too_large.IsValid());
809 } 820 }
OLDNEW
« base/numerics/safe_math_impl.h ('K') | « base/numerics/safe_math_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698