#!perl -w

use strict;
use warnings 'all';

use Test::More 'no_plan';
BEGIN { use_ok('Iterator::Array::Jagged') };

my @data = ();
for my $var ( 1...4 )
{
	my @var = ();
	for my $val ( 1...4 )
	{
		push @var, "var$var=$val";
	}# end for()
	push @data, \@var;
}# end for()

my @expected = get_expected();

my $iter = Iterator::Array::Jagged->new(
	data => \@data
);

my $count = 0;
while( my @set = $iter->next )
{
        is_deeply( \@set, $expected[$count++] );
}# end while()


my @got = ();
use Data::Dumper;


$count = 0;
Iterator::Array::Jagged->permute( sub {
  is_deeply( \@_, $expected[$count++] );
}, @data );



$count = 0;
my $iter2 = Iterator::Array::Jagged->get_iterator( @data );
while( my @set = $iter2->() )
{
        is_deeply( \@set, $expected[$count++] );
}# end while()




sub get_expected
{
  return (
  [qw/ var1=1 var2=1 var3=1 var4=1/],
  [qw/ var1=2 var2=1 var3=1 var4=1/],
  [qw/ var1=3 var2=1 var3=1 var4=1/],
  [qw/ var1=4 var2=1 var3=1 var4=1/],
  [qw/ var1=1 var2=2 var3=1 var4=1/],
  [qw/ var1=2 var2=2 var3=1 var4=1/],
  [qw/ var1=3 var2=2 var3=1 var4=1/],
  [qw/ var1=4 var2=2 var3=1 var4=1/],
  [qw/ var1=1 var2=3 var3=1 var4=1/],
  [qw/ var1=2 var2=3 var3=1 var4=1/],
  [qw/ var1=3 var2=3 var3=1 var4=1/],
  [qw/ var1=4 var2=3 var3=1 var4=1/],
  [qw/ var1=1 var2=4 var3=1 var4=1/],
  [qw/ var1=2 var2=4 var3=1 var4=1/],
  [qw/ var1=3 var2=4 var3=1 var4=1/],
  [qw/ var1=4 var2=4 var3=1 var4=1/],
  [qw/ var1=1 var2=1 var3=2 var4=1/],
  [qw/ var1=2 var2=1 var3=2 var4=1/],
  [qw/ var1=3 var2=1 var3=2 var4=1/],
  [qw/ var1=4 var2=1 var3=2 var4=1/],
  [qw/ var1=1 var2=2 var3=2 var4=1/],
  [qw/ var1=2 var2=2 var3=2 var4=1/],
  [qw/ var1=3 var2=2 var3=2 var4=1/],
  [qw/ var1=4 var2=2 var3=2 var4=1/],
  [qw/ var1=1 var2=3 var3=2 var4=1/],
  [qw/ var1=2 var2=3 var3=2 var4=1/],
  [qw/ var1=3 var2=3 var3=2 var4=1/],
  [qw/ var1=4 var2=3 var3=2 var4=1/],
  [qw/ var1=1 var2=4 var3=2 var4=1/],
  [qw/ var1=2 var2=4 var3=2 var4=1/],
  [qw/ var1=3 var2=4 var3=2 var4=1/],
  [qw/ var1=4 var2=4 var3=2 var4=1/],
  [qw/ var1=1 var2=1 var3=3 var4=1/],
  [qw/ var1=2 var2=1 var3=3 var4=1/],
  [qw/ var1=3 var2=1 var3=3 var4=1/],
  [qw/ var1=4 var2=1 var3=3 var4=1/],
  [qw/ var1=1 var2=2 var3=3 var4=1/],
  [qw/ var1=2 var2=2 var3=3 var4=1/],
  [qw/ var1=3 var2=2 var3=3 var4=1/],
  [qw/ var1=4 var2=2 var3=3 var4=1/],
  [qw/ var1=1 var2=3 var3=3 var4=1/],
  [qw/ var1=2 var2=3 var3=3 var4=1/],
  [qw/ var1=3 var2=3 var3=3 var4=1/],
  [qw/ var1=4 var2=3 var3=3 var4=1/],
  [qw/ var1=1 var2=4 var3=3 var4=1/],
  [qw/ var1=2 var2=4 var3=3 var4=1/],
  [qw/ var1=3 var2=4 var3=3 var4=1/],
  [qw/ var1=4 var2=4 var3=3 var4=1/],
  [qw/ var1=1 var2=1 var3=4 var4=1/],
  [qw/ var1=2 var2=1 var3=4 var4=1/],
  [qw/ var1=3 var2=1 var3=4 var4=1/],
  [qw/ var1=4 var2=1 var3=4 var4=1/],
  [qw/ var1=1 var2=2 var3=4 var4=1/],
  [qw/ var1=2 var2=2 var3=4 var4=1/],
  [qw/ var1=3 var2=2 var3=4 var4=1/],
  [qw/ var1=4 var2=2 var3=4 var4=1/],
  [qw/ var1=1 var2=3 var3=4 var4=1/],
  [qw/ var1=2 var2=3 var3=4 var4=1/],
  [qw/ var1=3 var2=3 var3=4 var4=1/],
  [qw/ var1=4 var2=3 var3=4 var4=1/],
  [qw/ var1=1 var2=4 var3=4 var4=1/],
  [qw/ var1=2 var2=4 var3=4 var4=1/],
  [qw/ var1=3 var2=4 var3=4 var4=1/],
  [qw/ var1=4 var2=4 var3=4 var4=1/],
  [qw/ var1=1 var2=1 var3=1 var4=2/],
  [qw/ var1=2 var2=1 var3=1 var4=2/],
  [qw/ var1=3 var2=1 var3=1 var4=2/],
  [qw/ var1=4 var2=1 var3=1 var4=2/],
  [qw/ var1=1 var2=2 var3=1 var4=2/],
  [qw/ var1=2 var2=2 var3=1 var4=2/],
  [qw/ var1=3 var2=2 var3=1 var4=2/],
  [qw/ var1=4 var2=2 var3=1 var4=2/],
  [qw/ var1=1 var2=3 var3=1 var4=2/],
  [qw/ var1=2 var2=3 var3=1 var4=2/],
  [qw/ var1=3 var2=3 var3=1 var4=2/],
  [qw/ var1=4 var2=3 var3=1 var4=2/],
  [qw/ var1=1 var2=4 var3=1 var4=2/],
  [qw/ var1=2 var2=4 var3=1 var4=2/],
  [qw/ var1=3 var2=4 var3=1 var4=2/],
  [qw/ var1=4 var2=4 var3=1 var4=2/],
  [qw/ var1=1 var2=1 var3=2 var4=2/],
  [qw/ var1=2 var2=1 var3=2 var4=2/],
  [qw/ var1=3 var2=1 var3=2 var4=2/],
  [qw/ var1=4 var2=1 var3=2 var4=2/],
  [qw/ var1=1 var2=2 var3=2 var4=2/],
  [qw/ var1=2 var2=2 var3=2 var4=2/],
  [qw/ var1=3 var2=2 var3=2 var4=2/],
  [qw/ var1=4 var2=2 var3=2 var4=2/],
  [qw/ var1=1 var2=3 var3=2 var4=2/],
  [qw/ var1=2 var2=3 var3=2 var4=2/],
  [qw/ var1=3 var2=3 var3=2 var4=2/],
  [qw/ var1=4 var2=3 var3=2 var4=2/],
  [qw/ var1=1 var2=4 var3=2 var4=2/],
  [qw/ var1=2 var2=4 var3=2 var4=2/],
  [qw/ var1=3 var2=4 var3=2 var4=2/],
  [qw/ var1=4 var2=4 var3=2 var4=2/],
  [qw/ var1=1 var2=1 var3=3 var4=2/],
  [qw/ var1=2 var2=1 var3=3 var4=2/],
  [qw/ var1=3 var2=1 var3=3 var4=2/],
  [qw/ var1=4 var2=1 var3=3 var4=2/],
  [qw/ var1=1 var2=2 var3=3 var4=2/],
  [qw/ var1=2 var2=2 var3=3 var4=2/],
  [qw/ var1=3 var2=2 var3=3 var4=2/],
  [qw/ var1=4 var2=2 var3=3 var4=2/],
  [qw/ var1=1 var2=3 var3=3 var4=2/],
  [qw/ var1=2 var2=3 var3=3 var4=2/],
  [qw/ var1=3 var2=3 var3=3 var4=2/],
  [qw/ var1=4 var2=3 var3=3 var4=2/],
  [qw/ var1=1 var2=4 var3=3 var4=2/],
  [qw/ var1=2 var2=4 var3=3 var4=2/],
  [qw/ var1=3 var2=4 var3=3 var4=2/],
  [qw/ var1=4 var2=4 var3=3 var4=2/],
  [qw/ var1=1 var2=1 var3=4 var4=2/],
  [qw/ var1=2 var2=1 var3=4 var4=2/],
  [qw/ var1=3 var2=1 var3=4 var4=2/],
  [qw/ var1=4 var2=1 var3=4 var4=2/],
  [qw/ var1=1 var2=2 var3=4 var4=2/],
  [qw/ var1=2 var2=2 var3=4 var4=2/],
  [qw/ var1=3 var2=2 var3=4 var4=2/],
  [qw/ var1=4 var2=2 var3=4 var4=2/],
  [qw/ var1=1 var2=3 var3=4 var4=2/],
  [qw/ var1=2 var2=3 var3=4 var4=2/],
  [qw/ var1=3 var2=3 var3=4 var4=2/],
  [qw/ var1=4 var2=3 var3=4 var4=2/],
  [qw/ var1=1 var2=4 var3=4 var4=2/],
  [qw/ var1=2 var2=4 var3=4 var4=2/],
  [qw/ var1=3 var2=4 var3=4 var4=2/],
  [qw/ var1=4 var2=4 var3=4 var4=2/],
  [qw/ var1=1 var2=1 var3=1 var4=3/],
  [qw/ var1=2 var2=1 var3=1 var4=3/],
  [qw/ var1=3 var2=1 var3=1 var4=3/],
  [qw/ var1=4 var2=1 var3=1 var4=3/],
  [qw/ var1=1 var2=2 var3=1 var4=3/],
  [qw/ var1=2 var2=2 var3=1 var4=3/],
  [qw/ var1=3 var2=2 var3=1 var4=3/],
  [qw/ var1=4 var2=2 var3=1 var4=3/],
  [qw/ var1=1 var2=3 var3=1 var4=3/],
  [qw/ var1=2 var2=3 var3=1 var4=3/],
  [qw/ var1=3 var2=3 var3=1 var4=3/],
  [qw/ var1=4 var2=3 var3=1 var4=3/],
  [qw/ var1=1 var2=4 var3=1 var4=3/],
  [qw/ var1=2 var2=4 var3=1 var4=3/],
  [qw/ var1=3 var2=4 var3=1 var4=3/],
  [qw/ var1=4 var2=4 var3=1 var4=3/],
  [qw/ var1=1 var2=1 var3=2 var4=3/],
  [qw/ var1=2 var2=1 var3=2 var4=3/],
  [qw/ var1=3 var2=1 var3=2 var4=3/],
  [qw/ var1=4 var2=1 var3=2 var4=3/],
  [qw/ var1=1 var2=2 var3=2 var4=3/],
  [qw/ var1=2 var2=2 var3=2 var4=3/],
  [qw/ var1=3 var2=2 var3=2 var4=3/],
  [qw/ var1=4 var2=2 var3=2 var4=3/],
  [qw/ var1=1 var2=3 var3=2 var4=3/],
  [qw/ var1=2 var2=3 var3=2 var4=3/],
  [qw/ var1=3 var2=3 var3=2 var4=3/],
  [qw/ var1=4 var2=3 var3=2 var4=3/],
  [qw/ var1=1 var2=4 var3=2 var4=3/],
  [qw/ var1=2 var2=4 var3=2 var4=3/],
  [qw/ var1=3 var2=4 var3=2 var4=3/],
  [qw/ var1=4 var2=4 var3=2 var4=3/],
  [qw/ var1=1 var2=1 var3=3 var4=3/],
  [qw/ var1=2 var2=1 var3=3 var4=3/],
  [qw/ var1=3 var2=1 var3=3 var4=3/],
  [qw/ var1=4 var2=1 var3=3 var4=3/],
  [qw/ var1=1 var2=2 var3=3 var4=3/],
  [qw/ var1=2 var2=2 var3=3 var4=3/],
  [qw/ var1=3 var2=2 var3=3 var4=3/],
  [qw/ var1=4 var2=2 var3=3 var4=3/],
  [qw/ var1=1 var2=3 var3=3 var4=3/],
  [qw/ var1=2 var2=3 var3=3 var4=3/],
  [qw/ var1=3 var2=3 var3=3 var4=3/],
  [qw/ var1=4 var2=3 var3=3 var4=3/],
  [qw/ var1=1 var2=4 var3=3 var4=3/],
  [qw/ var1=2 var2=4 var3=3 var4=3/],
  [qw/ var1=3 var2=4 var3=3 var4=3/],
  [qw/ var1=4 var2=4 var3=3 var4=3/],
  [qw/ var1=1 var2=1 var3=4 var4=3/],
  [qw/ var1=2 var2=1 var3=4 var4=3/],
  [qw/ var1=3 var2=1 var3=4 var4=3/],
  [qw/ var1=4 var2=1 var3=4 var4=3/],
  [qw/ var1=1 var2=2 var3=4 var4=3/],
  [qw/ var1=2 var2=2 var3=4 var4=3/],
  [qw/ var1=3 var2=2 var3=4 var4=3/],
  [qw/ var1=4 var2=2 var3=4 var4=3/],
  [qw/ var1=1 var2=3 var3=4 var4=3/],
  [qw/ var1=2 var2=3 var3=4 var4=3/],
  [qw/ var1=3 var2=3 var3=4 var4=3/],
  [qw/ var1=4 var2=3 var3=4 var4=3/],
  [qw/ var1=1 var2=4 var3=4 var4=3/],
  [qw/ var1=2 var2=4 var3=4 var4=3/],
  [qw/ var1=3 var2=4 var3=4 var4=3/],
  [qw/ var1=4 var2=4 var3=4 var4=3/],
  [qw/ var1=1 var2=1 var3=1 var4=4/],
  [qw/ var1=2 var2=1 var3=1 var4=4/],
  [qw/ var1=3 var2=1 var3=1 var4=4/],
  [qw/ var1=4 var2=1 var3=1 var4=4/],
  [qw/ var1=1 var2=2 var3=1 var4=4/],
  [qw/ var1=2 var2=2 var3=1 var4=4/],
  [qw/ var1=3 var2=2 var3=1 var4=4/],
  [qw/ var1=4 var2=2 var3=1 var4=4/],
  [qw/ var1=1 var2=3 var3=1 var4=4/],
  [qw/ var1=2 var2=3 var3=1 var4=4/],
  [qw/ var1=3 var2=3 var3=1 var4=4/],
  [qw/ var1=4 var2=3 var3=1 var4=4/],
  [qw/ var1=1 var2=4 var3=1 var4=4/],
  [qw/ var1=2 var2=4 var3=1 var4=4/],
  [qw/ var1=3 var2=4 var3=1 var4=4/],
  [qw/ var1=4 var2=4 var3=1 var4=4/],
  [qw/ var1=1 var2=1 var3=2 var4=4/],
  [qw/ var1=2 var2=1 var3=2 var4=4/],
  [qw/ var1=3 var2=1 var3=2 var4=4/],
  [qw/ var1=4 var2=1 var3=2 var4=4/],
  [qw/ var1=1 var2=2 var3=2 var4=4/],
  [qw/ var1=2 var2=2 var3=2 var4=4/],
  [qw/ var1=3 var2=2 var3=2 var4=4/],
  [qw/ var1=4 var2=2 var3=2 var4=4/],
  [qw/ var1=1 var2=3 var3=2 var4=4/],
  [qw/ var1=2 var2=3 var3=2 var4=4/],
  [qw/ var1=3 var2=3 var3=2 var4=4/],
  [qw/ var1=4 var2=3 var3=2 var4=4/],
  [qw/ var1=1 var2=4 var3=2 var4=4/],
  [qw/ var1=2 var2=4 var3=2 var4=4/],
  [qw/ var1=3 var2=4 var3=2 var4=4/],
  [qw/ var1=4 var2=4 var3=2 var4=4/],
  [qw/ var1=1 var2=1 var3=3 var4=4/],
  [qw/ var1=2 var2=1 var3=3 var4=4/],
  [qw/ var1=3 var2=1 var3=3 var4=4/],
  [qw/ var1=4 var2=1 var3=3 var4=4/],
  [qw/ var1=1 var2=2 var3=3 var4=4/],
  [qw/ var1=2 var2=2 var3=3 var4=4/],
  [qw/ var1=3 var2=2 var3=3 var4=4/],
  [qw/ var1=4 var2=2 var3=3 var4=4/],
  [qw/ var1=1 var2=3 var3=3 var4=4/],
  [qw/ var1=2 var2=3 var3=3 var4=4/],
  [qw/ var1=3 var2=3 var3=3 var4=4/],
  [qw/ var1=4 var2=3 var3=3 var4=4/],
  [qw/ var1=1 var2=4 var3=3 var4=4/],
  [qw/ var1=2 var2=4 var3=3 var4=4/],
  [qw/ var1=3 var2=4 var3=3 var4=4/],
  [qw/ var1=4 var2=4 var3=3 var4=4/],
  [qw/ var1=1 var2=1 var3=4 var4=4/],
  [qw/ var1=2 var2=1 var3=4 var4=4/],
  [qw/ var1=3 var2=1 var3=4 var4=4/],
  [qw/ var1=4 var2=1 var3=4 var4=4/],
  [qw/ var1=1 var2=2 var3=4 var4=4/],
  [qw/ var1=2 var2=2 var3=4 var4=4/],
  [qw/ var1=3 var2=2 var3=4 var4=4/],
  [qw/ var1=4 var2=2 var3=4 var4=4/],
  [qw/ var1=1 var2=3 var3=4 var4=4/],
  [qw/ var1=2 var2=3 var3=4 var4=4/],
  [qw/ var1=3 var2=3 var3=4 var4=4/],
  [qw/ var1=4 var2=3 var3=4 var4=4/],
  [qw/ var1=1 var2=4 var3=4 var4=4/],
  [qw/ var1=2 var2=4 var3=4 var4=4/],
  [qw/ var1=3 var2=4 var3=4 var4=4/],
  [qw/ var1=4 var2=4 var3=4 var4=4/]
);
}# end get_expected()