From 5e5867a32ac6c98e8397903556af078de39b8544 Mon Sep 17 00:00:00 2001 From: Vaibhav Gupta Date: Wed, 14 Aug 2019 03:33:02 +0530 Subject: Add psxfenv01 test to psxtests Note that this test requires a functional fenv implementation. Some targets have multilib variants where the fenv implementation is not 100% passing. --- testsuites/psxtests/Makefile.am | 12 +++ testsuites/psxtests/configure.ac | 8 +- testsuites/psxtests/psxfenv01/init.c | 125 ++++++++++++++++++++++++++++ testsuites/psxtests/psxfenv01/psxfenv01.doc | 23 +++++ testsuites/psxtests/psxfenv01/psxfenv01.scn | 7 ++ 5 files changed, 173 insertions(+), 2 deletions(-) create mode 100644 testsuites/psxtests/psxfenv01/init.c create mode 100644 testsuites/psxtests/psxfenv01/psxfenv01.doc create mode 100644 testsuites/psxtests/psxfenv01/psxfenv01.scn (limited to 'testsuites/psxtests') diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am index c12b03636d..2ccb10a473 100755 --- a/testsuites/psxtests/Makefile.am +++ b/testsuites/psxtests/Makefile.am @@ -415,6 +415,18 @@ psxfchx01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_psxfchx01) \ $(support_includes) -I$(top_srcdir)/include endif +if HAS_FENV +if TEST_psxfenv01 +psx_tests += psxfenv01 +psx_screens += psxfenv01/psxfenv01.scn +psx_docs += psxfenv01/psxfenv01.doc +psxfenv01_SOURCES = psxfenv01/init.c +psxfenv01_CPPFLAGS = $(AM_CPPFLAGS) $(TEST_FLAGS_psxfenv01) \ + $(support_includes) +psxfenv01_LDADD = -lm $(LDADD) +endif +endif + if TEST_psxfile01 psx_tests += psxfile01 psx_screens += psxfile01/psxfile01.scn diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac index bb44bb8883..6e2b19f498 100644 --- a/testsuites/psxtests/configure.ac +++ b/testsuites/psxtests/configure.ac @@ -36,8 +36,11 @@ AM_CONDITIONAL([HAS_CPLUSPLUS],[test x"$HAS_CPLUSPLUS" = x"yes"]) RTEMS_CHECK_CPUOPTS([RTEMS_POSIX_API]) AM_CONDITIONAL(HAS_POSIX,test x"${rtems_cv_RTEMS_POSIX_API}" = x"yes") -AC_CHECK_HEADER([ndbm.h]. [HAS_NDBM=yes], [HAS_NDBM=no]) -AM_CONDITIONAL(HAS_NDBM,test x"${ac_cv_header_ndbm_h__HAS_NDBM_yes}" = x"yes") +AC_CHECK_HEADER([ndbm.h]) +AM_CONDITIONAL(HAS_NDBM,test x"${ac_cv_header_ndbm_h}" = x"yes") + +AC_CHECK_HEADER([fenv.h]) +AM_CONDITIONAL(HAS_FENV,test x"${ac_cv_header_fenv_h}" = x"yes") # BSP Test configuration RTEMS_TEST_CHECK([psx01]) @@ -83,6 +86,7 @@ RTEMS_TEST_CHECK([psxenosys]) RTEMS_TEST_CHECK([psxfatal01]) RTEMS_TEST_CHECK([psxfatal02]) RTEMS_TEST_CHECK([psxfchx01]) +RTEMS_TEST_CHECK([psxfenv01]) RTEMS_TEST_CHECK([psxfile01]) RTEMS_TEST_CHECK([psxfile02]) RTEMS_TEST_CHECK([psxfilelock01]) diff --git a/testsuites/psxtests/psxfenv01/init.c b/testsuites/psxtests/psxfenv01/init.c new file mode 100644 index 0000000000..fcdf3aeb67 --- /dev/null +++ b/testsuites/psxtests/psxfenv01/init.c @@ -0,0 +1,125 @@ +/* + * @file + * @brief Test suite for fenv.h methods + */ + +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2019 Vaibhav Gupta + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +/* header files are listed in lexical/lexicographical/alphabetical order */ + +#include +#include +#include +#include /* contains declarations of fenv methods */ +#include +#include +#include +#include +#include +#include + +const char rtems_test_name[] = "PSXFENV 01"; + +/* forward declarations to avoid warnings */ +rtems_task Init(rtems_task_argument ignored); + +/* Test Function Begins */ +rtems_task Init(rtems_task_argument ignored) +{ + double a, b, c; + int r; + fexcept_t excepts; + TEST_BEGIN(); + + /* + * 'FE_ALL_EXCEPT' will be defined only when 'feclearexcept()', + * 'fegetexceptflag()', 'feraiseexcept()', 'fesetexceptflag()' and + * 'fetestexcept()' functions are supported by the architecture. + * Hence their testcases can be wrapped under #ifdef and #endif. + */ + #ifdef FE_ALL_EXCEPT /* floating-point exceptions */ + puts( "fesetenv(FE_DFL_ENV)." ); + r = fesetenv(FE_DFL_ENV); + if (r) + printf("fesetenv ==> %d\n", r); + rtems_test_assert( r == 0 ); + + /* Test 'feclearexcept()' and 'fetestexcept()' in one go. */ + puts( "feclearexcept(FE_ALL_EXCEPT)." ); + r = feclearexcept(FE_ALL_EXCEPT); + if (r) + printf("feclearexcept ==> 0x%x\n", r); + rtems_test_assert( r == 0 ); + + r = fetestexcept( FE_ALL_EXCEPT ); + if (r) + printf("fetestexcept ==> 0x%x\n", r); + rtems_test_assert( r == 0 ); + + /* Test 'FE_DIVBYZERO' */ + puts( "Divide by zero and confirm fetestexcept()" ); + a = 0.0; + b = 1.0; + c = b/a; + (void) c; + + fegetexceptflag(&excepts,FE_ALL_EXCEPT); + + r = feraiseexcept(FE_DIVBYZERO); + rtems_test_assert( fetestexcept( FE_DIVBYZERO ) ); + + /* Test 'FE_INEXACT' */ + a = 10.0; + c = b/a; + + #endif /* floating-point exceptions */ + + TEST_END(); + rtems_test_exit(0); +} + +/* NOTICE: the clock driver is explicitly disabled */ + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 6 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_INIT +#include +/* end of file */ diff --git a/testsuites/psxtests/psxfenv01/psxfenv01.doc b/testsuites/psxtests/psxfenv01/psxfenv01.doc new file mode 100644 index 0000000000..3aa7757496 --- /dev/null +++ b/testsuites/psxtests/psxfenv01/psxfenv01.doc @@ -0,0 +1,23 @@ +# COPYRIGHT (c) 2019 +# On-Line Applications Research Corporation (OAR). +# +# SPDX-License-Identifier: BSD-2-Clause +# + +This file describes the directives and concepts tested by this test set. + +test set name: psxfenv01 + +Directives: + fesetenv + feclearexcept + fetestexcept + texceptflag + feraiseexcept + +Concepts: + ++ This test exercises the fenv.h methods. + ++ All tests are disabled if the constant FE_ALL_EXCEPT is not defined. + diff --git a/testsuites/psxtests/psxfenv01/psxfenv01.scn b/testsuites/psxtests/psxfenv01/psxfenv01.scn new file mode 100644 index 0000000000..21395e6712 --- /dev/null +++ b/testsuites/psxtests/psxfenv01/psxfenv01.scn @@ -0,0 +1,7 @@ +*** BEGIN OF TEST PSXFENV 01 *** +fesetenv(FE_DFL_ENV). +feclearexcept(FE_ALL_EXCEPT). +Divide by zero and confirm fetestexcept() + +*** END OF TEST PSXFENV 01 *** + -- cgit v1.2.3