diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake --- a/libc/cmake/modules/LLVMLibCTestRules.cmake +++ b/libc/cmake/modules/LLVMLibCTestRules.cmake @@ -164,6 +164,11 @@ add_dependencies(check-libc ${suite_name}) endfunction(add_libc_testsuite) +function(add_libc_exhaustive_testsuite suite_name) + add_custom_target(${suite_name}) + add_dependencies(exhaustive-check-libc ${suite_name}) +endfunction(add_libc_exhaustive_testsuite) + # Rule to add a fuzzer test. # Usage # add_libc_fuzzer( diff --git a/libc/test/CMakeLists.txt b/libc/test/CMakeLists.txt --- a/libc/test/CMakeLists.txt +++ b/libc/test/CMakeLists.txt @@ -5,6 +5,7 @@ ) add_custom_target(check-libc) +add_custom_target(exhaustive-check-libc) add_subdirectory(config) add_subdirectory(loader) diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt --- a/libc/test/src/math/CMakeLists.txt +++ b/libc/test/src/math/CMakeLists.txt @@ -1072,3 +1072,4 @@ ) add_subdirectory(generic) +add_subdirectory(exhaustive) diff --git a/libc/test/src/math/exhaustive/CMakeLists.txt b/libc/test/src/math/exhaustive/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/libc/test/src/math/exhaustive/CMakeLists.txt @@ -0,0 +1,14 @@ +add_libc_exhaustive_testsuite(libc_math_exhaustive_tests) + +add_fp_unittest( + sqrtf_test + NEED_MPFR + SUITE + libc_math_exhaustive_tests + SRCS + sqrtf_test.cpp + DEPENDS + libc.include.math + libc.src.math.sqrtf + libc.utils.FPUtil.fputil +) diff --git a/libc/test/src/math/exhaustive/sqrtf_test.cpp b/libc/test/src/math/exhaustive/sqrtf_test.cpp new file mode 100644 --- /dev/null +++ b/libc/test/src/math/exhaustive/sqrtf_test.cpp @@ -0,0 +1,26 @@ +//===-- Exhaustive test for sqrtf -----------------------------------------===// +// +// 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/math/sqrtf.h" +#include "utils/FPUtil/FPBits.h" +#include "utils/FPUtil/TestHelpers.h" +#include "utils/MPFRWrapper/MPFRUtils.h" +#include + +using FPBits = __llvm_libc::fputil::FPBits; + +namespace mpfr = __llvm_libc::testing::mpfr; + +TEST(LlvmLibcSqrtfExhaustiveTest, AllValues) { + uint32_t bits = 0; + do { + FPBits x(bits); + ASSERT_MPFR_MATCH(mpfr::Operation::Sqrt, float(x), __llvm_libc::sqrtf(x), + 0.5); + } while (bits++ < 0xffff'ffffU); +}