Skip to content

Conversation

@sribee8
Copy link
Contributor

@sribee8 sribee8 commented Jul 9, 2025

created fuzz tests for acos and atan

created fuzz tests for acos and atan
@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

created fuzz tests for acos and atan


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

3 Files Affected:

  • (modified) libc/fuzzing/math/CMakeLists.txt (+18)
  • (added) libc/fuzzing/math/acos_fuzz.cpp (+39)
  • (added) libc/fuzzing/math/atan_fuzz.cpp (+39)
diff --git a/libc/fuzzing/math/CMakeLists.txt b/libc/fuzzing/math/CMakeLists.txt
index 31336fa3e49f3..bb0da15d034b2 100644
--- a/libc/fuzzing/math/CMakeLists.txt
+++ b/libc/fuzzing/math/CMakeLists.txt
@@ -71,6 +71,15 @@ add_libc_fuzzer(
     libc.src.math.sin
 )
 
+add_libc_fuzzer(
+  acos_fuzz
+  NEED_MPFR
+  SRCS
+    acos_fuzz.cpp
+  DEPENDS
+    libc.src.math.acos
+)
+
 add_libc_fuzzer(
   cos_fuzz
   NEED_MPFR
@@ -80,6 +89,15 @@ add_libc_fuzzer(
     libc.src.math.cos
 )
 
+add_libc_fuzzer(
+  atan_fuzz
+  NEED_MPFR
+  SRCS
+    atan_fuzz.cpp
+  DEPENDS
+    libc.src.math.atan
+)
+
 add_libc_fuzzer(
   tan_fuzz
   NEED_MPFR
diff --git a/libc/fuzzing/math/acos_fuzz.cpp b/libc/fuzzing/math/acos_fuzz.cpp
new file mode 100644
index 0000000000000..4846b656e8223
--- /dev/null
+++ b/libc/fuzzing/math/acos_fuzz.cpp
@@ -0,0 +1,39 @@
+//===-- acos_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 acos implementation.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/math/acos.h"
+#include "utils/MPFRWrapper/mpfr_inc.h"
+#include <math.h>
+
+extern "C" int LLVMFuzzerTestOneInput(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_acos(input, input, MPFR_RNDN);
+  mpfr_subnormalize(input, output, MPFR_RNDN);
+  double to_compare = mpfr_get_d(input, MPFR_RNDN);
+
+  double result = LIBC_NAMESPACE::acos(x);
+
+  if (result != to_compare)
+    __builtin_trap();
+
+  mpfr_clear(input);
+  return 0;
+}
+
diff --git a/libc/fuzzing/math/atan_fuzz.cpp b/libc/fuzzing/math/atan_fuzz.cpp
new file mode 100644
index 0000000000000..c6863fbccfd0d
--- /dev/null
+++ b/libc/fuzzing/math/atan_fuzz.cpp
@@ -0,0 +1,39 @@
+//===-- atan_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 atan implementation.
+///
+//===----------------------------------------------------------------------===//
+
+#include "src/math/atan.h"
+#include "utils/MPFRWrapper/mpfr_inc.h"
+#include <math.h>
+
+extern "C" int LLVMFuzzerTestOneInput(double x) {
+  // remove NaN and inf
+  if (isnan(x) || isinf(x))
+    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_atan(input, input, MPFR_RNDN);
+  mpfr_subnormalize(input, output, MPFR_RNDN);
+  double to_compare = mpfr_get_d(input, MPFR_RNDN);
+
+  double result = LIBC_NAMESPACE::atan(x);
+
+  if (result != to_compare)
+    __builtin_trap();
+
+  mpfr_clear(input);
+  return 0;
+}
+

@sribee8 sribee8 requested a review from lntue July 9, 2025 22:40
@github-actions
Copy link

github-actions bot commented Jul 9, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@sribee8 sribee8 merged commit a9d8843 into llvm:main Jul 10, 2025
19 checks passed
@sribee8 sribee8 deleted the acos-atan-fuzz-tests branch July 10, 2025 16:28
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