APSInt ExtVal =
(getLsbWeight() > 0) ? Val.extend(getWidth() + getLsbWeight()) : Val;
if (Val < 0 && Val != -Val) // Cover the case when we have the min val
- return -(-ExtVal.relativeShl(getLsbWeight()));
+ return -((-ExtVal).relativeShl(getLsbWeight()));
return ExtVal.relativeShl(getLsbWeight());
}
APSInt::getUnsigned(Expected)) == 0);
}
+void CheckIntPartRes(const FixedPointSemantics &Sema, int64_t Representation, int64_t Result) {
+ APFixedPoint Val(Representation, Sema);
+ ASSERT_EQ(Val.getIntPart().getZExtValue(), Result) ;
+}
+
TEST(FixedPoint, getIntPart) {
// Normal values
CheckIntPart(getSAccumSema(), 2);
CheckIntPartMax(getPadUSFractSema(), 0);
CheckIntPartMax(getPadUFractSema(), 0);
CheckIntPartMax(getPadULFractSema(), 0);
+
+ // Rounded Towards Zero
+ CheckIntPartRes(getSFractSema(), -127, 0);
+ CheckIntPartRes(getFractSema(), -32767, 0);
+ CheckIntPartRes(getLFractSema(), -2147483647, 0);
+ CheckIntPartRes(getS16Neg18(), -32768, 0);
}
TEST(FixedPoint, compare) {