| Index: Source/wtf/SaturatedArithmeticTest.cpp
|
| diff --git a/Source/wtf/SaturatedArithmeticTest.cpp b/Source/wtf/SaturatedArithmeticTest.cpp
|
| index 00df8e97bbc7fb31005de9eea5d68046424b5939..fbe4bd63dd30ef6ba939cc33eeec10b563fdabb5 100644
|
| --- a/Source/wtf/SaturatedArithmeticTest.cpp
|
| +++ b/Source/wtf/SaturatedArithmeticTest.cpp
|
| @@ -104,4 +104,54 @@ TEST(SaturatedArithmeticTest, Subtraction)
|
| EXPECT_EQ(INT_MAX, saturatedSubtraction(INT_MAX, INT_MIN));
|
| }
|
|
|
| +TEST(SaturatedArithmeticTest, SetSigned)
|
| +{
|
| + const int kFractionBits = 6;
|
| + const int intMaxForLayoutUnit = INT_MAX >> kFractionBits;
|
| + const int intMinForLayoutUnit = INT_MIN >> kFractionBits;
|
| +
|
| + EXPECT_EQ(0, saturatedSet(0, kFractionBits));
|
| +
|
| + // Internally the max number we can represent (without saturating)
|
| + // is all the (non-sign) bits set except for the bottom n fraction bits
|
| + const int maxInternalRepresentation = INT_MAX ^ ((1 << kFractionBits)-1);
|
| + EXPECT_EQ(maxInternalRepresentation,
|
| + saturatedSet(intMaxForLayoutUnit, kFractionBits));
|
| +
|
| + EXPECT_EQ(getMaxSaturatedSetResultForTesting(kFractionBits),
|
| + saturatedSet(intMaxForLayoutUnit + 100, kFractionBits));
|
| +
|
| + EXPECT_EQ((intMaxForLayoutUnit - 100) << kFractionBits,
|
| + saturatedSet(intMaxForLayoutUnit - 100, kFractionBits));
|
| +
|
| + EXPECT_EQ(getMinSaturatedSetResultForTesting(kFractionBits),
|
| + saturatedSet(intMinForLayoutUnit, kFractionBits));
|
| +
|
| + EXPECT_EQ(getMinSaturatedSetResultForTesting(kFractionBits),
|
| + saturatedSet(intMinForLayoutUnit - 100, kFractionBits));
|
| +
|
| + EXPECT_EQ((intMinForLayoutUnit + 100) << kFractionBits,
|
| + saturatedSet(intMinForLayoutUnit + 100, kFractionBits));
|
| +}
|
| +
|
| +TEST(SaturatedArithmeticTest, SetUnsigned)
|
| +{
|
| + const int kFractionBits = 6;
|
| + const int intMaxForLayoutUnit = INT_MAX >> kFractionBits;
|
| +
|
| + EXPECT_EQ(0, saturatedSet((unsigned)0, kFractionBits));
|
| +
|
| + EXPECT_EQ(getMaxSaturatedSetResultForTesting(kFractionBits),
|
| + saturatedSet((unsigned)intMaxForLayoutUnit, kFractionBits));
|
| +
|
| + const unsigned kOverflowed = intMaxForLayoutUnit + 100;
|
| + EXPECT_EQ(getMaxSaturatedSetResultForTesting(kFractionBits),
|
| + saturatedSet(kOverflowed, kFractionBits));
|
| +
|
| + const unsigned kNotOverflowed = intMaxForLayoutUnit - 100;
|
| + EXPECT_EQ((intMaxForLayoutUnit - 100) << kFractionBits,
|
| + saturatedSet(kNotOverflowed, kFractionBits));
|
| +}
|
| +
|
| +
|
| } // namespace
|
|
|