diff mbox series

[FFmpeg-devel] tests/dnn/mathunary: fix the issue of NAN

Message ID 20200702135124.2751-1-ting.fu@intel.com
State Superseded
Headers show
Series [FFmpeg-devel] tests/dnn/mathunary: fix the issue of NAN
Related show

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Ting Fu July 2, 2020, 1:51 p.m. UTC
When one of output[i] & expected_output is NAN, the unit test will always pass.

Signed-off-by: Ting Fu <ting.fu@intel.com>
---
 tests/dnn/dnn-layer-mathunary-test.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Guo, Yejun July 8, 2020, 2:39 a.m. UTC | #1
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Ting Fu
> Sent: 2020年7月2日 21:51
> To: ffmpeg-devel@ffmpeg.org
> Subject: [FFmpeg-devel] [PATCH] tests/dnn/mathunary: fix the issue of NAN
> 
> When one of output[i] & expected_output is NAN, the unit test will always pass.
> 
> Signed-off-by: Ting Fu <ting.fu@intel.com>
> ---
>  tests/dnn/dnn-layer-mathunary-test.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/dnn/dnn-layer-mathunary-test.c
> b/tests/dnn/dnn-layer-mathunary-test.c
> index bf77c44bbe..f251447771 100644
> --- a/tests/dnn/dnn-layer-mathunary-test.c
> +++ b/tests/dnn/dnn-layer-mathunary-test.c
> @@ -74,7 +74,8 @@ static int test(DNNMathUnaryOperation op)
>      output = operands[1].data;
>      for (int i = 0; i < sizeof(input) / sizeof(float); ++i) {
>          float expected_output = get_expected(input[i], op);
> -        if(fabs(output[i] - expected_output) > EPS) {
> +        if ((isnan(output[i]) ^ isnan(expected_output)) ||
> +            fabs(output[i] - expected_output) > EPS) {

it's possible that different platform handles NaN slightly different.
my suggestion is to describe it simply/clearly to avoid possible issue. 

for example.
A: isnan(output[i]);
B: isnan(expected_output);
C: fabs(output[i] - expected_output) > EPS
if ( (A&&!B) || (!A&&B) || (!A && !B && C) )


>              printf("at index %d, output: %f, expected_output: %f\n", i,
> output[i], expected_output);
>              av_freep(&output);
>              return 1;
> --
> 2.17.1
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with
> subject "unsubscribe".
Ting Fu July 8, 2020, 3:54 a.m. UTC | #2
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Guo,
> Yejun
> Sent: Wednesday, July 8, 2020 10:39 AM
> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH] tests/dnn/mathunary: fix the issue of NAN
> 
> 
> 
> > -----Original Message-----
> > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Ting
> > Fu
> > Sent: 2020年7月2日 21:51
> > To: ffmpeg-devel@ffmpeg.org
> > Subject: [FFmpeg-devel] [PATCH] tests/dnn/mathunary: fix the issue of
> > NAN
> >
> > When one of output[i] & expected_output is NAN, the unit test will always
> pass.
> >
> > Signed-off-by: Ting Fu <ting.fu@intel.com>
> > ---
> >  tests/dnn/dnn-layer-mathunary-test.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/tests/dnn/dnn-layer-mathunary-test.c
> > b/tests/dnn/dnn-layer-mathunary-test.c
> > index bf77c44bbe..f251447771 100644
> > --- a/tests/dnn/dnn-layer-mathunary-test.c
> > +++ b/tests/dnn/dnn-layer-mathunary-test.c
> > @@ -74,7 +74,8 @@ static int test(DNNMathUnaryOperation op)
> >      output = operands[1].data;
> >      for (int i = 0; i < sizeof(input) / sizeof(float); ++i) {
> >          float expected_output = get_expected(input[i], op);
> > -        if(fabs(output[i] - expected_output) > EPS) {
> > +        if ((isnan(output[i]) ^ isnan(expected_output)) ||
> > +            fabs(output[i] - expected_output) > EPS) {
> 
> it's possible that different platform handles NaN slightly different.
> my suggestion is to describe it simply/clearly to avoid possible issue.
> 
> for example.
> A: isnan(output[i]);
> B: isnan(expected_output);
> C: fabs(output[i] - expected_output) > EPS if ( (A&&!B) || (!A&&B) || (!A && !B
> && C) )
> 
Hi Yejun,

Thank you for your review. Modified in PATCH V2. The verify logic is as below:
If ( (!A && !B && (ABS_SUB> EPS)) || (A && !B) || (!A && B)).

Thank you
Ting FU
> 
> >              printf("at index %d, output: %f, expected_output: %f\n",
> > i, output[i], expected_output);
> >              av_freep(&output);
> >              return 1;
> > --
> > 2.17.1
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org
> with subject "unsubscribe".
diff mbox series

Patch

diff --git a/tests/dnn/dnn-layer-mathunary-test.c b/tests/dnn/dnn-layer-mathunary-test.c
index bf77c44bbe..f251447771 100644
--- a/tests/dnn/dnn-layer-mathunary-test.c
+++ b/tests/dnn/dnn-layer-mathunary-test.c
@@ -74,7 +74,8 @@  static int test(DNNMathUnaryOperation op)
     output = operands[1].data;
     for (int i = 0; i < sizeof(input) / sizeof(float); ++i) {
         float expected_output = get_expected(input[i], op);
-        if(fabs(output[i] - expected_output) > EPS) {
+        if ((isnan(output[i]) ^ isnan(expected_output)) ||
+            fabs(output[i] - expected_output) > EPS) {
             printf("at index %d, output: %f, expected_output: %f\n", i, output[i], expected_output);
             av_freep(&output);
             return 1;