1*4766a86cSSiva Chandra Reddy //===-- ldexp_differential_fuzz.cpp ---------------------------------------===//
2*4766a86cSSiva Chandra Reddy //
3*4766a86cSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*4766a86cSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*4766a86cSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*4766a86cSSiva Chandra Reddy //
7*4766a86cSSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*4766a86cSSiva Chandra Reddy ///
9*4766a86cSSiva Chandra Reddy /// Differential fuzz test for llvm-libc ldexp implementation.
10*4766a86cSSiva Chandra Reddy ///
11*4766a86cSSiva Chandra Reddy //===----------------------------------------------------------------------===//
12*4766a86cSSiva Chandra Reddy
13*4766a86cSSiva Chandra Reddy #include "fuzzing/math/RemQuoDiff.h"
14*4766a86cSSiva Chandra Reddy #include "fuzzing/math/SingleInputSingleOutputDiff.h"
15*4766a86cSSiva Chandra Reddy #include "fuzzing/math/TwoInputSingleOutputDiff.h"
16*4766a86cSSiva Chandra Reddy
17*4766a86cSSiva Chandra Reddy #include "src/math/ceil.h"
18*4766a86cSSiva Chandra Reddy #include "src/math/ceilf.h"
19*4766a86cSSiva Chandra Reddy #include "src/math/ceill.h"
20*4766a86cSSiva Chandra Reddy
21*4766a86cSSiva Chandra Reddy #include "src/math/fdim.h"
22*4766a86cSSiva Chandra Reddy #include "src/math/fdimf.h"
23*4766a86cSSiva Chandra Reddy #include "src/math/fdiml.h"
24*4766a86cSSiva Chandra Reddy
25*4766a86cSSiva Chandra Reddy #include "src/math/floor.h"
26*4766a86cSSiva Chandra Reddy #include "src/math/floorf.h"
27*4766a86cSSiva Chandra Reddy #include "src/math/floorl.h"
28*4766a86cSSiva Chandra Reddy
29*4766a86cSSiva Chandra Reddy #include "src/math/frexp.h"
30*4766a86cSSiva Chandra Reddy #include "src/math/frexpf.h"
31*4766a86cSSiva Chandra Reddy #include "src/math/frexpl.h"
32*4766a86cSSiva Chandra Reddy
33*4766a86cSSiva Chandra Reddy #include "src/math/hypotf.h"
34*4766a86cSSiva Chandra Reddy
35*4766a86cSSiva Chandra Reddy #include "src/math/ldexp.h"
36*4766a86cSSiva Chandra Reddy #include "src/math/ldexpf.h"
37*4766a86cSSiva Chandra Reddy #include "src/math/ldexpl.h"
38*4766a86cSSiva Chandra Reddy
39*4766a86cSSiva Chandra Reddy #include "src/math/logb.h"
40*4766a86cSSiva Chandra Reddy #include "src/math/logbf.h"
41*4766a86cSSiva Chandra Reddy #include "src/math/logbl.h"
42*4766a86cSSiva Chandra Reddy
43*4766a86cSSiva Chandra Reddy #include "src/math/modf.h"
44*4766a86cSSiva Chandra Reddy #include "src/math/modff.h"
45*4766a86cSSiva Chandra Reddy #include "src/math/modfl.h"
46*4766a86cSSiva Chandra Reddy
47*4766a86cSSiva Chandra Reddy #include "src/math/remainder.h"
48*4766a86cSSiva Chandra Reddy #include "src/math/remainderf.h"
49*4766a86cSSiva Chandra Reddy #include "src/math/remainderl.h"
50*4766a86cSSiva Chandra Reddy
51*4766a86cSSiva Chandra Reddy #include "src/math/remquo.h"
52*4766a86cSSiva Chandra Reddy #include "src/math/remquof.h"
53*4766a86cSSiva Chandra Reddy #include "src/math/remquol.h"
54*4766a86cSSiva Chandra Reddy
55*4766a86cSSiva Chandra Reddy #include "src/math/round.h"
56*4766a86cSSiva Chandra Reddy #include "src/math/roundf.h"
57*4766a86cSSiva Chandra Reddy #include "src/math/roundl.h"
58*4766a86cSSiva Chandra Reddy
59*4766a86cSSiva Chandra Reddy #include "src/math/sqrt.h"
60*4766a86cSSiva Chandra Reddy #include "src/math/sqrtf.h"
61*4766a86cSSiva Chandra Reddy #include "src/math/sqrtl.h"
62*4766a86cSSiva Chandra Reddy
63*4766a86cSSiva Chandra Reddy #include "src/math/trunc.h"
64*4766a86cSSiva Chandra Reddy #include "src/math/truncf.h"
65*4766a86cSSiva Chandra Reddy #include "src/math/truncl.h"
66*4766a86cSSiva Chandra Reddy
67*4766a86cSSiva Chandra Reddy #include <math.h>
68*4766a86cSSiva Chandra Reddy #include <stddef.h>
69*4766a86cSSiva Chandra Reddy #include <stdint.h>
70*4766a86cSSiva Chandra Reddy
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)71*4766a86cSSiva Chandra Reddy extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
72*4766a86cSSiva Chandra Reddy
73*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<float>(&__llvm_libc::ceilf, &::ceilf, data, size);
74*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<double>(&__llvm_libc::ceil, &::ceil, data, size);
75*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<long double>(&__llvm_libc::ceill, &::ceill, data,
76*4766a86cSSiva Chandra Reddy size);
77*4766a86cSSiva Chandra Reddy
78*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<float>(&__llvm_libc::floorf, &::floorf, data,
79*4766a86cSSiva Chandra Reddy size);
80*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<double>(&__llvm_libc::floor, &::floor, data,
81*4766a86cSSiva Chandra Reddy size);
82*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<long double>(&__llvm_libc::floorl, &::floorl,
83*4766a86cSSiva Chandra Reddy data, size);
84*4766a86cSSiva Chandra Reddy
85*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<float>(&__llvm_libc::roundf, &::roundf, data,
86*4766a86cSSiva Chandra Reddy size);
87*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<double>(&__llvm_libc::round, &::round, data,
88*4766a86cSSiva Chandra Reddy size);
89*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<long double>(&__llvm_libc::roundl, &::roundl,
90*4766a86cSSiva Chandra Reddy data, size);
91*4766a86cSSiva Chandra Reddy
92*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<float>(&__llvm_libc::truncf, &::truncf, data,
93*4766a86cSSiva Chandra Reddy size);
94*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<double>(&__llvm_libc::trunc, &::trunc, data,
95*4766a86cSSiva Chandra Reddy size);
96*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<long double>(&__llvm_libc::truncl, &::truncl,
97*4766a86cSSiva Chandra Reddy data, size);
98*4766a86cSSiva Chandra Reddy
99*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<float>(&__llvm_libc::logbf, &::logbf, data, size);
100*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<double>(&__llvm_libc::logb, &::logb, data, size);
101*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<long double>(&__llvm_libc::logbl, &::logbl, data,
102*4766a86cSSiva Chandra Reddy size);
103*4766a86cSSiva Chandra Reddy
104*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<float, float>(&__llvm_libc::hypotf, &::hypotf, data,
105*4766a86cSSiva Chandra Reddy size);
106*4766a86cSSiva Chandra Reddy
107*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<float, float>(&__llvm_libc::remainderf,
108*4766a86cSSiva Chandra Reddy &::remainderf, data, size);
109*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<double, double>(&__llvm_libc::remainder,
110*4766a86cSSiva Chandra Reddy &::remainder, data, size);
111*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<long double, long double>(&__llvm_libc::remainderl,
112*4766a86cSSiva Chandra Reddy &::remainderl, data, size);
113*4766a86cSSiva Chandra Reddy
114*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<float, float>(&__llvm_libc::fdimf, &::fdimf, data,
115*4766a86cSSiva Chandra Reddy size);
116*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<double, double>(&__llvm_libc::fdim, &::fdim, data,
117*4766a86cSSiva Chandra Reddy size);
118*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<long double, long double>(&__llvm_libc::fdiml,
119*4766a86cSSiva Chandra Reddy &::fdiml, data, size);
120*4766a86cSSiva Chandra Reddy
121*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<float>(&__llvm_libc::sqrtf, &::sqrtf, data, size);
122*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<double>(&__llvm_libc::sqrt, &::sqrt, data, size);
123*4766a86cSSiva Chandra Reddy SingleInputSingleOutputDiff<long double>(&__llvm_libc::sqrtl, &::sqrtl, data,
124*4766a86cSSiva Chandra Reddy size);
125*4766a86cSSiva Chandra Reddy
126*4766a86cSSiva Chandra Reddy SingleInputSingleOutputWithSideEffectDiff<float, int>(&__llvm_libc::frexpf,
127*4766a86cSSiva Chandra Reddy &::frexpf, data, size);
128*4766a86cSSiva Chandra Reddy SingleInputSingleOutputWithSideEffectDiff<double, int>(&__llvm_libc::frexp,
129*4766a86cSSiva Chandra Reddy &::frexp, data, size);
130*4766a86cSSiva Chandra Reddy SingleInputSingleOutputWithSideEffectDiff<long double, int>(
131*4766a86cSSiva Chandra Reddy &__llvm_libc::frexpl, &::frexpl, data, size);
132*4766a86cSSiva Chandra Reddy
133*4766a86cSSiva Chandra Reddy SingleInputSingleOutputWithSideEffectDiff<float, float>(&__llvm_libc::modff,
134*4766a86cSSiva Chandra Reddy &::modff, data, size);
135*4766a86cSSiva Chandra Reddy SingleInputSingleOutputWithSideEffectDiff<double, double>(
136*4766a86cSSiva Chandra Reddy &__llvm_libc::modf, &::modf, data, size);
137*4766a86cSSiva Chandra Reddy SingleInputSingleOutputWithSideEffectDiff<long double, long double>(
138*4766a86cSSiva Chandra Reddy &__llvm_libc::modfl, &::modfl, data, size);
139*4766a86cSSiva Chandra Reddy
140*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<float, int>(&__llvm_libc::ldexpf, &::ldexpf, data,
141*4766a86cSSiva Chandra Reddy size);
142*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<double, int>(&__llvm_libc::ldexp, &::ldexp, data,
143*4766a86cSSiva Chandra Reddy size);
144*4766a86cSSiva Chandra Reddy TwoInputSingleOutputDiff<long double, int>(&__llvm_libc::ldexpl, &::ldexpl,
145*4766a86cSSiva Chandra Reddy data, size);
146*4766a86cSSiva Chandra Reddy
147*4766a86cSSiva Chandra Reddy RemQuoDiff<float>(&__llvm_libc::remquof, &::remquof, data, size);
148*4766a86cSSiva Chandra Reddy RemQuoDiff<double>(&__llvm_libc::remquo, &::remquo, data, size);
149*4766a86cSSiva Chandra Reddy RemQuoDiff<long double>(&__llvm_libc::remquol, &::remquol, data, size);
150*4766a86cSSiva Chandra Reddy
151*4766a86cSSiva Chandra Reddy return 0;
152*4766a86cSSiva Chandra Reddy }
153