1 //===-- tan_fuzz.cpp ------------------------------------------------------===//
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
7 //===----------------------------------------------------------------------===//
9 /// Fuzzing test for llvm-libc tan implementation.
11 //===----------------------------------------------------------------------===//
13 #include "src/math/tan.h"
14 #include "utils/MPFRWrapper/mpfr_inc.h"
17 extern "C" int LLVMFuzzerTestOneInput(const double x
) {
18 // remove NaN and inf as preconditions
23 // signed zeros already tested in unit tests
24 if (signbit(x
) && x
== 0.0)
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
);
33 double result
= LIBC_NAMESPACE::tan(x
);
35 if (result
!= to_compare
)