Skip to content

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
@sribee8 sribee8 merged commit 425ed22 into llvm:main Jul 10, 2025
19 checks passed
@sribee8 sribee8 deleted the asin-fuzz-test branch July 10, 2025 16:29
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