diff options
author | Vaibhav Gupta <vaibhavgupta40@gmail.com> | 2019-08-14 03:33:02 +0530 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2019-09-10 13:47:29 -0500 |
commit | 5e5867a32ac6c98e8397903556af078de39b8544 (patch) | |
tree | 7b5328e1e69c941f40399220a249f9354962a66f /testsuites/psxtests | |
parent | rtems: Make rtems_version_control_key() safer (diff) | |
download | rtems-5e5867a32ac6c98e8397903556af078de39b8544.tar.bz2 |
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.
Diffstat (limited to 'testsuites/psxtests')
-rwxr-xr-x | testsuites/psxtests/Makefile.am | 12 | ||||
-rw-r--r-- | testsuites/psxtests/configure.ac | 8 | ||||
-rw-r--r-- | testsuites/psxtests/psxfenv01/init.c | 125 | ||||
-rw-r--r-- | testsuites/psxtests/psxfenv01/psxfenv01.doc | 23 | ||||
-rw-r--r-- | testsuites/psxtests/psxfenv01/psxfenv01.scn | 7 |
5 files changed, 173 insertions, 2 deletions
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 <errno.h> +#include <limits.h> +#include <math.h> +#include <fenv.h> /* contains declarations of fenv methods */ +#include <stddef.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include <rtems/test.h> +#include <tmacros.h> + +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 <rtems/confdefs.h> +/* 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 *** + |