Chromium Code Reviews| Index: base/numerics/safe_numerics_unittest.cc |
| diff --git a/base/numerics/safe_numerics_unittest.cc b/base/numerics/safe_numerics_unittest.cc |
| index 430f7700b5d08e4c53d9cb90752e9f2172dd9455..cbc3721d8a72b93debeed1ca24d5c8a35ebed965 100644 |
| --- a/base/numerics/safe_numerics_unittest.cc |
| +++ b/base/numerics/safe_numerics_unittest.cc |
| @@ -21,6 +21,14 @@ |
| using std::numeric_limits; |
| using base::CheckedNumeric; |
| +using base::CheckNum; |
| +using base::CheckAdd; |
| +using base::CheckSub; |
| +using base::CheckMul; |
| +using base::CheckDiv; |
| +using base::CheckMod; |
| +using base::CheckLsh; |
| +using base::CheckRsh; |
| using base::checked_cast; |
| using base::IsValueInRangeForNumericType; |
| using base::IsValueNegative; |
| @@ -75,7 +83,7 @@ using base::internal::GetNumericValueForTest; |
| // Helper macros to wrap displaying the conversion types and line numbers. |
| #define TEST_EXPECTED_VALIDITY(expected, actual) \ |
| - EXPECT_EQ(expected, CheckedNumeric<Dst>(actual).IsValid()) \ |
| + EXPECT_EQ(expected, (actual).Cast<Dst>().IsValid()) \ |
| << "Result test: Value " << GetNumericValueForTest(actual) << " as " \ |
| << dst << " on line " << line |
| @@ -83,8 +91,7 @@ using base::internal::GetNumericValueForTest; |
| #define TEST_EXPECTED_FAILURE(actual) TEST_EXPECTED_VALIDITY(false, actual) |
| #define TEST_EXPECTED_VALUE(expected, actual) \ |
| - EXPECT_EQ(static_cast<Dst>(expected), \ |
| - CheckedNumeric<Dst>(actual).ValueOrDie()) \ |
| + EXPECT_EQ(static_cast<Dst>(expected), (actual).Cast<Dst>().ValueOrDie()) \ |
| << "Result test: Value " << GetNumericValueForTest(actual) << " as " \ |
| << dst << " on line " << line |
| @@ -818,3 +825,22 @@ TEST(SafeNumerics, CompoundNumericOperations) { |
| too_large /= d; |
| EXPECT_FALSE(too_large.IsValid()); |
| } |
| + |
| +TEST(SafeNumerics, VariadicNumericOperations) { |
| + auto a = CheckAdd(1, 2UL, CheckNum(3LL), 4).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(a)>(10), a); |
| + auto b = CheckSub(CheckNum(20.0), 2UL, 4).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(b)>(14.0), b); |
| + auto c = CheckMul(20.0, CheckNum(1), 5, 3UL).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(c)>(300.0), c); |
| + auto d = CheckDiv(20.0, 2.0, CheckNum(5LL), -4).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(d)>(-.5), d); |
| + auto e = CheckMod(CheckNum(20), 3).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(e)>(2), e); |
| + auto f = CheckLsh(1, CheckNum(2)).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(f)>(4), f); |
| + auto g = CheckRsh(4, CheckNum(2)).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(g)>(1), g); |
| + auto h = CheckRsh(CheckAdd(1, 1, 1, 1), CheckSub(4, 2)).ValueOrDie(); |
| + EXPECT_EQ(static_cast<decltype(h)>(1), h); |
|
Tom Sepez
2016/11/23 21:37:25
can we add a test that CheckAdd<int16_t>(0x10000,
|
| +} |