Make common fmax implementation generic.
[glibc.git] / math / test-fenv-clear-main.c
blobc5e468af1706e4e01f4e4008867a6c897534a8fb
1 /* Test fesetenv (FE_DFL_ENV) and fesetenv (FE_NOMASK_ENV) clear
2 exceptions (bug 19181).
3 Copyright (C) 2015-2016 Free Software Foundation, Inc.
4 This file is part of the GNU C Library.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, see
18 <http://www.gnu.org/licenses/>. */
20 #include <fenv.h>
21 #include <float.h>
22 #include <stdio.h>
24 volatile float fa = 1.0f, fb = 0.0f, fc = FLT_MAX, fr;
25 volatile long double lda = 1.0L, ldb = 0.0L, ldc = LDBL_MAX, ldr;
27 static void
28 raise_exceptions (void)
30 /* Raise exceptions both with feraiseexcept and arithmetic to allow
31 for case of multiple floating-point units with separate
32 exceptions state. */
33 feraiseexcept (FE_ALL_EXCEPT);
34 fr = fb / fb;
35 fr = fa / fb;
36 fr = fc * fc;
37 fr = fa / fc / fc;
38 ldr = ldb / ldb;
39 ldr = lda / ldb;
40 ldr = ldc * ldc;
41 ldr = lda / ldc / ldc;
44 static __attribute__ ((noinline)) int
45 run_tests (void)
47 int result = 0;
48 raise_exceptions ();
49 if (fesetenv (FE_DFL_ENV) == 0)
51 puts ("PASS: fesetenv (FE_DFL_ENV)");
52 if (fetestexcept (FE_ALL_EXCEPT) == 0)
53 puts ("PASS: fesetenv (FE_DFL_ENV) clearing exceptions");
54 else
56 puts ("FAIL: fesetenv (FE_DFL_ENV) clearing exceptions");
57 result = 1;
60 else
62 puts ("FAIL: fesetenv (FE_DFL_ENV)");
63 result = 1;
65 #ifdef FE_NOMASK_ENV
66 raise_exceptions ();
67 if (fesetenv (FE_NOMASK_ENV) == 0)
69 if (fetestexcept (FE_ALL_EXCEPT) == 0)
70 puts ("PASS: fesetenv (FE_NOMASK_ENV) clearing exceptions");
71 else
73 puts ("FAIL: fesetenv (FE_NOMASK_ENV) clearing exceptions");
74 result = 1;
77 else
78 puts ("fesetenv (FE_NOMASK_ENV) failed, cannot test");
79 #endif
80 return result;
83 static int
84 do_test (void)
86 CHECK_CAN_TEST;
87 return run_tests ();
90 #define TEST_FUNCTION do_test ()
91 #include "../test-skeleton.c"