Skip to content

Commit 0142bd6

Browse files
authored
[libc] created tan function fuzzer (#101570)
Also edited file header formatting on sin_fuz and cos_fuzz
1 parent b6a2eb0 commit 0142bd6

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

libc/fuzzing/math/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,12 @@ add_libc_fuzzer(
7979
DEPENDS
8080
libc.src.math.cos
8181
)
82+
83+
add_libc_fuzzer(
84+
tan_fuzz
85+
NEED_MPFR
86+
SRCS
87+
tan_fuzz.cpp
88+
DEPENDS
89+
libc.src.math.tan
90+
)

libc/fuzzing/math/cos_fuzz.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//===-- cos_fuzz.cpp ----------------------------------------------------===//
1+
//===-- cos_fuzz.cpp ------------------------------------------------------===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.

libc/fuzzing/math/sin_fuzz.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//===-- sin_fuzz.cpp ----------------------------------------------------===//
1+
//===-- sin_fuzz.cpp ------------------------------------------------------===//
22
//
33
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44
// See https://llvm.org/LICENSE.txt for license information.

libc/fuzzing/math/tan_fuzz.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//===-- tan_fuzz.cpp ------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
///
9+
/// Fuzzing test for llvm-libc tan implementation.
10+
///
11+
//===----------------------------------------------------------------------===//
12+
13+
#include "src/math/tan.h"
14+
#include <math.h>
15+
#include <mpfr.h>
16+
17+
extern "C" int LLVMFuzzerTestOneInput(const double x) {
18+
// remove NaN and inf as preconditions
19+
if (isnan(x))
20+
return 0;
21+
if (isinf(x))
22+
return 0;
23+
// signed zeros already tested in unit tests
24+
if (signbit(x) && x == 0.0)
25+
return 0;
26+
mpfr_t input;
27+
mpfr_init2(input, 53);
28+
mpfr_set_d(input, x, MPFR_RNDN);
29+
int output = mpfr_tan(input, input, MPFR_RNDN);
30+
mpfr_subnormalize(input, output, MPFR_RNDN);
31+
double to_compare = mpfr_get_d(input, MPFR_RNDN);
32+
33+
double result = LIBC_NAMESPACE::tan(x);
34+
35+
if (result != to_compare)
36+
__builtin_trap();
37+
38+
mpfr_clear(input);
39+
return 0;
40+
}

0 commit comments

Comments
 (0)