diff options
author | Nathan Slingerland <slingn@gmail.com> | 2015-11-18 20:40:41 +0000 |
---|---|---|
committer | Nathan Slingerland <slingn@gmail.com> | 2015-11-18 20:40:41 +0000 |
commit | 617c60013dc31e5b768912217bd354b133888796 (patch) | |
tree | 8225614b0c63d9833f4e84fb14b07008ac376880 /llvm/unittests/Support/MathExtrasTest.cpp | |
parent | 13cd7f3cf7e4c26c1949ad9fc82984684b3376a0 (diff) | |
download | llvm-617c60013dc31e5b768912217bd354b133888796.zip llvm-617c60013dc31e5b768912217bd354b133888796.tar.gz llvm-617c60013dc31e5b768912217bd354b133888796.tar.bz2 |
[llvm-profdata] Add SaturatingAdd/SaturatingMultiply Helper Functions (2nd try)
Summary:
This change adds MathExtras helper functions for handling unsigned, saturating addition and multiplication. It also updates the instrumentation and sample profile merge implementations to use them.
Reviewers: dnovillo, bogner, davidxl
Subscribers: davidxl, llvm-commits
Differential Revision: http://reviews.llvm.org/D14720
llvm-svn: 253497
Diffstat (limited to 'llvm/unittests/Support/MathExtrasTest.cpp')
-rw-r--r-- | llvm/unittests/Support/MathExtrasTest.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/unittests/Support/MathExtrasTest.cpp b/llvm/unittests/Support/MathExtrasTest.cpp index 8bd47e3..781bce3 100644 --- a/llvm/unittests/Support/MathExtrasTest.cpp +++ b/llvm/unittests/Support/MathExtrasTest.cpp @@ -190,4 +190,40 @@ TEST(MathExtras, RoundUpToAlignment) { EXPECT_EQ(552u, RoundUpToAlignment(321, 255, 42)); } +template<typename T> +void SaturatingAddTestHelper() +{ + const T Max = std::numeric_limits<T>::max(); + EXPECT_EQ(T(3), SaturatingAdd(T(1), T(2))); + EXPECT_EQ(Max, SaturatingAdd(Max, T(1))); + EXPECT_EQ(Max, SaturatingAdd(T(1), Max)); + EXPECT_EQ(Max, SaturatingAdd(Max, Max)); +} + +TEST(MathExtras, SaturatingAdd) { + SaturatingAddTestHelper<uint8_t>(); + SaturatingAddTestHelper<uint16_t>(); + SaturatingAddTestHelper<uint32_t>(); + SaturatingAddTestHelper<uint64_t>(); +} + +template<typename T> +void SaturatingMultiplyTestHelper() +{ + const T Max = std::numeric_limits<T>::max(); + EXPECT_EQ(T(0), SaturatingMultiply(T(1), T(0))); + EXPECT_EQ(T(0), SaturatingMultiply(T(0), T(1))); + EXPECT_EQ(T(6), SaturatingMultiply(T(2), T(3))); + EXPECT_EQ(Max, SaturatingMultiply(Max, T(2))); + EXPECT_EQ(Max, SaturatingMultiply(T(2),Max)); + EXPECT_EQ(Max, SaturatingMultiply(Max, Max)); +} + +TEST(MathExtras, SaturatingMultiply) { + SaturatingMultiplyTestHelper<uint8_t>(); + SaturatingMultiplyTestHelper<uint16_t>(); + SaturatingMultiplyTestHelper<uint32_t>(); + SaturatingMultiplyTestHelper<uint64_t>(); +} + } |