[PATCH v9] tests for fenv.h functions
Aditya Upadhyay
aadit0402 at gmail.com
Thu Mar 26 17:42:42 UTC 2020
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/20200326/70e1b140/attachment.html>
More information about the devel
mailing list