diff options
author | Nathan Slingerland <slingn@gmail.com> | 2015-11-18 00:52:43 +0000 |
---|---|---|
committer | Nathan Slingerland <slingn@gmail.com> | 2015-11-18 00:52:43 +0000 |
commit | fda1b81f69d78459c720b2f31c010ee0d49b29c1 (patch) | |
tree | a5f76544f33faaef702a36f030d206f279ae11b6 /llvm/unittests/Support/MathExtrasTest.cpp | |
parent | 8cb95b8e5124c2e40ee6672ddc84b59834bb982b (diff) | |
download | llvm-fda1b81f69d78459c720b2f31c010ee0d49b29c1.zip llvm-fda1b81f69d78459c720b2f31c010ee0d49b29c1.tar.gz llvm-fda1b81f69d78459c720b2f31c010ee0d49b29c1.tar.bz2 |
[llvm-profdata] Add SaturatingAdd/SaturatingMultiply Helper Functions
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.
No functional changes.
Reviewers: dnovillo, bogner, davidxl
Subscribers: davidxl, llvm-commits
Differential Revision: http://reviews.llvm.org/D14720
llvm-svn: 253412
Diffstat (limited to 'llvm/unittests/Support/MathExtrasTest.cpp')
-rw-r--r-- | llvm/unittests/Support/MathExtrasTest.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/unittests/Support/MathExtrasTest.cpp b/llvm/unittests/Support/MathExtrasTest.cpp index 8bd47e3..8adde02 100644 --- a/llvm/unittests/Support/MathExtrasTest.cpp +++ b/llvm/unittests/Support/MathExtrasTest.cpp @@ -190,4 +190,52 @@ TEST(MathExtras, RoundUpToAlignment) { EXPECT_EQ(552u, RoundUpToAlignment(321, 255, 42)); } +template<typename T> +void SaturatingAddTestHelper() +{ + EXPECT_EQ(static_cast<T>(3), + SaturatingAdd(static_cast<T>(1), static_cast<T>(2))); + EXPECT_EQ(std::numeric_limits<T>::max(), + SaturatingAdd(std::numeric_limits<T>::max(), static_cast<T>(1))); + EXPECT_EQ(std::numeric_limits<T>::max(), + SaturatingAdd(static_cast<T>(1), std::numeric_limits<T>::max())); + EXPECT_EQ(std::numeric_limits<T>::max(), + SaturatingAdd(std::numeric_limits<T>::max(), + std::numeric_limits<T>::max())); +} + +TEST(MathExtras, SaturatingAdd) { + SaturatingAddTestHelper<uint8_t>(); + SaturatingAddTestHelper<uint16_t>(); + SaturatingAddTestHelper<uint32_t>(); + SaturatingAddTestHelper<uint64_t>(); +} + +template<typename T> +void SaturatingMultiplyTestHelper() +{ + EXPECT_EQ(static_cast<T>(0), + SaturatingMultiply(static_cast<T>(1), static_cast<T>(0))); + EXPECT_EQ(static_cast<T>(0), + SaturatingMultiply(static_cast<T>(0), static_cast<T>(1))); + EXPECT_EQ(static_cast<T>(6), + SaturatingMultiply(static_cast<T>(2), static_cast<T>(3))); + EXPECT_EQ(std::numeric_limits<T>::max(), + SaturatingMultiply(std::numeric_limits<T>::max(), + static_cast<T>(2))); + EXPECT_EQ(std::numeric_limits<T>::max(), + SaturatingMultiply(static_cast<T>(2), + std::numeric_limits<T>::max())); + EXPECT_EQ(std::numeric_limits<T>::max(), + SaturatingMultiply(std::numeric_limits<T>::max(), + std::numeric_limits<T>::max())); +} + +TEST(MathExtras, SaturatingMultiply) { + SaturatingMultiplyTestHelper<uint8_t>(); + SaturatingMultiplyTestHelper<uint16_t>(); + SaturatingMultiplyTestHelper<uint32_t>(); + SaturatingMultiplyTestHelper<uint64_t>(); +} + } |