chore: implement smoke tests for {get,set}payloadbf16 and setpayloadsigbf16 math functions
Signed-off-by: Krishna Pandey <kpandey81930@gmail.com>
This commit is contained in:
parent
6f8d84d83b
commit
c8f43800a5
@ -4853,6 +4853,19 @@ add_fp_unittest(
|
||||
libc.src.math.getpayloadf128
|
||||
)
|
||||
|
||||
add_fp_unittest(
|
||||
getpayloadbf16_test
|
||||
SUITE
|
||||
libc-math-smoke-tests
|
||||
SRCS
|
||||
getpayloadbf16_test.cpp
|
||||
HDRS
|
||||
GetPayloadTest.h
|
||||
DEPENDS
|
||||
libc.src.math.getpayloadbf16
|
||||
libc.src.__support.FPUtil.bfloat16
|
||||
)
|
||||
|
||||
add_fp_unittest(
|
||||
setpayload_test
|
||||
SUITE
|
||||
@ -4913,6 +4926,19 @@ add_fp_unittest(
|
||||
libc.src.math.setpayloadf128
|
||||
)
|
||||
|
||||
add_fp_unittest(
|
||||
setpayloadbf16_test
|
||||
SUITE
|
||||
libc-math-smoke-tests
|
||||
SRCS
|
||||
setpayloadbf16_test.cpp
|
||||
HDRS
|
||||
SetPayloadTest.h
|
||||
DEPENDS
|
||||
libc.src.math.setpayloadbf16
|
||||
libc.src.__support.FPUtil.bfloat16
|
||||
)
|
||||
|
||||
add_fp_unittest(
|
||||
setpayloadsig_test
|
||||
SUITE
|
||||
@ -4973,6 +4999,18 @@ add_fp_unittest(
|
||||
libc.src.math.setpayloadsigf128
|
||||
)
|
||||
|
||||
add_fp_unittest(
|
||||
setpayloadsigbf16_test
|
||||
SUITE
|
||||
libc-math-smoke-tests
|
||||
SRCS
|
||||
setpayloadsigbf16_test.cpp
|
||||
HDRS
|
||||
SetPayloadTest.h
|
||||
DEPENDS
|
||||
libc.src.math.setpayloadsigbf16
|
||||
libc.src.__support.FPUtil.bfloat16
|
||||
)
|
||||
|
||||
add_fp_unittest(
|
||||
f16add_test
|
||||
|
||||
@ -51,23 +51,50 @@ public:
|
||||
EXPECT_FP_EQ(default_snan_payload, funcWrapper(func, sNaN));
|
||||
EXPECT_FP_EQ(default_snan_payload, funcWrapper(func, neg_sNaN));
|
||||
|
||||
T qnan_42 = FPBits::quiet_nan(Sign::POS, 0x42).get_val();
|
||||
T neg_qnan_42 = FPBits::quiet_nan(Sign::NEG, 0x42).get_val();
|
||||
T snan_42 = FPBits::signaling_nan(Sign::POS, 0x42).get_val();
|
||||
T neg_snan_42 = FPBits::signaling_nan(Sign::NEG, 0x42).get_val();
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, qnan_42));
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_qnan_42));
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, snan_42));
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_snan_42));
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 6) {
|
||||
// [S] [E..E] [QM..M] -> number of M bits should be at least 6
|
||||
// 0x31 = 0b110001 = 6 bits
|
||||
T qnan_31 = FPBits::quiet_nan(Sign::POS, 0x31).get_val();
|
||||
T neg_qnan_31 = FPBits::quiet_nan(Sign::NEG, 0x31).get_val();
|
||||
T snan_31 = FPBits::signaling_nan(Sign::POS, 0x31).get_val();
|
||||
T neg_snan_31 = FPBits::signaling_nan(Sign::NEG, 0x31).get_val();
|
||||
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, qnan_31));
|
||||
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, neg_qnan_31));
|
||||
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, snan_31));
|
||||
EXPECT_FP_EQ(T(0x31.0p+0), funcWrapper(func, neg_snan_31));
|
||||
|
||||
T qnan_123 = FPBits::quiet_nan(Sign::POS, 0x123).get_val();
|
||||
T neg_qnan_123 = FPBits::quiet_nan(Sign::NEG, 0x123).get_val();
|
||||
T snan_123 = FPBits::signaling_nan(Sign::POS, 0x123).get_val();
|
||||
T neg_snan_123 = FPBits::signaling_nan(Sign::NEG, 0x123).get_val();
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, qnan_123));
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_qnan_123));
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, snan_123));
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_snan_123));
|
||||
// 0x15 = 0b10101 = 5 bits
|
||||
T qnan_15 = FPBits::quiet_nan(Sign::POS, 0x15).get_val();
|
||||
T neg_qnan_15 = FPBits::quiet_nan(Sign::NEG, 0x15).get_val();
|
||||
T snan_15 = FPBits::signaling_nan(Sign::POS, 0x15).get_val();
|
||||
T neg_snan_15 = FPBits::signaling_nan(Sign::NEG, 0x15).get_val();
|
||||
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, qnan_15));
|
||||
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, neg_qnan_15));
|
||||
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, snan_15));
|
||||
EXPECT_FP_EQ(T(0x15.0p+0), funcWrapper(func, neg_snan_15));
|
||||
}
|
||||
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
|
||||
T qnan_42 = FPBits::quiet_nan(Sign::POS, 0x42).get_val();
|
||||
T neg_qnan_42 = FPBits::quiet_nan(Sign::NEG, 0x42).get_val();
|
||||
T snan_42 = FPBits::signaling_nan(Sign::POS, 0x42).get_val();
|
||||
T neg_snan_42 = FPBits::signaling_nan(Sign::NEG, 0x42).get_val();
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, qnan_42));
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_qnan_42));
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, snan_42));
|
||||
EXPECT_FP_EQ(T(0x42.0p+0), funcWrapper(func, neg_snan_42));
|
||||
}
|
||||
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 9) {
|
||||
T qnan_123 = FPBits::quiet_nan(Sign::POS, 0x123).get_val();
|
||||
T neg_qnan_123 = FPBits::quiet_nan(Sign::NEG, 0x123).get_val();
|
||||
T snan_123 = FPBits::signaling_nan(Sign::POS, 0x123).get_val();
|
||||
T neg_snan_123 = FPBits::signaling_nan(Sign::NEG, 0x123).get_val();
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, qnan_123));
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_qnan_123));
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, snan_123));
|
||||
EXPECT_FP_EQ(T(0x123.0p+0), funcWrapper(func, neg_snan_123));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -54,15 +54,31 @@ public:
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 1).uintval(),
|
||||
FPBits(res).uintval());
|
||||
|
||||
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_signaling_nan());
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x42).uintval(),
|
||||
FPBits(res).uintval());
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 6) {
|
||||
EXPECT_EQ(0, func(&res, T(0x31.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_signaling_nan());
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x31).uintval(),
|
||||
FPBits(res).uintval());
|
||||
|
||||
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_signaling_nan());
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x123).uintval(),
|
||||
FPBits(res).uintval());
|
||||
EXPECT_EQ(0, func(&res, T(0x15.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_signaling_nan());
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x15).uintval(),
|
||||
FPBits(res).uintval());
|
||||
}
|
||||
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
|
||||
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_signaling_nan());
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x42).uintval(),
|
||||
FPBits(res).uintval());
|
||||
}
|
||||
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 9) {
|
||||
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_signaling_nan());
|
||||
EXPECT_EQ(FPBits::signaling_nan(Sign::POS, 0x123).uintval(),
|
||||
FPBits(res).uintval());
|
||||
}
|
||||
|
||||
FPBits nan_payload_bits = FPBits::one();
|
||||
nan_payload_bits.set_biased_exponent(FPBits::FRACTION_LEN - 2 +
|
||||
|
||||
@ -54,15 +54,31 @@ public:
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 1).uintval(), FPBits(res).uintval());
|
||||
|
||||
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x42).uintval(),
|
||||
FPBits(res).uintval());
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 6) {
|
||||
EXPECT_EQ(0, func(&res, T(0x31.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x31).uintval(),
|
||||
FPBits(res).uintval());
|
||||
|
||||
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x123).uintval(),
|
||||
FPBits(res).uintval());
|
||||
EXPECT_EQ(0, func(&res, T(0x15.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x15).uintval(),
|
||||
FPBits(res).uintval());
|
||||
}
|
||||
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 7) {
|
||||
EXPECT_EQ(0, func(&res, T(0x42.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x42).uintval(),
|
||||
FPBits(res).uintval());
|
||||
}
|
||||
|
||||
if constexpr (FPBits::FRACTION_LEN - 1 >= 9) {
|
||||
EXPECT_EQ(0, func(&res, T(0x123.0p+0)));
|
||||
EXPECT_TRUE(FPBits(res).is_quiet_nan());
|
||||
EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x123).uintval(),
|
||||
FPBits(res).uintval());
|
||||
}
|
||||
|
||||
// The following code is creating a NaN payload manually to prevent a
|
||||
// conversion from BigInt to float128.
|
||||
|
||||
14
libc/test/src/math/smoke/getpayloadbf16_test.cpp
Normal file
14
libc/test/src/math/smoke/getpayloadbf16_test.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
//===-- Unittests for getpayloadbf16 --------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "GetPayloadTest.h"
|
||||
|
||||
#include "src/__support/FPUtil/bfloat16.h"
|
||||
#include "src/math/getpayloadbf16.h"
|
||||
|
||||
LIST_GETPAYLOAD_TESTS(bfloat16, LIBC_NAMESPACE::getpayloadbf16)
|
||||
14
libc/test/src/math/smoke/setpayloadbf16_test.cpp
Normal file
14
libc/test/src/math/smoke/setpayloadbf16_test.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
//===-- Unittests for setpayloadbf16 --------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "SetPayloadTest.h"
|
||||
|
||||
#include "src/__support/FPUtil/bfloat16.h"
|
||||
#include "src/math/setpayloadbf16.h"
|
||||
|
||||
LIST_SETPAYLOAD_TESTS(bfloat16, LIBC_NAMESPACE::setpayloadbf16)
|
||||
14
libc/test/src/math/smoke/setpayloadsigbf16_test.cpp
Normal file
14
libc/test/src/math/smoke/setpayloadsigbf16_test.cpp
Normal file
@ -0,0 +1,14 @@
|
||||
//===-- Unittests for setpayloadsigbf16 -----------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "SetPayloadSigTest.h"
|
||||
|
||||
#include "src/__support/FPUtil/bfloat16.h"
|
||||
#include "src/math/setpayloadsigbf16.h"
|
||||
|
||||
LIST_SETPAYLOADSIG_TESTS(bfloat16, LIBC_NAMESPACE::setpayloadsigbf16)
|
||||
Loading…
x
Reference in New Issue
Block a user