10142bd6bSRoseZhang03 //===-- sin_fuzz.cpp ------------------------------------------------------===// 290065da6SRoseZhang03 // 390065da6SRoseZhang03 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 490065da6SRoseZhang03 // See https://llvm.org/LICENSE.txt for license information. 590065da6SRoseZhang03 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 690065da6SRoseZhang03 // 790065da6SRoseZhang03 //===----------------------------------------------------------------------===// 890065da6SRoseZhang03 /// 990065da6SRoseZhang03 /// Fuzzing test for llvm-libc sin implementation. 1090065da6SRoseZhang03 /// 1190065da6SRoseZhang03 //===----------------------------------------------------------------------===// 1290065da6SRoseZhang03 1390065da6SRoseZhang03 #include "src/math/sin.h" 14*2d95dee0SRoseZhang03 #include "utils/MPFRWrapper/mpfr_inc.h" 15b45d3629SRoseZhang03 #include <math.h> 1690065da6SRoseZhang03 1790065da6SRoseZhang03 extern "C" int LLVMFuzzerTestOneInput(const double x) { 1890065da6SRoseZhang03 // remove NaN and inf as preconditions 19b45d3629SRoseZhang03 if (isnan(x)) 2090065da6SRoseZhang03 return 0; 21b45d3629SRoseZhang03 if (isinf(x)) 2290065da6SRoseZhang03 return 0; 2390065da6SRoseZhang03 // signed zeros already tested in unit tests 24b45d3629SRoseZhang03 if (signbit(x) && x == 0.0) 2590065da6SRoseZhang03 return 0; 2690065da6SRoseZhang03 mpfr_t input; 2790065da6SRoseZhang03 mpfr_init2(input, 53); 2890065da6SRoseZhang03 mpfr_set_d(input, x, MPFR_RNDN); 2990065da6SRoseZhang03 int output = mpfr_sin(input, input, MPFR_RNDN); 3090065da6SRoseZhang03 mpfr_subnormalize(input, output, MPFR_RNDN); 3190065da6SRoseZhang03 double to_compare = mpfr_get_d(input, MPFR_RNDN); 3290065da6SRoseZhang03 3390065da6SRoseZhang03 double result = LIBC_NAMESPACE::sin(x); 3490065da6SRoseZhang03 3590065da6SRoseZhang03 if (result != to_compare) 3690065da6SRoseZhang03 __builtin_trap(); 3790065da6SRoseZhang03 3890065da6SRoseZhang03 mpfr_clear(input); 3990065da6SRoseZhang03 return 0; 4090065da6SRoseZhang03 } 41