mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
Add an APFloat::convertToInt(APSInt) function that automatically manages the
memory for the result. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135259 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -12,6 +12,7 @@
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "llvm/ADT/APFloat.h"
|
||||
#include "llvm/ADT/APSInt.h"
|
||||
#include "llvm/ADT/SmallString.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
|
||||
@ -344,6 +345,54 @@ TEST(APFloatTest, toString) {
|
||||
ASSERT_EQ("8.731834E+2", convertToString(873.1834, 0, 0));
|
||||
}
|
||||
|
||||
TEST(APFloatTest, toInteger) {
|
||||
bool isExact = false;
|
||||
APSInt result(5, /*isUnsigned=*/true);
|
||||
|
||||
EXPECT_EQ(APFloat::opOK,
|
||||
APFloat(APFloat::IEEEdouble, "10")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_TRUE(isExact);
|
||||
EXPECT_EQ(APSInt(APInt(5, 10), true), result);
|
||||
|
||||
EXPECT_EQ(APFloat::opInvalidOp,
|
||||
APFloat(APFloat::IEEEdouble, "-10")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_FALSE(isExact);
|
||||
EXPECT_EQ(APSInt::getMinValue(5, true), result);
|
||||
|
||||
EXPECT_EQ(APFloat::opInvalidOp,
|
||||
APFloat(APFloat::IEEEdouble, "32")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_FALSE(isExact);
|
||||
EXPECT_EQ(APSInt::getMaxValue(5, true), result);
|
||||
|
||||
EXPECT_EQ(APFloat::opInexact,
|
||||
APFloat(APFloat::IEEEdouble, "7.9")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_FALSE(isExact);
|
||||
EXPECT_EQ(APSInt(APInt(5, 7), true), result);
|
||||
|
||||
result.setIsUnsigned(false);
|
||||
EXPECT_EQ(APFloat::opOK,
|
||||
APFloat(APFloat::IEEEdouble, "-10")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_TRUE(isExact);
|
||||
EXPECT_EQ(APSInt(APInt(5, -10, true), false), result);
|
||||
|
||||
EXPECT_EQ(APFloat::opInvalidOp,
|
||||
APFloat(APFloat::IEEEdouble, "-17")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_FALSE(isExact);
|
||||
EXPECT_EQ(APSInt::getMinValue(5, false), result);
|
||||
|
||||
EXPECT_EQ(APFloat::opInvalidOp,
|
||||
APFloat(APFloat::IEEEdouble, "16")
|
||||
.convertToInteger(result, APFloat::rmTowardZero, &isExact));
|
||||
EXPECT_FALSE(isExact);
|
||||
EXPECT_EQ(APSInt::getMaxValue(5, false), result);
|
||||
}
|
||||
|
||||
static APInt nanbits(const fltSemantics &Sem,
|
||||
bool SNaN, bool Negative, uint64_t fill) {
|
||||
APInt apfill(64, fill);
|
||||
|
Reference in New Issue
Block a user