lhp@nereida:/tmp/Algorithm-Knap01DP-0.01/t$ cat -n 01MartelloAndTothBook.t 1 # Before `make install' is performed this script should be runnable with 2 # `make test'. After `make install' it should work as `perl Algorithm-Knap01DP.t' 3 4 ######################### 5 use strict; 6 use Test::More tests => 11; 7 8 BEGIN { use_ok('Algorithm::Knap01DP', qw/Knap01DP ReadKnap/); } 9 10 ### main 11 my @inputfiles = qw/knap21.dat knap22.dat knap23.dat knap25.dat/; 12 my @sol = (280, 107, 150, 900); 13 my $knap21 = ['102', [ '2', '20', '20', '30', '40', '30', '60', '10' ], 14 [ '15', '100', '90', '60', '40', '15', '10', '1' ]]; 15 my $knap22 = ['50', [ '31', '10', '20', '19', '4', '3', '6' ], 16 [ '70', '20', '39', '37', '7', '5', '10' ]]; 17 my $knap23 = ['190', [ '56', '59', '80', '64', '75', '17' ], 18 [ '50', '50', '64', '46', '50', '5' ]]; 19 my $knap25 = ['104', [ '25', '35', '45', '5', '25', '3', '2', '2' ], 20 [ '350', '400', '450', '20', '70', '8', '5', '5' ]]; 21 22 my $knapsackproblem = [$knap21, $knap22, $knap23, $knap25]; 23 24 my $i = 0; 25 my ($M, $w, $p); 26 my @f; 27 28 # Now 2*@inputfiles = 8 tests 29 for my $file (@inputfiles) { 30 ($M, $w, $p) = ReadKnap((-e "t/$file")?"t/$file":$file); 31 is_deeply($knapsackproblem->[$i], [$M, $w, $p], "ReadKnap $file"); 32 my $N = @$w; 33 @f = Knap01DP($M, $w, $p); 34 is($sol[$i++], $f[$N-1][$M], "Knap01DP $file"); 35 } 36 37 # test to check when weights and profits do not have the same size 38 $M = 100; @$w = 1..5; @$p = 1..10; 39 eval { Knap01DP($M, $w, $p) }; 40 like $@, qr/Profits and Weights don't have the same size/; 41 42 TODO: { # I plan to provide a function to find the vector solution ... 43 local $TODO = "Randomly generated problem"; 44 can_ok('Algorithm::Knap01DP', 'GenKnap'); 45 }
Casiano Rodríguez León