1 /* Test that tininess.h is correct for this architecture. 2 Copyright (C) 2012-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <fenv.h> 20 #include <float.h> 21 #include <stdio.h> 22 #include <tininess.h> 23 24 volatile float a = 0x1.fffp-126; 25 volatile float b = 0x1.0008p-1; 26 volatile float c; 27 volatile float m = FLT_MIN; 28 volatile float mm; 29 30 static int do_test(void)31do_test (void) 32 { 33 int result = 0; 34 #ifdef FE_UNDERFLOW 35 feclearexcept (FE_ALL_EXCEPT); 36 mm = m * m; 37 if (!fetestexcept (FE_UNDERFLOW)) 38 { 39 puts ("underflow exception not supported at runtime, cannot test"); 40 return 0; 41 } 42 feclearexcept (FE_ALL_EXCEPT); 43 c = a * b; 44 if (fetestexcept (FE_UNDERFLOW)) 45 { 46 if (TININESS_AFTER_ROUNDING) 47 { 48 puts ("tininess.h says after rounding, " 49 "but detected before rounding"); 50 result = 1; 51 } 52 } 53 else 54 { 55 if (!TININESS_AFTER_ROUNDING) 56 { 57 puts ("tininess.h says before rounding, " 58 "but detected after rounding"); 59 result = 1; 60 } 61 } 62 #else 63 puts ("underflow exception not supported at compile time, cannot test"); 64 #endif 65 return result; 66 } 67 68 #define TEST_FUNCTION do_test () 69 #include "../test-skeleton.c" 70