X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=unittests%2FSupport%2FMathExtrasTest.cpp;h=8adde02ed4ee1b6fac8041014ae921f85bf77827;hp=8bd47e34c7ec1eed32a1a645f184d149c76db023;hb=4918b66f8428f0d5b4559da8f966e3aa54c3b1ba;hpb=9eaef595284c567310bc6f0009f83d77a554b881 diff --git a/unittests/Support/MathExtrasTest.cpp b/unittests/Support/MathExtrasTest.cpp index 8bd47e34c7e..8adde02ed4e 100644 --- a/unittests/Support/MathExtrasTest.cpp +++ b/unittests/Support/MathExtrasTest.cpp @@ -190,4 +190,52 @@ TEST(MathExtras, RoundUpToAlignment) { EXPECT_EQ(552u, RoundUpToAlignment(321, 255, 42)); } +template +void SaturatingAddTestHelper() +{ + EXPECT_EQ(static_cast(3), + SaturatingAdd(static_cast(1), static_cast(2))); + EXPECT_EQ(std::numeric_limits::max(), + SaturatingAdd(std::numeric_limits::max(), static_cast(1))); + EXPECT_EQ(std::numeric_limits::max(), + SaturatingAdd(static_cast(1), std::numeric_limits::max())); + EXPECT_EQ(std::numeric_limits::max(), + SaturatingAdd(std::numeric_limits::max(), + std::numeric_limits::max())); +} + +TEST(MathExtras, SaturatingAdd) { + SaturatingAddTestHelper(); + SaturatingAddTestHelper(); + SaturatingAddTestHelper(); + SaturatingAddTestHelper(); +} + +template +void SaturatingMultiplyTestHelper() +{ + EXPECT_EQ(static_cast(0), + SaturatingMultiply(static_cast(1), static_cast(0))); + EXPECT_EQ(static_cast(0), + SaturatingMultiply(static_cast(0), static_cast(1))); + EXPECT_EQ(static_cast(6), + SaturatingMultiply(static_cast(2), static_cast(3))); + EXPECT_EQ(std::numeric_limits::max(), + SaturatingMultiply(std::numeric_limits::max(), + static_cast(2))); + EXPECT_EQ(std::numeric_limits::max(), + SaturatingMultiply(static_cast(2), + std::numeric_limits::max())); + EXPECT_EQ(std::numeric_limits::max(), + SaturatingMultiply(std::numeric_limits::max(), + std::numeric_limits::max())); +} + +TEST(MathExtras, SaturatingMultiply) { + SaturatingMultiplyTestHelper(); + SaturatingMultiplyTestHelper(); + SaturatingMultiplyTestHelper(); + SaturatingMultiplyTestHelper(); +} + }