The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More;
use Prima::Test qw(noX11);

my @types = (
	['bpp1', im::Mono], 
	['bpp1 gray', im::BW], 
	['bpp4', im::bpp4], 
	['bpp4 gray', im::bpp4|im::GrayScale], 
	['bpp8', im::bpp8], 
	['bpp8 gray', im::Byte], 
	['rgb', im::RGB], 
	['int16', im::Short], 
	['int32', im::Long], 
	['float', im::Float], 
	['double', im::Double], 
	['complex', im::Complex], 
	['dcomplex', im::DComplex],
# trigs are same as complex here
);

my @filters;
for ( keys %ist:: ) { 
	next if /^(AUTOLOAD|Constant)$/i;
	push @filters, [ $_, &{$ist::{$_}}() ];
}

plan tests => @filters * @types;

sub bytes { unpack('H*', shift ) }
sub is_bytes
{
	my ( $bytes_actual, $bytes_expected, $name ) = @_;
	my $ok = $bytes_actual eq $bytes_expected;
	ok( $ok, $name );
	warn "#   " . bytes($bytes_actual) . " (actual)\n#   " . bytes($bytes_expected) . " (expected)\n" unless $ok;
#	exit unless $ok;
}

for ( @types ) {
	my ( $typename, $type ) = @$_;
	my $i = Prima::Image->create( 
		width => 32, 
		height => 32, 
		type => $type,
		conversion => ict::None,
		preserveType => 1,
	);
	for ( @filters ) {
		my ( $filtername, $filter ) = @$_;
		my $j = $i-> clone( scaling => $filter );
		$j-> size( 64, 64 );
		$j-> size( 32, 32 );
		is_bytes( $i->data, $j-> data, "$typename $filtername");
	}
}