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

Unified Diff: base/numerics/safe_numerics_unittest.cc

Issue 2522073004: Add variadic helper functions for CheckedNumeric math operations (Closed)
Patch Set: compile fix Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/numerics/safe_math_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..3f12ff5d0613137f0081f3b74539d53b777d2033 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).template Cast<Dst>().IsValid()) \
<< "Result test: Value " << GetNumericValueForTest(actual) << " as " \
<< dst << " on line " << line
@@ -84,7 +92,7 @@ using base::internal::GetNumericValueForTest;
#define TEST_EXPECTED_VALUE(expected, actual) \
EXPECT_EQ(static_cast<Dst>(expected), \
- CheckedNumeric<Dst>(actual).ValueOrDie()) \
+ (actual).template Cast<Dst>().ValueOrDie()) \
<< "Result test: Value " << GetNumericValueForTest(actual) << " as " \
<< dst << " on line " << line
@@ -818,3 +826,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);
+}
« no previous file with comments | « base/numerics/safe_math_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698