[PATCH v9] tests for fenv.h functions

Eshan Dhawan eshandhawan51 at gmail.com
Thu Mar 26 19:26:47 UTC 2020


This code was already present in the psxtests written by Vaibhav last year
I haven't changed any information related to copyright.
If anything needs to be changed. I will change it in the next patch.


On Thu, Mar 26, 2020 at 11:12 PM Aditya Upadhyay <aadit0402 at gmail.com>
wrote:

> One more thing, If Vaibhav has provided you this source code and you
> modified then put Vaibhav's name alongwith your name as Copyright info.
>
> On Thu, 26 Mar 2020, 23:10 Aditya Upadhyay, <aadit0402 at gmail.com> wrote:
>
>>
>>
>> On Thu, 26 Mar 2020, 22:59 Eshan dhawan, <eshandhawan51 at gmail.com> wrote:
>>
>>> ---
>>>  testsuites/psxtests/psxfenv01/init.c        | 87 ++++++++++++++++-----
>>>  testsuites/psxtests/psxfenv01/psxfenv01.doc |  9 ++-
>>>  testsuites/psxtests/psxfenv01/psxfenv01.scn |  4 -
>>>  3 files changed, 76 insertions(+), 24 deletions(-)
>>>
>>> diff --git a/testsuites/psxtests/psxfenv01/init.c
>>> b/testsuites/psxtests/psxfenv01/init.c
>>> index cdb0fa596e..158816888d 100644
>>> --- a/testsuites/psxtests/psxfenv01/init.c
>>> +++ b/testsuites/psxtests/psxfenv01/init.c
>>> @@ -46,11 +46,12 @@
>>>  #include <string.h>
>>>  #include <rtems/test.h>
>>>  #include <tmacros.h>
>>> +#include <float.h>
>>>
>>>  const char rtems_test_name[] = "PSXFENV 01";
>>>
>>>  /* forward declarations to avoid warnings */
>>> -rtems_task Init(rtems_task_argument ignored);
>>> +rtems_task Init( rtems_task_argument ignored );
>>>
>>>  /* Test Function Begins */
>>>  rtems_task Init(rtems_task_argument ignored)
>>> @@ -62,40 +63,90 @@ rtems_task Init(rtems_task_argument ignored)
>>>
>>>    /*
>>>     * 'FE_ALL_EXCEPT' will be defined only when 'feclearexcept()',
>>> -   * 'fegetexceptflag()', 'feraiseexcept()', 'fesetexceptflag()' and
>>> -   * 'fetestexcept()' functions are supported by the architecture.
>>> +   * 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);
>>> +    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);
>>> +    /* Test feclearexcept() and fetestexcept() in one go. */
>>> +    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);
>>> +    if ( r ) {
>>> +      printf( "fetestexcept ==> 0x%x\n", r );
>>> +    }
>>>      rtems_test_assert( r == 0 );
>>>
>>> -    /* Test 'FE_DIVBYZERO' */
>>> -    puts( "Divide by zero and confirm fetestexcept()" );
>>> +    /* Test 'FE_DIVBYZERO'
>>> +     *Divide by zero and confirm fetestexcept() */
>>>      a = 0.0;
>>>      b = 1.0;
>>>      c = b/a;
>>>      (void) c;
>>> +    /* Test fegetexceptflag() and fesetexceptflag() */
>>> +    r = fegetexceptflag( &excepts, FE_ALL_EXCEPT );
>>> +    if ( r ) {
>>> +      printf( "fegetexceptflag ==> 0x%x\n", r );
>>> +    }
>>> +    rtems_test_assert( r == 0 );
>>>
>>> -    fegetexceptflag(&excepts,FE_ALL_EXCEPT);
>>> +    r = fesetexceptflag( &excepts, FE_ALL_EXCEPT );
>>> +    if ( r ) {
>>> +      printf( "fesetexceptflag ==> 0x%x\n", r );
>>> +    }
>>> +    rtems_test_assert( r == 0 );
>>>
>>> +    /* Test for fegetround() and fesetround()
>>> +     * They have four main macros to be tested separated by ifdef
>>> +     * Since not all architectures support them
>>> +     * The test case gets and sets the rounding directions */
>>> +#ifdef FE_TONEAREST
>>> +    rtems_test_assert( fegetround() == FE_TONEAREST );
>>> +#endif
>>> +#ifdef FE_TOWARDZERO
>>> +  r = fesetround( FE_TOWARDZERO );
>>> +  if ( r ) {
>>> +      printf( "fesetround ==> 0x%x\n", r );
>>> +    }
>>> +  rtems_test_assert( r == 0 );
>>> +  rtems_test_assert( fegetround() == FE_TOWARDZERO );
>>> +#endif
>>> +#ifdef FE_DOWNWARD
>>> +  r = fesetround( FE_DOWNWARD );
>>> +  if ( r ) {
>>> +      printf( "fesetround ==> 0x%x\n", r );
>>> +    }
>>> +  rtems_test_assert( r == 0 );
>>> +  rtems_test_assert( fegetround() == FE_DOWNWARD );
>>> +#endif
>>> +#ifdef FE_UPWARD
>>> +  r = fesetround( FE_UPWARD );
>>> +  if ( r ) {
>>> +      printf( "fesetround ==> 0x%x\n", r );
>>> +    }
>>> +  rtems_test_assert( r == 0 );
>>> +  rtems_test_assert( fegetround() == FE_UPWARD );
>>> +#endif
>>> +#ifdef FE_TONEAREST
>>> +  r = fesetround( FE_TONEAREST );
>>> +  if ( r ) {
>>> +      printf( "fesetround ==> 0x%x\n", r );
>>> +    }
>>> +  rtems_test_assert( r == 0 );
>>> +#endif
>>> +
>>>  #ifdef FE_DIVBYZERO
>>> -    r = feraiseexcept(FE_DIVBYZERO);
>>> +    r = feraiseexcept( FE_DIVBYZERO ) ;
>>>      rtems_test_assert( fetestexcept( FE_DIVBYZERO ) );
>>>  #endif
>>>
>>> diff --git a/testsuites/psxtests/psxfenv01/psxfenv01.doc
>>> b/testsuites/psxtests/psxfenv01/psxfenv01.doc
>>> index 3aa7757496..0238372013 100644
>>> --- a/testsuites/psxtests/psxfenv01/psxfenv01.doc
>>> +++ b/testsuites/psxtests/psxfenv01/psxfenv01.doc
>>> @@ -1,4 +1,4 @@
>>> -#  COPYRIGHT (c) 2019
>>> +#  COPYRIGHT (c) 2019
>>>  #  On-Line Applications Research Corporation (OAR).
>>>  #
>>>  # SPDX-License-Identifier: BSD-2-Clause
>>> @@ -12,8 +12,13 @@ Directives:
>>>    fesetenv
>>>    feclearexcept
>>>    fetestexcept
>>> -  texceptflag
>>>    feraiseexcept
>>> +  fesetexeptflag
>>> +  fegetexeptflag
>>> +  fegetround
>>> +  fesetround
>>> +
>>> +
>>>
>>
>> Just remove this one unnecessary space after fesetround. Otherwise It
>> looks good.
>>
>>
>>>  Concepts:
>>>
>>> diff --git a/testsuites/psxtests/psxfenv01/psxfenv01.scn
>>> b/testsuites/psxtests/psxfenv01/psxfenv01.scn
>>> index 21395e6712..6ea3bc255e 100644
>>> --- a/testsuites/psxtests/psxfenv01/psxfenv01.scn
>>> +++ b/testsuites/psxtests/psxfenv01/psxfenv01.scn
>>> @@ -1,7 +1,3 @@
>>>  *** BEGIN OF TEST PSXFENV 01 ***
>>> -fesetenv(FE_DFL_ENV).
>>> -feclearexcept(FE_ALL_EXCEPT).
>>> -Divide by zero and confirm fetestexcept()
>>> -
>>>  *** END OF TEST PSXFENV 01 ***
>>>
>>> --
>>> 2.17.1
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200327/2a73a562/attachment-0001.html>


More information about the devel mailing list