blob: cf5154e8cb6ea78f1932ca03f5411267e3f64a44 [file] [log] [blame] [edit]
//===-- Exhaustive test for cbrtbf16 --------------------------------------===//
//
// 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 "src/__support/FPUtil/bfloat16.h"
#include "src/math/cbrtbf16.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
#include "utils/MPFRWrapper/MPFRUtils.h"
using LlvmLibcCbrtbf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
// for the exhaustive test, we test with every 16-bit combination
// and skip NaN cases. v is uint32_t to prevent integer overflow and
// wraparound to 0.
TEST_F(LlvmLibcCbrtbf16Test, Exhaustive) {
for (uint32_t v = 0x00000; v < 0x10000; ++v) {
bfloat16 x =
LIBC_NAMESPACE::fputil::FPBits<bfloat16>(static_cast<uint16_t>(v))
.get_val();
LIBC_NAMESPACE::fputil::FPBits<bfloat16> bits(x); // NaN checking
if (bits.is_nan())
continue;
EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Cbrt, x,
LIBC_NAMESPACE::cbrtbf16(x), 0.5);
}
}