Index: base/numerics/safe_numerics_unittest.cc |
diff --git a/base/numerics/safe_numerics_unittest.cc b/base/numerics/safe_numerics_unittest.cc |
index 304032022a854f3ee1fe16e26efbd62898c35008..ec6d0037c9f0a0285844c179c9a40130fa4f9169 100644 |
--- a/base/numerics/safe_numerics_unittest.cc |
+++ b/base/numerics/safe_numerics_unittest.cc |
@@ -45,10 +45,7 @@ using base::saturated_cast; |
using base::strict_cast; |
using base::internal::MaxExponent; |
using base::internal::IntegerBitsPlusSign; |
-using base::internal::RANGE_VALID; |
-using base::internal::RANGE_INVALID; |
-using base::internal::RANGE_OVERFLOW; |
-using base::internal::RANGE_UNDERFLOW; |
+using base::internal::RangeCheck; |
// These tests deliberately cause arithmetic boundary errors. If the compiler is |
// aggressive enough, it can const detect these errors, so we disable warnings. |
@@ -516,10 +513,26 @@ enum NumericConversionType { |
template <typename Dst, typename Src, NumericConversionType conversion> |
struct TestNumericConversion {}; |
+enum RangeConstraint { |
+ RANGE_VALID = 0x0, // Value can be represented by the destination type. |
+ RANGE_UNDERFLOW = 0x1, // Value would underflow. |
+ RANGE_OVERFLOW = 0x2, // Value would overflow. |
+ RANGE_INVALID = RANGE_UNDERFLOW | RANGE_OVERFLOW // Invalid (i.e. NaN). |
+}; |
+ |
+// These are some wrappers to make the tests a bit cleaner. |
+constexpr RangeConstraint RangeCheckToEnum(const RangeCheck constraint) { |
+ return static_cast<RangeConstraint>( |
+ static_cast<int>(constraint.IsOverflowFlagSet()) << 1 | |
+ static_cast<int>(constraint.IsUnderflowFlagSet())); |
+} |
+ |
// EXPECT_EQ wrappers providing specific detail on test failures. |
-#define TEST_EXPECTED_RANGE(expected, actual) \ |
- EXPECT_EQ(expected, base::internal::DstRangeRelationToSrcRange<Dst>(actual)) \ |
- << "Conversion test: " << src << " value " << actual << " to " << dst \ |
+#define TEST_EXPECTED_RANGE(expected, actual) \ |
+ EXPECT_EQ(expected, \ |
+ RangeCheckToEnum( \ |
+ base::internal::DstRangeRelationToSrcRange<Dst>(actual))) \ |
+ << "Conversion test: " << src << " value " << actual << " to " << dst \ |
<< " on line " << line |
template <typename Dst, typename Src> |