# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl 1.t' ######################### # change 'tests => 1' to 'tests => last_test_to_print'; use Test::More qw(no_plan); BEGIN { use_ok('Algorithm::SetCovering') }; use Algorithm::SetCovering; my $alg = Algorithm::SetCovering->new( columns => 4, mode => "greedy"); $alg->add_row(1, 0, 1, 0); $alg->add_row(1, 1, 0, 0); $alg->add_row(1, 1, 1, 0); $alg->add_row(0, 1, 0, 1); $alg->add_row(0, 0, 1, 1); ######################### my @set = $alg->min_row_set(1, 1, 1, 1); is("@set", "2 3", "Matching 1 1 1 1"); ######################### my @set = $alg->min_row_set(0, 0, 0, 0); is("@set", "", "Matching 0 0 0 0"); ######################### my @set = $alg->min_row_set(0, 0, 0, 1); is("@set", "3", "Matching 0 0 0 1"); ######################### my @set = $alg->min_row_set(0, 0, 1, 1); is("@set", "4", "Matching 0 0 1 1"); ######################### my @set = $alg->min_row_set(0, 1, 1, 1); is("@set", "2 3", "Matching 0 1 1 1"); ###################################### # Bug fix (keys don't cover all locks) ###################################### $alg = Algorithm::SetCovering->new( columns => 4, mode => "greedy"); $alg->add_row(1, 0, 1, 0); $alg->add_row(1, 1, 0, 0); $alg->add_row(1, 1, 1, 0); $alg->add_row(0, 1, 0, 0); $alg->add_row(0, 0, 1, 0); ######################### my @set = $alg->min_row_set(1, 1, 1, 1); is("@set", "", "Bugfix: Endless loop");