On Sat, Mar 21, 2020 at 12:19 AM Eshan Dhawan <eshandhawa...@gmail.com> wrote:
> Hello Everyone, > I had sent this patch a few days ago to add tests of fenv.h to psxtests. > If you all could look into it and tell if it could be merged or requires > any more changes. > > link to patch :* https://lists.rtems.org/pipermail/devel/2020-March/058063.html <https://lists.rtems.org/pipermail/devel/2020-March/058063.html>* > thanks, > Eshan Dhawan > > > On Sun, Mar 8, 2020 at 10:32 PM Eshan Dhawan <eshandhawa...@gmail.com> > wrote: > >> I have compiled as well as executed it for RISC V architecture function >> Fegetround() returns error for all rounding directions other the default >> "FETONEAREST" I asked about it on devel to which dr Joel told that it is >> due to soft-float. >> So I have added its test case but they won't work on emulators. >> >> >> thanks >> -Eshan >> On Sun, Mar 8, 2020 at 7:55 PM Gedare Bloom <ged...@rtems.org> wrote: >> >>> Hi Eshan, >>> >>> This is looking good. Did you compile it? Execute it? How was the >>> output? >>> >>> On Sat, Mar 7, 2020 at 6:51 AM Eshan dhawan <eshandhawa...@gmail.com> >>> wrote: >>> > >>> > --- >>> > testsuites/psxtests/psxfenv01/init.c | 89 ++++++++++++++++++++++------ >>> > 1 file changed, 71 insertions(+), 18 deletions(-) >>> > >>> > diff --git a/testsuites/psxtests/psxfenv01/init.c >>> b/testsuites/psxtests/psxfenv01/init.c >>> > index cdb0fa596e..6d71463465 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,28 +63,31 @@ 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) >>> > + r = fesetenv ( FE_DFL_ENV ); >>> > + if ( r ) { >>> > printf("fesetenv ==> %d\n", r); >>> > - rtems_test_assert( r == 0 ); >>> > + } >>> > + rtems_test_assert ( r == 0 ); >>> > >>> > - /* Test 'feclearexcept()' and 'fetestexcept()' in one go. */ >>> > - puts( "feclearexcept(FE_ALL_EXCEPT)." ); >>> > - r = feclearexcept(FE_ALL_EXCEPT); >>> > - if (r) >>> > + /* 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 ); >>> > + } >>> > + rtems_test_assert ( r == 0 ); >>> > >>> > - r = fetestexcept( FE_ALL_EXCEPT ); >>> > - if (r) >>> > + r = fetestexcept ( FE_ALL_EXCEPT ); >>> > + if ( r ) { >>> > printf("fetestexcept ==> 0x%x\n", r); >>> > - rtems_test_assert( r == 0 ); >>> > + } >>> > + rtems_test_assert ( r == 0 ); >>> > >>> > /* Test 'FE_DIVBYZERO' */ >>> > puts( "Divide by zero and confirm fetestexcept()" ); >>> > @@ -91,11 +95,60 @@ rtems_task Init(rtems_task_argument ignored) >>> > b = 1.0; >>> > c = b/a; >>> > (void) c; >>> > - >>> > - fegetexceptflag(&excepts,FE_ALL_EXCEPT); >>> > - >>> > + /* Test fegetexceptflag() and fesetexceptflag() */ >>> > + r = fegetexceptflag ( &excepts, FE_ALL_EXCEPT ); >>> > + if ( r ) { >>> > + printf("fegetexceptflag ==> 0x%x\n", r); >>> > + } >>> > + rtems_test_assert ( r == 0 ); >>> > + >>> > + 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 >>> > >>> > -- >>> > 2.17.1 >>> > >>> > _______________________________________________ >>> > devel mailing list >>> > devel@rtems.org >>> > http://lists.rtems.org/mailman/listinfo/devel >>> >>
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel