[gimp-perl] Use epsilon in colour floating-point comparison. Bug 730958



commit 2b8a7a8a28b087d5989a163d4ee3ca862a7a2ae3
Author: Ed J <edj src gnome org>
Date:   Wed Jun 4 01:31:07 2014 +0100

    Use epsilon in colour floating-point comparison. Bug 730958

 t/gimpsetup.pl |    7 ++++++
 t/pdl.t        |   64 +++++++++++++++++++++++++++++++++++---------------------
 t/perlplugin.t |    8 ++++--
 3 files changed, 52 insertions(+), 27 deletions(-)
---
diff --git a/t/gimpsetup.pl b/t/gimpsetup.pl
index a02002d..b86840a 100644
--- a/t/gimpsetup.pl
+++ b/t/gimpsetup.pl
@@ -76,4 +76,11 @@ EOF
   }
 }
 
+my $EPSILON = 1e-6;
+# true if same within $EPSILON
+sub cmp_colour {
+  my ($c1, $c2) = @_;
+  !grep { abs(($c1->[$_]//0) - ($c2->[$_]//0)) > $EPSILON } (0..3);
+}
+
 1;
diff --git a/t/pdl.t b/t/pdl.t
index 0e1ecc4..f35120b 100644
--- a/t/pdl.t
+++ b/t/pdl.t
@@ -119,51 +119,67 @@ Gimp::Context->push;
 Gimp::Context->set_foreground($fgcolour);
 
 $l->fill(FOREGROUND_FILL);
-is_deeply(
-  [ @{$l->test_pdl_getpixel(@setcoords)}[0..2] ],
-  Gimp::canonicalize_color($fgcolour),
+ok(
+  cmp_colour(
+    [ @{$l->test_pdl_getpixel(@setcoords)}[0..2] ],
+    Gimp::canonicalize_color($fgcolour),
+  ),
   'getpixel initial colour'
 );
 $l->test_pdl_setpixel(@setcoords, $setcolour);
-is_deeply(
-  [ @{$l->test_pdl_getpixel(@setcoords)}[0..2] ],
-  Gimp::canonicalize_color($setcolour),
+ok(
+  cmp_colour(
+    [ @{$l->test_pdl_getpixel(@setcoords)}[0..2] ],
+    Gimp::canonicalize_color($setcolour),
+  ),
   'getpixel colour after setpixel'
 );
-is_deeply(
-  [ @{$l->test_pdl_getpixel(map { $_+1 } @setcoords)}[0..2] ],
-  Gimp::canonicalize_color($fgcolour),
+ok(
+  cmp_colour(
+    [ @{$l->test_pdl_getpixel(map { $_+1 } @setcoords)}[0..2] ],
+    Gimp::canonicalize_color($fgcolour),
+  ),
   'getpixel other pixel after setpixel'
 );
 $l->test_pdl_iterate(3);
-is_deeply(
-  [ @{$l->test_pdl_getpixel(@setcoords)}[0..2] ],
-  Gimp::canonicalize_color([ map { $_+3 } @$setcolour ]),
+ok(
+  cmp_colour(
+    [ @{$l->test_pdl_getpixel(@setcoords)}[0..2] ],
+    Gimp::canonicalize_color([ map { $_+3 } @$setcolour ]),
+  ),
   'getpixel colour after iterate'
 );
 
 eval $pdl_operations;
 $l->fill(FOREGROUND_FILL);
-is_deeply(
-  Gimp::canonicalize_color(getpixel($i, $l, @setcoords)),
-  Gimp::canonicalize_color($fgcolour),
+ok(
+  cmp_colour(
+    Gimp::canonicalize_color(getpixel($i, $l, @setcoords)),
+    Gimp::canonicalize_color($fgcolour),
+  ),
   'net getpixel initial colour'
 );
 setpixel($i, $l, @setcoords, Gimp::canonicalize_color($setcolour));
-is_deeply(
-  Gimp::canonicalize_color(getpixel($i, $l, @setcoords)),
-  Gimp::canonicalize_color($setcolour),
+ok(
+  cmp_colour(
+    Gimp::canonicalize_color(getpixel($i, $l, @setcoords)),
+    Gimp::canonicalize_color($setcolour),
+  ),
   'net getpixel colour after setpixel'
 );
-is_deeply(
-  Gimp::canonicalize_color(getpixel($i, $l, map { $_+1 } @setcoords)),
-  Gimp::canonicalize_color($fgcolour),
+ok(
+  cmp_colour(
+    Gimp::canonicalize_color(getpixel($i, $l, map { $_+1 } @setcoords)),
+    Gimp::canonicalize_color($fgcolour),
+  ),
   'net getpixel other pixel after setpixel'
 );
 iterate($i, $l, 3);
-is_deeply(
-  Gimp::canonicalize_color(getpixel($i, $l, @setcoords)),
-  Gimp::canonicalize_color([ map { $_+3 } @$setcolour ]),
+ok(
+  cmp_colour(
+    Gimp::canonicalize_color(getpixel($i, $l, @setcoords)),
+    Gimp::canonicalize_color([ map { $_+3 } @$setcolour ]),
+  ),
   'net getpixel colour after iterate'
 );
 
diff --git a/t/perlplugin.t b/t/perlplugin.t
index 14be584..b70d8de 100644
--- a/t/perlplugin.t
+++ b/t/perlplugin.t
@@ -156,9 +156,11 @@ my ($tl) = $i->get_layers;
 is($tl->get_name, 'value', 'layer name');
 is(Gimp::Plugin->test_return_text('text'), 'text', 'return text');
 my $incolour = [6, 6, 6, 1];
-is_deeply(
-  Gimp::Plugin->test_return_colour($incolour),
-  Gimp::canonicalize_color($incolour),
+ok(
+  cmp_colour(
+    Gimp::Plugin->test_return_colour($incolour),
+    Gimp::canonicalize_color($incolour),
+  ),
   'return colour'
 );
 my $send_text = 'exception';


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]