diff options
author | Alexander Shaposhnikov <ashaposhnikov@google.com> | 2022-12-01 20:22:06 +0000 |
---|---|---|
committer | Alexander Shaposhnikov <ashaposhnikov@google.com> | 2022-12-01 20:24:49 +0000 |
commit | d59a196b8cb8bb59e38ab2bd93b3454141e33bc9 (patch) | |
tree | 278f2db708f3bf27074fe581868dbd135ccbdfc1 /llvm/unittests/Support/MathExtrasTest.cpp | |
parent | 23ffadcf3143ab6291ec3b4be3ff46c8b9f7f78e (diff) | |
download | llvm-d59a196b8cb8bb59e38ab2bd93b3454141e33bc9.zip llvm-d59a196b8cb8bb59e38ab2bd93b3454141e33bc9.tar.gz llvm-d59a196b8cb8bb59e38ab2bd93b3454141e33bc9.tar.bz2 |
[Support][MathExtras] Add variadic SaturatingAdd
Add variadic SaturatingAdd.
Test plan: ninja check-llvm-unit check-all
Differential revision: https://reviews.llvm.org/D139036
Diffstat (limited to 'llvm/unittests/Support/MathExtrasTest.cpp')
-rw-r--r-- | llvm/unittests/Support/MathExtrasTest.cpp | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/llvm/unittests/Support/MathExtrasTest.cpp b/llvm/unittests/Support/MathExtrasTest.cpp index 23034d6..8558719 100644 --- a/llvm/unittests/Support/MathExtrasTest.cpp +++ b/llvm/unittests/Support/MathExtrasTest.cpp @@ -309,9 +309,7 @@ TEST(MathExtras, alignTo) { EXPECT_EQ(552u, alignTo(321, 255, 42)); } -template<typename T> -void SaturatingAddTestHelper() -{ +template <typename T> void SaturatingAddTestHelper() { const T Max = std::numeric_limits<T>::max(); bool ResultOverflowed; @@ -334,6 +332,42 @@ void SaturatingAddTestHelper() EXPECT_EQ(Max, SaturatingAdd(Max, Max)); EXPECT_EQ(Max, SaturatingAdd(Max, Max, &ResultOverflowed)); EXPECT_TRUE(ResultOverflowed); + + EXPECT_EQ(T(6), SaturatingAdd(T(1), T(2), T(3))); + EXPECT_EQ(T(6), SaturatingAdd(T(1), T(2), T(3), &ResultOverflowed)); + EXPECT_FALSE(ResultOverflowed); + + EXPECT_EQ(T(10), SaturatingAdd(T(1), T(2), T(3), T(4))); + EXPECT_EQ(T(10), SaturatingAdd(T(1), T(2), T(3), T(4), &ResultOverflowed)); + EXPECT_FALSE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(Max, T(0), T(0))); + EXPECT_EQ(Max, SaturatingAdd(Max, T(0), T(0), &ResultOverflowed)); + EXPECT_FALSE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(T(0), T(0), Max)); + EXPECT_EQ(Max, SaturatingAdd(T(0), T(0), Max, &ResultOverflowed)); + EXPECT_FALSE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(Max, T(0), T(1))); + EXPECT_EQ(Max, SaturatingAdd(Max, T(0), T(1), &ResultOverflowed)); + EXPECT_TRUE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(T(0), T(1), Max)); + EXPECT_EQ(Max, SaturatingAdd(T(0), T(1), Max, &ResultOverflowed)); + EXPECT_TRUE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(T(1), T(Max - 2), T(1))); + EXPECT_EQ(Max, SaturatingAdd(T(1), T(Max - 2), T(1), &ResultOverflowed)); + EXPECT_FALSE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(T(1), T(1), T(Max - 2))); + EXPECT_EQ(Max, SaturatingAdd(T(1), T(1), T(Max - 2), &ResultOverflowed)); + EXPECT_FALSE(ResultOverflowed); + + EXPECT_EQ(Max, SaturatingAdd(Max, Max, Max)); + EXPECT_EQ(Max, SaturatingAdd(Max, Max, Max, &ResultOverflowed)); + EXPECT_TRUE(ResultOverflowed); } TEST(MathExtras, SaturatingAdd) { |