Skip to content

Commit 32f6609

Browse files
committed
Fix typo and add more tests.
1 parent aeaac93 commit 32f6609

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

llvm/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ endif()
644644

645645
set(LLVM_ENABLE_Z3_SOLVER_DEFAULT "${Z3_FOUND}")
646646

647-
set(LLVM_INTEGRATE_LIBC "OFF" CACHE STRING "Use LLVM libc codes directly if available.")
647+
set(LLVM_INTEGRATE_LIBC "OFF" CACHE STRING "Use LLVM libc code directly if available.")
648648

649649
if(LLVM_INTEGRATE_LIBC)
650650
message(STATUS "LLVM_INTEGRATE_LIBC is ${LLVM_INTEGRATE_LIBC}")

llvm/unittests/ADT/APFloatTest.cpp

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "llvm/Support/FormatVariadic.h"
1717
#include "gtest/gtest.h"
1818
#include <cmath>
19+
#include <limits>
1920
#include <ostream>
2021
#include <string>
2122
#include <tuple>
@@ -8358,9 +8359,24 @@ TEST(APFloatTest, hasSignBitInMSB) {
83588359

83598360
#ifdef LLVM_INTEGRATE_LIBC
83608361
TEST(APFloatTest, expf) {
8361-
EXPECT_EQ(
8362-
1.0f,
8363-
llvm::exp(APFloat(0.0f), APFloat::rmNearestTiesToEven).convertToFloat());
8362+
std::array<llvm::RoundingMode, 4> allRoundingModes = {
8363+
APFloat::rmNearestTiesToEven, APFloat::rmTowardPositive,
8364+
APFloat::rmTowardNegative, APFloat::rmTowardZero};
8365+
for (auto rm : allRoundingModes) {
8366+
// exp(+-0) = 1 for all rounding modes.
8367+
EXPECT_EQ(1.0f, llvm::exp(APFloat(0.0f), rm).convertToFloat());
8368+
EXPECT_EQ(1.0f, llvm::exp(APFloat(-0.0f), rm).convertToFloat());
8369+
// exp(+Inf) = +Inf for all rounding modes.
8370+
EXPECT_EQ(std::numeric_limits<float>::infinity(),
8371+
llvm::exp(APFloat::getInf(APFloat::IEEEsingle(), false), rm)
8372+
.convertToFloat());
8373+
// exp(-Inf) = 0 for all rounding modes.
8374+
EXPECT_EQ(0.0f, llvm::exp(APFloat::getInf(APFloat::IEEEsingle(), true), rm)
8375+
.convertToFloat());
8376+
// exp(NaN) = NaN for all rounding modes.
8377+
EXPECT_TRUE(llvm::exp(APFloat::getNaN(APFloat::IEEEsingle()), rm).isNaN());
8378+
}
8379+
// exp(1)
83648380
EXPECT_EQ(
83658381
0x1.5bf0a8p1f,
83668382
llvm::exp(APFloat(1.0f), APFloat::rmNearestTiesToEven).convertToFloat());
@@ -8372,6 +8388,37 @@ TEST(APFloatTest, expf) {
83728388
llvm::exp(APFloat(1.0f), APFloat::rmTowardNegative).convertToFloat());
83738389
EXPECT_EQ(0x1.5bf0a8p1f,
83748390
llvm::exp(APFloat(1.0f), APFloat::rmTowardZero).convertToFloat());
8391+
// exp(float max)
8392+
EXPECT_EQ(std::numeric_limits<float>::infinity(),
8393+
llvm::exp(APFloat::getLargest(APFloat::IEEEsingle(), false),
8394+
APFloat::rmNearestTiesToEven)
8395+
.convertToFloat());
8396+
EXPECT_EQ(std::numeric_limits<float>::infinity(),
8397+
llvm::exp(APFloat::getLargest(APFloat::IEEEsingle(), false),
8398+
APFloat::rmTowardPositive)
8399+
.convertToFloat());
8400+
EXPECT_EQ(std::numeric_limits<float>::max(),
8401+
llvm::exp(APFloat::getLargest(APFloat::IEEEsingle(), false),
8402+
APFloat::rmTowardNegative)
8403+
.convertToFloat());
8404+
EXPECT_EQ(std::numeric_limits<float>::max(),
8405+
llvm::exp(APFloat::getLargest(APFloat::IEEEsingle(), false),
8406+
APFloat::rmTowardZero)
8407+
.convertToFloat());
8408+
// exp(min_denormal)
8409+
EXPECT_EQ(1.0f, llvm::exp(APFloat::getSmallest(APFloat::IEEEsingle(), false),
8410+
APFloat::rmNearestTiesToEven)
8411+
.convertToFloat());
8412+
EXPECT_EQ(0x1.000002p0,
8413+
llvm::exp(APFloat::getSmallest(APFloat::IEEEsingle(), false),
8414+
APFloat::rmTowardPositive)
8415+
.convertToFloat());
8416+
EXPECT_EQ(1.0f, llvm::exp(APFloat::getSmallest(APFloat::IEEEsingle(), false),
8417+
APFloat::rmTowardNegative)
8418+
.convertToFloat());
8419+
EXPECT_EQ(1.0f, llvm::exp(APFloat::getSmallest(APFloat::IEEEsingle(), false),
8420+
APFloat::rmTowardZero)
8421+
.convertToFloat());
83758422
}
83768423
#endif // LLVM_INTEGRATE_LIBC
83778424

0 commit comments

Comments
 (0)