From 9676c1d19eaaebfe36e680a7308c5951ff1e4919 Mon Sep 17 00:00:00 2001 From: Tony Cook Date: Sun, 12 Feb 2012 00:33:33 +1100 Subject: [PATCH] i_psamp()/i_psampf() coverage tests for paletted images --- t/t023palette.t | 143 +++++++++++++++++++++++++++++++++++++++++++++++- t/t82inline.t | 2 +- 2 files changed, 142 insertions(+), 3 deletions(-) diff --git a/t/t023palette.t b/t/t023palette.t index af227f5f..04ce77bd 100644 --- a/t/t023palette.t +++ b/t/t023palette.t @@ -1,8 +1,8 @@ #!perl -w # some of this is tested in t01introvert.t too use strict; -use Test::More tests => 154; -BEGIN { use_ok("Imager"); } +use Test::More tests => 206; +BEGIN { use_ok("Imager", ':handy'); } use Imager::Test qw(image_bounds_checks test_image is_color3 isnt_image is_color4); @@ -438,6 +438,141 @@ cmp_ok(Imager->errstr, '=~', qr/Channels must be positive and <= 4/, } } +my $psamp_outside_error = "Image position outside of image"; +{ # psamp + print "# psamp\n"; + my $imraw = Imager::i_img_pal_new(10, 10, 3, 255); + my @colors = + ( + NC(0, 0, 0), NC(255, 128, 64), NC(64, 128, 192), + NC(64, 0, 192), NC(255, 128, 0), NC(64, 32, 0), + NC(128, 63, 32), NC(255, 128, 32), NC(64, 32, 16), + ); + is(Imager::i_addcolors($imraw, @colors), "0 but true", + "add colors needed for testing"); + { + is(Imager::i_psamp($imraw, 0, 2, undef, [ 255, 128, 64 ]), 3, + "i_psamp def channels, 3 samples"); + is_color3(Imager::i_get_pixel($imraw, 0, 2), 255, 128, 64, + "check color written"); + Imager::i_img_setmask($imraw, 5); + is(Imager::i_psamp($imraw, 1, 3, undef, [ 64, 128, 192 ]), 3, + "i_psamp def channels, 3 samples, masked"); + is_color3(Imager::i_get_pixel($imraw, 1, 3), 64, 0, 192, + "check color written"); + is(Imager::i_psamp($imraw, 1, 7, [ 0, 1, 2 ], [ 64, 128, 192 ]), 3, + "i_psamp channels listed, 3 samples, masked"); + is_color3(Imager::i_get_pixel($imraw, 1, 7), 64, 0, 192, + "check color written"); + Imager::i_img_setmask($imraw, ~0); + is(Imager::i_psamp($imraw, 2, 4, [ 0, 1 ], [ 255, 128, 64, 32 ]), 4, + "i_psamp channels [0, 1], 4 samples"); + is_color3(Imager::i_get_pixel($imraw, 2, 4), 255, 128, 0, + "check first color written"); + is_color3(Imager::i_get_pixel($imraw, 3, 4), 64, 32, 0, + "check second color written"); + is(Imager::i_psamp($imraw, 0, 5, [ 0, 1, 2 ], [ (128, 63, 32) x 10 ]), 30, + "write a full row"); + is_deeply([ Imager::i_gsamp($imraw, 0, 10, 5, [ 0, 1, 2 ]) ], + [ (128, 63, 32) x 10 ], + "check full row"); + is(Imager::i_psamp($imraw, 8, 8, [ 0, 1, 2 ], + [ 255, 128, 32, 64, 32, 16, 32, 16, 8 ]), + 6, "i_psamp channels [0, 1, 2], 9 samples, but room for 6"); + } + { # errors we catch + is(Imager::i_psamp($imraw, 6, 8, [ 0, 1, 3 ], [ 255, 128, 32 ]), + undef, "i_psamp channels [0, 1, 3], 3 samples (invalid channel number)"); + is(_get_error(), "No channel 3 in this image", + "check error message"); + is(Imager::i_psamp($imraw, 6, 8, [ 0, 1, -1 ], [ 255, 128, 32 ]), + undef, "i_psamp channels [0, 1, -1], 3 samples (invalid channel number)"); + is(_get_error(), "No channel -1 in this image", + "check error message"); + is(Imager::i_psamp($imraw, 0, -1, undef, [ 0, 0, 0 ]), undef, + "negative y"); + is(_get_error(), $psamp_outside_error, "check message"); + is(Imager::i_psamp($imraw, 0, 10, undef, [ 0, 0, 0 ]), undef, + "y overflow"); + is(_get_error(), $psamp_outside_error, "check message"); + is(Imager::i_psamp($imraw, -1, 0, undef, [ 0, 0, 0 ]), undef, + "negative x"); + is(_get_error(), $psamp_outside_error, "check message"); + is(Imager::i_psamp($imraw, 10, 0, undef, [ 0, 0, 0 ]), undef, + "x overflow"); + is(_get_error(), $psamp_outside_error, "check message"); + } + ok(Imager::i_img_type($imraw), "still paletted"); + print "# end psamp tests\n"; +} + +{ # psampf + print "# psampf\n"; + my $imraw = Imager::i_img_pal_new(10, 10, 3, 255); + my @colors = + ( + NC(0, 0, 0), NC(255, 127, 63), NC(64, 128, 192), + NC(63, 0, 191), NC(255, 127, 0), NC(63, 31, 0), + NC(127, 63, 31), NC(255, 127, 31), NC(63, 31, 15), + ); + is(Imager::i_addcolors($imraw, @colors), "0 but true", + "add colors needed for testing"); + { + is(Imager::i_psampf($imraw, 0, 2, undef, [ 1, 0.5, 0.25 ]), 3, + "i_psampf def channels, 3 samples"); + is_color3(Imager::i_get_pixel($imraw, 0, 2), 255, 127, 63, + "check color written"); + Imager::i_img_setmask($imraw, 5); + is(Imager::i_psampf($imraw, 1, 3, undef, [ 0.25, 0.5, 0.75 ]), 3, + "i_psampf def channels, 3 samples, masked"); + is_color3(Imager::i_get_pixel($imraw, 1, 3), 63, 0, 191, + "check color written"); + is(Imager::i_psampf($imraw, 1, 7, [ 0, 1, 2 ], [ 0.25, 0.5, 0.75 ]), 3, + "i_psampf channels listed, 3 samples, masked"); + is_color3(Imager::i_get_pixel($imraw, 1, 7), 63, 0, 191, + "check color written"); + Imager::i_img_setmask($imraw, ~0); + is(Imager::i_psampf($imraw, 2, 4, [ 0, 1 ], [ 1, 0.5, 0.25, 0.125 ]), 4, + "i_psampf channels [0, 1], 4 samples"); + is_color3(Imager::i_get_pixel($imraw, 2, 4), 255, 127, 0, + "check first color written"); + is_color3(Imager::i_get_pixel($imraw, 3, 4), 63, 31, 0, + "check second color written"); + is(Imager::i_psampf($imraw, 0, 5, [ 0, 1, 2 ], [ (0.5, 0.25, 0.125) x 10 ]), 30, + "write a full row"); + is_deeply([ Imager::i_gsamp($imraw, 0, 10, 5, [ 0, 1, 2 ]) ], + [ (127, 63, 31) x 10 ], + "check full row"); + is(Imager::i_psampf($imraw, 8, 8, [ 0, 1, 2 ], + [ 1.0, 0.5, 0.125, 0.25, 0.125, 0.0625, 0.125, 0, 1 ]), + 6, "i_psampf channels [0, 1, 2], 9 samples, but room for 6"); + } + { # errors we catch + is(Imager::i_psampf($imraw, 6, 8, [ 0, 1, 3 ], [ 1, 0.5, 0.125 ]), + undef, "i_psampf channels [0, 1, 3], 3 samples (invalid channel number)"); + is(_get_error(), "No channel 3 in this image", + "check error message"); + is(Imager::i_psampf($imraw, 6, 8, [ 0, 1, -1 ], [ 1, 0.5, 0.125 ]), + undef, "i_psampf channels [0, 1, -1], 3 samples (invalid channel number)"); + is(_get_error(), "No channel -1 in this image", + "check error message"); + is(Imager::i_psampf($imraw, 0, -1, undef, [ 0, 0, 0 ]), undef, + "negative y"); + is(_get_error(), $psamp_outside_error, "check message"); + is(Imager::i_psampf($imraw, 0, 10, undef, [ 0, 0, 0 ]), undef, + "y overflow"); + is(_get_error(), $psamp_outside_error, "check message"); + is(Imager::i_psampf($imraw, -1, 0, undef, [ 0, 0, 0 ]), undef, + "negative x"); + is(_get_error(), $psamp_outside_error, "check message"); + is(Imager::i_psampf($imraw, 10, 0, undef, [ 0, 0, 0 ]), undef, + "x overflow"); + is(_get_error(), $psamp_outside_error, "check message"); + } + ok(Imager::i_img_type($imraw), "still paletted"); + print "# end psampf tests\n"; +} + Imager->close_log; unless ($ENV{IMAGER_KEEP_FILES}) { @@ -484,3 +619,7 @@ sub coloreq { $comment); } +sub _get_error { + my @errors = Imager::i_errors(); + return join(": ", map $_->[0], @errors); +} diff --git a/t/t82inline.t b/t/t82inline.t index b30d831b..92e995db 100644 --- a/t/t82inline.t +++ b/t/t82inline.t @@ -19,7 +19,7 @@ plan skip_all => "perl 5.005_04, 5.005_05 too buggy" -d "testout" or mkdir "testout"; -plan tests => 106; +plan tests => 115; require Inline; Inline->import(with => 'Imager'); Inline->import("FORCE"); # force rebuild