14766a86cSSiva Chandra Reddy //===-- ldexp_differential_fuzz.cpp ---------------------------------------===//
24766a86cSSiva Chandra Reddy //
34766a86cSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44766a86cSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
54766a86cSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
64766a86cSSiva Chandra Reddy //
74766a86cSSiva Chandra Reddy //===----------------------------------------------------------------------===//
84766a86cSSiva Chandra Reddy ///
94766a86cSSiva Chandra Reddy /// Differential fuzz test for llvm-libc ldexp implementation.
104766a86cSSiva Chandra Reddy ///
114766a86cSSiva Chandra Reddy //===----------------------------------------------------------------------===//
124766a86cSSiva Chandra Reddy
134766a86cSSiva Chandra Reddy #include "fuzzing/math/RemQuoDiff.h"
144766a86cSSiva Chandra Reddy #include "fuzzing/math/SingleInputSingleOutputDiff.h"
154766a86cSSiva Chandra Reddy #include "fuzzing/math/TwoInputSingleOutputDiff.h"
164766a86cSSiva Chandra Reddy
174766a86cSSiva Chandra Reddy #include "src/math/ceil.h"
184766a86cSSiva Chandra Reddy #include "src/math/ceilf.h"
194766a86cSSiva Chandra Reddy #include "src/math/ceill.h"
204766a86cSSiva Chandra Reddy
214766a86cSSiva Chandra Reddy #include "src/math/fdim.h"
224766a86cSSiva Chandra Reddy #include "src/math/fdimf.h"
234766a86cSSiva Chandra Reddy #include "src/math/fdiml.h"
244766a86cSSiva Chandra Reddy
254766a86cSSiva Chandra Reddy #include "src/math/floor.h"
264766a86cSSiva Chandra Reddy #include "src/math/floorf.h"
274766a86cSSiva Chandra Reddy #include "src/math/floorl.h"
284766a86cSSiva Chandra Reddy
294766a86cSSiva Chandra Reddy #include "src/math/frexp.h"
304766a86cSSiva Chandra Reddy #include "src/math/frexpf.h"
314766a86cSSiva Chandra Reddy #include "src/math/frexpl.h"
324766a86cSSiva Chandra Reddy
334766a86cSSiva Chandra Reddy #include "src/math/hypotf.h"
344766a86cSSiva Chandra Reddy
354766a86cSSiva Chandra Reddy #include "src/math/ldexp.h"
364766a86cSSiva Chandra Reddy #include "src/math/ldexpf.h"
374766a86cSSiva Chandra Reddy #include "src/math/ldexpl.h"
384766a86cSSiva Chandra Reddy
394766a86cSSiva Chandra Reddy #include "src/math/logb.h"
404766a86cSSiva Chandra Reddy #include "src/math/logbf.h"
414766a86cSSiva Chandra Reddy #include "src/math/logbl.h"
424766a86cSSiva Chandra Reddy
434766a86cSSiva Chandra Reddy #include "src/math/modf.h"
444766a86cSSiva Chandra Reddy #include "src/math/modff.h"
454766a86cSSiva Chandra Reddy #include "src/math/modfl.h"
464766a86cSSiva Chandra Reddy
474766a86cSSiva Chandra Reddy #include "src/math/remainder.h"
484766a86cSSiva Chandra Reddy #include "src/math/remainderf.h"
494766a86cSSiva Chandra Reddy #include "src/math/remainderl.h"
504766a86cSSiva Chandra Reddy
514766a86cSSiva Chandra Reddy #include "src/math/remquo.h"
524766a86cSSiva Chandra Reddy #include "src/math/remquof.h"
534766a86cSSiva Chandra Reddy #include "src/math/remquol.h"
544766a86cSSiva Chandra Reddy
554766a86cSSiva Chandra Reddy #include "src/math/round.h"
564766a86cSSiva Chandra Reddy #include "src/math/roundf.h"
574766a86cSSiva Chandra Reddy #include "src/math/roundl.h"
584766a86cSSiva Chandra Reddy
594766a86cSSiva Chandra Reddy #include "src/math/sqrt.h"
604766a86cSSiva Chandra Reddy #include "src/math/sqrtf.h"
614766a86cSSiva Chandra Reddy #include "src/math/sqrtl.h"
624766a86cSSiva Chandra Reddy
634766a86cSSiva Chandra Reddy #include "src/math/trunc.h"
644766a86cSSiva Chandra Reddy #include "src/math/truncf.h"
654766a86cSSiva Chandra Reddy #include "src/math/truncl.h"
664766a86cSSiva Chandra Reddy
674766a86cSSiva Chandra Reddy #include <math.h>
684766a86cSSiva Chandra Reddy #include <stddef.h>
694766a86cSSiva Chandra Reddy #include <stdint.h>
704766a86cSSiva Chandra Reddy
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)714766a86cSSiva Chandra Reddy extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
724766a86cSSiva Chandra Reddy
73*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<float>(&LIBC_NAMESPACE::ceilf, &::ceilf, data,
744766a86cSSiva Chandra Reddy size);
75*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<double>(&LIBC_NAMESPACE::ceil, &::ceil, data,
764766a86cSSiva Chandra Reddy size);
77*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<long double>(&LIBC_NAMESPACE::ceill, &::ceill,
784766a86cSSiva Chandra Reddy data, size);
794766a86cSSiva Chandra Reddy
80*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<float>(&LIBC_NAMESPACE::floorf, &::floorf, data,
814766a86cSSiva Chandra Reddy size);
82*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<double>(&LIBC_NAMESPACE::floor, &::floor, data,
834766a86cSSiva Chandra Reddy size);
84*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<long double>(&LIBC_NAMESPACE::floorl, &::floorl,
854766a86cSSiva Chandra Reddy data, size);
864766a86cSSiva Chandra Reddy
87*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<float>(&LIBC_NAMESPACE::roundf, &::roundf, data,
884766a86cSSiva Chandra Reddy size);
89*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<double>(&LIBC_NAMESPACE::round, &::round, data,
904766a86cSSiva Chandra Reddy size);
91*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<long double>(&LIBC_NAMESPACE::roundl, &::roundl,
924766a86cSSiva Chandra Reddy data, size);
934766a86cSSiva Chandra Reddy
94*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<float>(&LIBC_NAMESPACE::truncf, &::truncf, data,
954766a86cSSiva Chandra Reddy size);
96*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<double>(&LIBC_NAMESPACE::trunc, &::trunc, data,
974766a86cSSiva Chandra Reddy size);
98*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<long double>(&LIBC_NAMESPACE::truncl, &::truncl,
99*b6bc9d72SGuillaume Chatelet data, size);
1004766a86cSSiva Chandra Reddy
101*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<float>(&LIBC_NAMESPACE::logbf, &::logbf, data,
102*b6bc9d72SGuillaume Chatelet size);
103*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<double>(&LIBC_NAMESPACE::logb, &::logb, data,
104*b6bc9d72SGuillaume Chatelet size);
105*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<long double>(&LIBC_NAMESPACE::logbl, &::logbl,
106*b6bc9d72SGuillaume Chatelet data, size);
107*b6bc9d72SGuillaume Chatelet
108*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<float, float>(&LIBC_NAMESPACE::hypotf, &::hypotf,
109*b6bc9d72SGuillaume Chatelet data, size);
110*b6bc9d72SGuillaume Chatelet
111*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<float, float>(&LIBC_NAMESPACE::remainderf,
1124766a86cSSiva Chandra Reddy &::remainderf, data, size);
113*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<double, double>(&LIBC_NAMESPACE::remainder,
1144766a86cSSiva Chandra Reddy &::remainder, data, size);
115*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<long double, long double>(
116*b6bc9d72SGuillaume Chatelet &LIBC_NAMESPACE::remainderl, &::remainderl, data, size);
1174766a86cSSiva Chandra Reddy
118*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<float, float>(&LIBC_NAMESPACE::fdimf, &::fdimf, data,
1194766a86cSSiva Chandra Reddy size);
120*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<double, double>(&LIBC_NAMESPACE::fdim, &::fdim, data,
1214766a86cSSiva Chandra Reddy size);
122*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<long double, long double>(&LIBC_NAMESPACE::fdiml,
1234766a86cSSiva Chandra Reddy &::fdiml, data, size);
1244766a86cSSiva Chandra Reddy
125*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<float>(&LIBC_NAMESPACE::sqrtf, &::sqrtf, data,
1264766a86cSSiva Chandra Reddy size);
127*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<double>(&LIBC_NAMESPACE::sqrt, &::sqrt, data,
1284766a86cSSiva Chandra Reddy size);
129*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputDiff<long double>(&LIBC_NAMESPACE::sqrtl, &::sqrtl,
1304766a86cSSiva Chandra Reddy data, size);
1314766a86cSSiva Chandra Reddy
132*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputWithSideEffectDiff<float, int>(&LIBC_NAMESPACE::frexpf,
133*b6bc9d72SGuillaume Chatelet &::frexpf, data, size);
134*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputWithSideEffectDiff<double, int>(&LIBC_NAMESPACE::frexp,
135*b6bc9d72SGuillaume Chatelet &::frexp, data, size);
136*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputWithSideEffectDiff<long double, int>(
137*b6bc9d72SGuillaume Chatelet &LIBC_NAMESPACE::frexpl, &::frexpl, data, size);
138*b6bc9d72SGuillaume Chatelet
139*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputWithSideEffectDiff<float, float>(
140*b6bc9d72SGuillaume Chatelet &LIBC_NAMESPACE::modff, &::modff, data, size);
141*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputWithSideEffectDiff<double, double>(
142*b6bc9d72SGuillaume Chatelet &LIBC_NAMESPACE::modf, &::modf, data, size);
143*b6bc9d72SGuillaume Chatelet SingleInputSingleOutputWithSideEffectDiff<long double, long double>(
144*b6bc9d72SGuillaume Chatelet &LIBC_NAMESPACE::modfl, &::modfl, data, size);
145*b6bc9d72SGuillaume Chatelet
146*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<float, int>(&LIBC_NAMESPACE::ldexpf, &::ldexpf, data,
147*b6bc9d72SGuillaume Chatelet size);
148*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<double, int>(&LIBC_NAMESPACE::ldexp, &::ldexp, data,
149*b6bc9d72SGuillaume Chatelet size);
150*b6bc9d72SGuillaume Chatelet TwoInputSingleOutputDiff<long double, int>(&LIBC_NAMESPACE::ldexpl, &::ldexpl,
151*b6bc9d72SGuillaume Chatelet data, size);
152*b6bc9d72SGuillaume Chatelet
153*b6bc9d72SGuillaume Chatelet RemQuoDiff<float>(&LIBC_NAMESPACE::remquof, &::remquof, data, size);
154*b6bc9d72SGuillaume Chatelet RemQuoDiff<double>(&LIBC_NAMESPACE::remquo, &::remquo, data, size);
155*b6bc9d72SGuillaume Chatelet RemQuoDiff<long double>(&LIBC_NAMESPACE::remquol, &::remquol, data, size);
1564766a86cSSiva Chandra Reddy
1574766a86cSSiva Chandra Reddy return 0;
1584766a86cSSiva Chandra Reddy }
159