1*6d347fdfSOverMighty //===-- Exhaustive test for log2f16 ---------------------------------------===// 2*6d347fdfSOverMighty // 3*6d347fdfSOverMighty // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*6d347fdfSOverMighty // See https://llvm.org/LICENSE.txt for license information. 5*6d347fdfSOverMighty // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*6d347fdfSOverMighty // 7*6d347fdfSOverMighty //===----------------------------------------------------------------------===// 8*6d347fdfSOverMighty 9*6d347fdfSOverMighty #include "src/math/log2f16.h" 10*6d347fdfSOverMighty #include "test/UnitTest/FPMatcher.h" 11*6d347fdfSOverMighty #include "test/UnitTest/Test.h" 12*6d347fdfSOverMighty #include "utils/MPFRWrapper/MPFRUtils.h" 13*6d347fdfSOverMighty 14*6d347fdfSOverMighty using LlvmLibcLog2f16Test = LIBC_NAMESPACE::testing::FPTest<float16>; 15*6d347fdfSOverMighty 16*6d347fdfSOverMighty namespace mpfr = LIBC_NAMESPACE::testing::mpfr; 17*6d347fdfSOverMighty 18*6d347fdfSOverMighty // Range: [0, Inf]; 19*6d347fdfSOverMighty static constexpr uint16_t POS_START = 0x0000U; 20*6d347fdfSOverMighty static constexpr uint16_t POS_STOP = 0x7c00U; 21*6d347fdfSOverMighty 22*6d347fdfSOverMighty // Range: [-Inf, 0]; 23*6d347fdfSOverMighty static constexpr uint16_t NEG_START = 0x8000U; 24*6d347fdfSOverMighty static constexpr uint16_t NEG_STOP = 0xfc00U; 25*6d347fdfSOverMighty 26*6d347fdfSOverMighty TEST_F(LlvmLibcLog2f16Test, PositiveRange) { 27*6d347fdfSOverMighty for (uint16_t v = POS_START; v <= POS_STOP; ++v) { 28*6d347fdfSOverMighty float16 x = FPBits(v).get_val(); 29*6d347fdfSOverMighty EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Log2, x, 30*6d347fdfSOverMighty LIBC_NAMESPACE::log2f16(x), 0.5); 31*6d347fdfSOverMighty } 32*6d347fdfSOverMighty } 33*6d347fdfSOverMighty 34*6d347fdfSOverMighty TEST_F(LlvmLibcLog2f16Test, NegativeRange) { 35*6d347fdfSOverMighty for (uint16_t v = NEG_START; v <= NEG_STOP; ++v) { 36*6d347fdfSOverMighty float16 x = FPBits(v).get_val(); 37*6d347fdfSOverMighty EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Log2, x, 38*6d347fdfSOverMighty LIBC_NAMESPACE::log2f16(x), 0.5); 39*6d347fdfSOverMighty } 40*6d347fdfSOverMighty } 41