From b6873b7a72cf9818113ca72dd1ef105bf8d9f286 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 30 Oct 2023 16:52:20 +0100 Subject: [PATCH] fenv-exceptions-state-c23: Add tests. * tests/test-fenv-except-state-3.c: New file. * modules/fenv-exceptions-state-c23-tests: New file. --- ChangeLog | 4 ++ modules/fenv-exceptions-state-c23-tests | 13 +++++ tests/test-fenv-except-state-3.c | 70 +++++++++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 modules/fenv-exceptions-state-c23-tests create mode 100644 tests/test-fenv-except-state-3.c diff --git a/ChangeLog b/ChangeLog index a513bcf2af..e0bf89a9e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2023-10-30 Bruno Haible + fenv-exceptions-state-c23: Add tests. + * tests/test-fenv-except-state-3.c: New file. + * modules/fenv-exceptions-state-c23-tests: New file. + fenv-exceptions-state-c23: New module. * lib/fenv.in.h (fetestexceptflag): New declaration. * lib/fenv-except-state-test.c: New file, based on glibc. diff --git a/modules/fenv-exceptions-state-c23-tests b/modules/fenv-exceptions-state-c23-tests new file mode 100644 index 0000000000..3d92a4714f --- /dev/null +++ b/modules/fenv-exceptions-state-c23-tests @@ -0,0 +1,13 @@ +Files: +tests/test-fenv-except-state-3.c +tests/macros.h + +Depends-on: +fenv-exceptions-tracking-c99 + +configure.ac: + +Makefile.am: +TESTS += test-fenv-except-state-3 +check_PROGRAMS += test-fenv-except-state-3 +test_fenv_except_state_3_LDADD = $(LDADD) @FENV_EXCEPTIONS_STATE_LIBM@ $(FENV_EXCEPTIONS_TRACKING_LIBM) diff --git a/tests/test-fenv-except-state-3.c b/tests/test-fenv-except-state-3.c new file mode 100644 index 0000000000..b1f72e6b9c --- /dev/null +++ b/tests/test-fenv-except-state-3.c @@ -0,0 +1,70 @@ +/* Test of saving the floating-point exception status flags. + Copyright (C) 2023 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2023. */ + +#include + +/* Specification. */ +#include + +#include "macros.h" + +int +main () +{ + fexcept_t saved_flags_1; + fexcept_t saved_flags_2; + + /* Test setting all exception flags. */ + if (feraiseexcept (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) != 0) + { + fputs ("Skipping test: floating-point exceptions are not supported on this machine.\n", stderr); + return 77; + } + + /* Fill saved_flags_1. */ + ASSERT (fegetexceptflag (&saved_flags_1, + FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) + == 0); + /* Check its contents. */ + ASSERT (fetestexceptflag (&saved_flags_1, + FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) + == (FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)); + ASSERT (fetestexceptflag (&saved_flags_1, FE_INVALID) == FE_INVALID); + ASSERT (fetestexceptflag (&saved_flags_1, FE_DIVBYZERO) == FE_DIVBYZERO); + ASSERT (fetestexceptflag (&saved_flags_1, FE_OVERFLOW) == FE_OVERFLOW); + ASSERT (fetestexceptflag (&saved_flags_1, FE_UNDERFLOW) == FE_UNDERFLOW); + ASSERT (fetestexceptflag (&saved_flags_1, FE_INEXACT) == FE_INEXACT); + + /* Clear some of the exception flags. */ + ASSERT (feclearexcept (FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) == 0); + /* Here, the set exception flags are FE_INVALID | FE_DIVBYZERO. */ + ASSERT (fetestexcept (FE_INVALID) == FE_INVALID); + ASSERT (fetestexcept (FE_DIVBYZERO) == FE_DIVBYZERO); + ASSERT (fetestexcept (FE_OVERFLOW) == 0); + ASSERT (fetestexcept (FE_UNDERFLOW) == 0); + ASSERT (fetestexcept (FE_INEXACT) == 0); + + /* Fill saved_flags_2. */ + ASSERT (fegetexceptflag (&saved_flags_2, FE_INVALID | FE_OVERFLOW) == 0); + /* Check its contents. */ + ASSERT (fetestexceptflag (&saved_flags_2, FE_INVALID | FE_OVERFLOW) == FE_INVALID); + ASSERT (fetestexceptflag (&saved_flags_2, FE_INVALID) == FE_INVALID); + ASSERT (fetestexceptflag (&saved_flags_2, FE_OVERFLOW) == 0); + + return 0; +} -- 2.39.5