######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More tests => 73; use strict; use warnings; use lib qw(../lib lib); use Data::Range::Compare qw(HELPER_CB ); use Data::Dumper; ######################### # Insert your test code below, the Test::More module is use()ed here so read # its man page ( perldoc Test::More ) for help writing this test script. my $s='Data::Range::Compare'; my %helper=HELPER_CB; ## Consolidate check { my @raw=map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } ( [0,1] ,[0,4] ,[2,3] ,[4,5] ); my $consolidated=$s->consolidate_ranges(\%helper,\@raw); ok($consolidated->[0] eq '0 - 5','consolidate range check 1'); ## more complex consolidation check @raw=map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } ( [0,1] ,[2,2] ,[2,3] ,[3,3] ,[4,5] ,[4,4] ); $consolidated=$s->consolidate_ranges(\%helper,\@raw); my $ok=join ', ',@$consolidated; ok($ok eq '0 - 1, 2 - 3, 4 - 5','consolidate range check 2'); } # fill missing { my @raw=map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } ( [0,1] ,[4,5] ); my $list=$s->fill_missing_ranges(\%helper,\@raw); my $check=join(" ",@$list); ok('0 - 1 2 - 3 4 - 5' eq $check,'fill_missing_ranges'); } # range_start_end_fill { my @list=( [map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [0,1]] ,[map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [2,3] ] ,[map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [3,7] ] ); my $res=$s->range_start_end_fill(\%helper,\@list); ok(join(',',@{$list[0]}) eq '0 - 1,2 - 7','range_start_end_fill 1'); ok(join(',',@{$list[1]}) eq '0 - 1,2 - 3,4 - 7','range_start_end_fill 2'); ok(join(',',@{$list[2]}) eq '0 - 2,3 - 7','range_start_end_fill 3'); } { my @list=( [map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [0,1]] ,[map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [2,3] ] ,[map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [3,7] ] ); my $check; my ($row,$cols,$next,$missing)=$s->init_compare_row(\%helper,\@list); $check=join(', ',@$row); ok($check eq '0 - 1, 0 - 1, 0 - 2','init_compare_row'); ok($next,'next check 1'); ($row,$cols,$next,$missing)=$s->compare_row(\%helper,\@list,$row,$cols); $check=join(', ',@$row); ok($check eq '2 - 7, 2 - 3, 0 - 2','compare_row 1'); ok($next,'next check 2'); ($row,$cols,$next,$missing)=$s->compare_row(\%helper,\@list,$row,$cols); $check=join(', ',@$row); ok($check eq '2 - 7, 2 - 3, 3 - 7','compare_row 2'); ok($next,'next check 3'); ($row,$cols,$next,$missing)=$s->compare_row(\%helper,\@list,$row,$cols); $check=join(', ',@$row); ok($check eq '2 - 7, 4 - 7, 3 - 7','compare_row 2'); ok(!$next,'next check 4'); } ## new set of compare row data ## found this issue when porting the code to php { my $data=[ # 1 [ Data::Range::Compare->new(\%helper,0,1) ] # 2 ,[ Data::Range::Compare->new(\%helper,0,1) , Data::Range::Compare->new(\%helper,2,3) ] # 3 ,[ Data::Range::Compare->new(\%helper,5,6) ] # 4 ,[ Data::Range::Compare->new(\%helper,0,6) ] ]; my ($row,$cols,$next)=$s->init_compare_row(\%helper,$data); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==0,'checking column 2'); ok($cols->[2]==-1,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '0 - 1, 0 - 1, 0 - 4, 0 - 6' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==-1,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '2 - 6, 2 - 3, 0 - 4, 0 - 6' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==-1,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '2 - 6, 4 - 6, 0 - 4, 0 - 6' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok(!$next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==0,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '2 - 6, 4 - 6, 5 - 6, 0 - 6' ,'check the sanity of the row'); } { my $data=[ # 1 [ Data::Range::Compare->new(\%helper,0,1) ] # 2 ,[ Data::Range::Compare->new(\%helper,0,1) , Data::Range::Compare->new(\%helper,2,2) ] # 3 ,[ Data::Range::Compare->new(\%helper,5,6) ] # 4 ,[ Data::Range::Compare->new(\%helper,0,6) ] ]; my ($row,$cols,$next)=$s->init_compare_row(\%helper,$data); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==0,'checking column 2'); ok($cols->[2]==-1,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '0 - 1, 0 - 1, 0 - 4, 0 - 6' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==-1,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '2 - 6, 2 - 2, 0 - 4, 0 - 6' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==-1,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '2 - 6, 3 - 6, 0 - 4, 0 - 6' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok(!$next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==0,'checking column 3'); ok($cols->[3]==0,'checking coumn 4'); ok(join(', ',@$row) eq '2 - 6, 3 - 6, 5 - 6, 0 - 6' ,'check the sanity of the row'); } { my $data=[ # 1 [ Data::Range::Compare->new(\%helper,0,1) ,Data::Range::Compare->new(\%helper,4,5) ] # 2 ,[ Data::Range::Compare->new(\%helper,0,1) , Data::Range::Compare->new(\%helper,4,5) ] # 3 ,[ Data::Range::Compare->new(\%helper,0,1) , Data::Range::Compare->new(\%helper,4,5) ] ]; my ($row,$cols,$next)=$s->init_compare_row(\%helper,$data); ok($next,'should be a next value'); ok($cols->[0]==0,'checking column 1'); ok($cols->[1]==0,'checking column 2'); ok($cols->[2]==0,'checking column 3'); ok(join(', ',@$row) eq '0 - 1, 0 - 1, 0 - 1' ,'check the sanity of the row'); ($row,$cols,$next)=$s->compare_row(\%helper,$data,$row,$cols); ok(!$next,'should be no next value'); ok($cols->[0]==1,'checking column 1'); ok($cols->[1]==1,'checking column 2'); ok($cols->[2]==1,'checking column 3'); ok(join(', ',@$row) eq '4 - 5, 4 - 5, 4 - 5' ,'check the sanity of the row'); } ## wrapper range_compare { my @list=( [map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [0,1]] ,[map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [2,3] ] ,[map { Data::Range::Compare->new(\%helper,$_->[0],$_->[1]) } [3,7] ] ); my $sub=$s->range_compare(\%helper,\@list); my $total=0; while(my @row=$sub->()) { ++$total; } ok($total==4,'range_compare'); } ################################# # ### END OF THE UNIT TESTS 1; __END__