Skip to content

[libc] asin fuzz testing #147786

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

[libc] asin fuzz testing #147786

wants to merge 2 commits into from

Conversation

sribee8
Copy link
Contributor

@sribee8 sribee8 commented Jul 9, 2025

Added fuzz test for asin

Added fuzz test for asin
@llvmbot llvmbot added the libc label Jul 9, 2025
@llvmbot
Copy link
Member

llvmbot commented Jul 9, 2025

@llvm/pr-subscribers-libc

Author: None (sribee8)

Changes

Added fuzz test for asin


Full diff: https://github.com/llvm/llvm-project/pull/147786.diff

2 Files Affected:

  • (modified) libc/fuzzing/math/CMakeLists.txt (+9)
  • (added) libc/fuzzing/math/asin_fuzz.cpp (+38)
diff --git a/libc/fuzzing/math/CMakeLists.txt b/libc/fuzzing/math/CMakeLists.txt
index 31336fa3e49f3..1ac72c1007ef2 100644
--- a/libc/fuzzing/math/CMakeLists.txt
+++ b/libc/fuzzing/math/CMakeLists.txt
@@ -62,6 +62,15 @@ add_libc_fuzzer(
     libc.src.math.nextafterl
 )
 
+add_libc_fuzzer(
+  asin_fuzz
+  NEED_MPFR
+  SRCS
+    asin_fuzz.cpp
+  DEPENDS
+    libc.src.math.asin
+)
+
 add_libc_fuzzer(
   sin_fuzz
   NEED_MPFR
diff --git a/libc/fuzzing/math/asin_fuzz.cpp b/libc/fuzzing/math/asin_fuzz.cpp
new file mode 100644
index 0000000000000..20e7a58d4816f
--- /dev/null
+++ b/libc/fuzzing/math/asin_fuzz.cpp
@@ -0,0 +1,38 @@
+//===-- asin_fuzz.cpp -----------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+///
+/// Fuzzing test for llvm-libc asin implementation.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/math/asin.h"
+#include "utils/MPFRWrapper/mpfr_inc.h"
+#include <math.h>
+
+extern "C" int LLVMFuzzerTestOneInput(const double x) {
+  // remove NaN and inf and values outside accepted range
+  if (isnan(x) || isinf(x) || x > 1 || x < -1)
+    return 0;
+  // signed zeros already tested in unit tests
+  if (signbit(x) && x == 0.0)
+    return 0;
+  mpfr_t input;
+  mpfr_init2(input, 53);
+  mpfr_set_d(input, x, MPFR_RNDN);
+  int output = mpfr_asin(input, input, MPFR_RNDN);
+  mpfr_subnormalize(input, output, MPFR_RNDN);
+  double to_compare = mpfr_get_d(input, MPFR_RNDN);
+
+  double result = LIBC_NAMESPACE::asin(x);
+
+  if (result != to_compare)
+    __builtin_trap();
+
+  mpfr_clear(input);
+  return 0;
+}

@sribee8 sribee8 requested a review from lntue July 9, 2025 17:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants