Entonces procedemos a crear el patch usando el programa diff
pp2@nereida:/tmp$ diff -ur Algorithm-Knap01DP-0.01 Algorithm-Knap01DP-0.01.new/ > newknap.patchLa opción
-u indica que usaremos formato unificado para la representación de
las diferencias. Este es el formato mas usado en el intercambio de código entre desarrolladores.
La opción -r indica que queremos que se analizen toda la jerarquía de ficehros y directorios
y se establezcan las diferencias entre ficheros, si estas existen.
El fichero newknap.patch contiene una descripción de las diferencias
entre la vieja y la nueva versión:
pp2@nereida:/tmp$ cat -n newknap.patch
1 Sólo en Algorithm-Knap01DP-0.01.new/: blib
2 diff -ur Algorithm-Knap01DP-0.01/lib/Algorithm/Knap01DP.pm Algorithm-Knap01DP-0.01.new/lib/Algorithm/Knap01DP.pm
3 --- Algorithm-Knap01DP-0.01/lib/Algorithm/Knap01DP.pm 2005-05-20 07:40:28.000000000 +0100
4 +++ Algorithm-Knap01DP-0.01.new/lib/Algorithm/Knap01DP.pm 2008-05-16 08:04:12.000000000 +0100
5 @@ -4,6 +4,7 @@
6 use warnings;
7 use Carp;
8 use IO::File;
9 +use List::Util qw{first};
10
11 use Exporter;
12 our @ISA = qw(Exporter);
13 @@ -20,6 +21,7 @@
14 my @f;
15
16 croak "Profits and Weights don't have the same size" unless scalar(@w) == scalar(@p);
17 + croak "Invalid weight/profit $_" if defined($_ = first { $_ <= 0 } (@w, @p));
18
19 for my $c (0..$M) {
20 $f[0][$c] = ($w[0] <= $c)? $p[0] : 0;
21 Sólo en Algorithm-Knap01DP-0.01.new/lib/Algorithm: Knap01DP.pm.original
22 Sólo en Algorithm-Knap01DP-0.01.new/lib/Algorithm: newknap.patch
23 Sólo en Algorithm-Knap01DP-0.01.new/: Makefile
24 Sólo en Algorithm-Knap01DP-0.01.new/: pm_to_blib
25 diff -ur Algorithm-Knap01DP-0.01/t/01MartelloAndTothBook.t Algorithm-Knap01DP-0.01.new/t/01MartelloAndTothBook.t
26 --- Algorithm-Knap01DP-0.01/t/01MartelloAndTothBook.t 2005-05-20 07:40:04.000000000 +0100
27 +++ Algorithm-Knap01DP-0.01.new/t/01MartelloAndTothBook.t 2008-05-16 07:55:17.000000000 +0100
28 @@ -3,7 +3,7 @@
29
30 #########################
31 use strict;
32 -use Test::More tests => 11;
33 +use Test::More tests => 12;
34
35 BEGIN { use_ok('Algorithm::Knap01DP', qw/Knap01DP ReadKnap/); }
36
37 @@ -39,6 +39,11 @@
38 eval { Knap01DP($M, $w, $p) };
39 like $@, qr/Profits and Weights don't have the same size/;
40
41 +# test to check when weights and profits have negative value
42 +$M = 100; @$w = @$p = (1,7,-2,3..8);
43 +eval { Knap01DP($M, $w, $p) };
44 +like $@, qr/Invalid weight/;
45 +
46 TODO: { # I plan to provide a function to find the vector solution ...
47 local $TODO = "Randomly generated problem";
48 can_ok('Algorithm::Knap01DP', 'GenKnap');
La cabecera
2 diff -ur Algorithm-Knap01DP-0.01/lib/Algorithm/Knap01DP.pm Algorithm-Knap01DP-0.01.new/lib/Algorithm/Knap01DP.pm 3 --- Algorithm-Knap01DP-0.01/lib/Algorithm/Knap01DP.pm 2005-05-20 07:40:28.000000000 +0100 4 +++ Algorithm-Knap01DP-0.01.new/lib/Algorithm/Knap01DP.pm 2008-05-16 08:04:12.000000000 +0100indica que las diferencias que siguen se refieren a los ficheros
Knap01DP.pm.
Un rango como @@ -4,6 +4,7 @@ establece un trozo que ha cambiado.
Nos indica que las líneas de la 4 a la 4+6 del original han sido cambiadas
por las líneas de la 4 a la 4+7 en el nuevo.
La presencia del prefijo +
indica que se ha insertado una nueva línea:
+use List::Util qw{first};
Las restantes líneas son 'de contexto'.
Otro trozo que ha cambiado es @@ -20,6 +21,7 @@
17 + croak "Invalid weight/profit $_" if defined($_ = first { $_ <= 0 } (@w, @p));
Otro fichero que ha cambiado es 01MartelloAndTothBook.t:
25 diff -ur Algorithm-Knap01DP-0.01/t/01MartelloAndTothBook.t Algorithm-Knap01DP-0.01.new/t/01MartelloAndTothBook.t 26 --- Algorithm-Knap01DP-0.01/t/01MartelloAndTothBook.t 2005-05-20 07:40:04.000000000 +0100 27 +++ Algorithm-Knap01DP-0.01.new/t/01MartelloAndTothBook.t 2008-05-16 07:55:17.000000000 +0100El trozo:
28 @@ -3,7 +3,7 @@
29
30 #########################
31 use strict;
32 -use Test::More tests => 11;
33 +use Test::More tests => 12;
34
35 BEGIN { use_ok('Algorithm::Knap01DP', qw/Knap01DP ReadKnap/); }
indica que se cambió la línea use Test::More tests => 11; por use Test::More tests => 12;
Parece que se ha añadido una prueba. En efecto, vemos que se han insertado 5 nuevas líneas
que comprueban el buen funcionamiento de la función Knap01DP cuando
se le pasan pesos/beneficios negativos:
37 @@ -39,6 +39,11 @@
38 eval { Knap01DP($M, $w, $p) };
39 like $@, qr/Profits and Weights don't have the same size/;
40
41 +# test to check when weights and profits have negative value
42 +$M = 100; @$w = @$p = (1,7,-2,3..8);
43 +eval { Knap01DP($M, $w, $p) };
44 +like $@, qr/Invalid weight/;
45 +
46 TODO: { # I plan to provide a function to find the vector solution ...
47 local $TODO = "Randomly generated problem";
48 can_ok('Algorithm::Knap01DP', 'GenKnap');
Casiano Rodríguez León
