File tree Expand file tree Collapse file tree 3 files changed +94
-0
lines changed Expand file tree Collapse file tree 3 files changed +94
-0
lines changed Original file line number Diff line number Diff line change @@ -71,6 +71,15 @@ add_libc_fuzzer(
71
71
libc.src.math.sin
72
72
)
73
73
74
+ add_libc_fuzzer (
75
+ acos_fuzz
76
+ NEED_MPFR
77
+ SRCS
78
+ acos_fuzz.cpp
79
+ DEPENDS
80
+ libc.src.math.acos
81
+ )
82
+
74
83
add_libc_fuzzer (
75
84
cos_fuzz
76
85
NEED_MPFR
@@ -80,6 +89,15 @@ add_libc_fuzzer(
80
89
libc.src.math.cos
81
90
)
82
91
92
+ add_libc_fuzzer (
93
+ atan_fuzz
94
+ NEED_MPFR
95
+ SRCS
96
+ atan_fuzz.cpp
97
+ DEPENDS
98
+ libc.src.math.atan
99
+ )
100
+
83
101
add_libc_fuzzer (
84
102
tan_fuzz
85
103
NEED_MPFR
Original file line number Diff line number Diff line change
1
+ // ===-- acos_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 acos implementation.
10
+ // /
11
+ // ===----------------------------------------------------------------------===//
12
+
13
+ #include " src/math/acos.h"
14
+ #include " utils/MPFRWrapper/mpfr_inc.h"
15
+ #include < math.h>
16
+
17
+ extern " C" int LLVMFuzzerTestOneInput (double x) {
18
+ // remove NaN and inf and values outside accepted range
19
+ if (isnan (x) || isinf (x) || x > 1 || x < -1 )
20
+ return 0 ;
21
+ // signed zeros already tested in unit tests
22
+ if (signbit (x) && x == 0.0 )
23
+ return 0 ;
24
+ mpfr_t input;
25
+ mpfr_init2 (input, 53 );
26
+ mpfr_set_d (input, x, MPFR_RNDN);
27
+ int output = mpfr_acos (input, input, MPFR_RNDN);
28
+ mpfr_subnormalize (input, output, MPFR_RNDN);
29
+ double to_compare = mpfr_get_d (input, MPFR_RNDN);
30
+
31
+ double result = LIBC_NAMESPACE::acos (x);
32
+
33
+ if (result != to_compare)
34
+ __builtin_trap ();
35
+
36
+ mpfr_clear (input);
37
+ return 0 ;
38
+ }
Original file line number Diff line number Diff line change
1
+ // ===-- atan_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 atan implementation.
10
+ // /
11
+ // ===----------------------------------------------------------------------===//
12
+
13
+ #include " src/math/atan.h"
14
+ #include " utils/MPFRWrapper/mpfr_inc.h"
15
+ #include < math.h>
16
+
17
+ extern " C" int LLVMFuzzerTestOneInput (double x) {
18
+ // remove NaN and inf
19
+ if (isnan (x) || isinf (x))
20
+ return 0 ;
21
+ // signed zeros already tested in unit tests
22
+ if (signbit (x) && x == 0.0 )
23
+ return 0 ;
24
+ mpfr_t input;
25
+ mpfr_init2 (input, 53 );
26
+ mpfr_set_d (input, x, MPFR_RNDN);
27
+ int output = mpfr_atan (input, input, MPFR_RNDN);
28
+ mpfr_subnormalize (input, output, MPFR_RNDN);
29
+ double to_compare = mpfr_get_d (input, MPFR_RNDN);
30
+
31
+ double result = LIBC_NAMESPACE::atan (x);
32
+
33
+ if (result != to_compare)
34
+ __builtin_trap ();
35
+
36
+ mpfr_clear (input);
37
+ return 0 ;
38
+ }
You can’t perform that action at this time.
0 commit comments