xref: /aosp_15_r20/external/AFLplusplus/test/test-floatingpoint.c (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1*08b48e0bSAndroid Build Coastguard Worker #include <stdlib.h>
2*08b48e0bSAndroid Build Coastguard Worker #include <unistd.h>
3*08b48e0bSAndroid Build Coastguard Worker #include <limits.h>
4*08b48e0bSAndroid Build Coastguard Worker #include <stdint.h>
5*08b48e0bSAndroid Build Coastguard Worker 
6*08b48e0bSAndroid Build Coastguard Worker __AFL_FUZZ_INIT();
7*08b48e0bSAndroid Build Coastguard Worker 
main(void)8*08b48e0bSAndroid Build Coastguard Worker int main(void) {
9*08b48e0bSAndroid Build Coastguard Worker 
10*08b48e0bSAndroid Build Coastguard Worker   ssize_t bytes_read;
11*08b48e0bSAndroid Build Coastguard Worker 
12*08b48e0bSAndroid Build Coastguard Worker   __AFL_INIT();
13*08b48e0bSAndroid Build Coastguard Worker   float *magic = (float *)__AFL_FUZZ_TESTCASE_BUF;
14*08b48e0bSAndroid Build Coastguard Worker 
15*08b48e0bSAndroid Build Coastguard Worker   while (__AFL_LOOP(INT_MAX)) {
16*08b48e0bSAndroid Build Coastguard Worker 
17*08b48e0bSAndroid Build Coastguard Worker     int len = __AFL_FUZZ_TESTCASE_LEN;
18*08b48e0bSAndroid Build Coastguard Worker     if (len < sizeof(float)) return 1;
19*08b48e0bSAndroid Build Coastguard Worker 
20*08b48e0bSAndroid Build Coastguard Worker     /* 15 + 1/2                      = 15.5  */
21*08b48e0bSAndroid Build Coastguard Worker     /* 15 + 1/2 + 1/8                = 15.625  */
22*08b48e0bSAndroid Build Coastguard Worker     /* 15 + 1/2 + 1/8 + 1/32         = 15.65625  */
23*08b48e0bSAndroid Build Coastguard Worker     /* 15 + 1/2 + 1/8 + 1/32 + 1/128 = 15.6640625  */
24*08b48e0bSAndroid Build Coastguard Worker     if ((*magic >= 15.0 + 0.5 + 0.125 + 0.03125) &&
25*08b48e0bSAndroid Build Coastguard Worker         (*magic <= 15.0 + 0.5 + 0.125 + 0.03125 + 0.0078125))
26*08b48e0bSAndroid Build Coastguard Worker       abort();
27*08b48e0bSAndroid Build Coastguard Worker 
28*08b48e0bSAndroid Build Coastguard Worker   }
29*08b48e0bSAndroid Build Coastguard Worker 
30*08b48e0bSAndroid Build Coastguard Worker   return 0;
31*08b48e0bSAndroid Build Coastguard Worker 
32*08b48e0bSAndroid Build Coastguard Worker }
33*08b48e0bSAndroid Build Coastguard Worker 
34