Paso 4: Ejemplos y casos de prueba
Vamos a ejercitar el módulo, con algunos casos de prueba.
Utilizar el módulo que necesitamos
- agregar la ubicación del módulo en la lista de rutas
- Esto se hace después de la primera línea con-. /
- . / asume que el módulo está en el mismo directorio que el script
- Agregue la línea "uso pares;"
- Nota el nombre del paquete, nombre de archivo del módulo fueron elegidos para que coincida con
El teststubs_pairwise.pl contiene una versión corriente de estos ejemplos:
#!/usr/bin/perl -I ./ <br>use strict; use Data::Dumper; use pairwise; ################## teststub1(); teststub2(); teststub3(); teststub4(); ################## #teststubs listed here
Caso de prueba 1: que es conmigo.
Donuts son negocio serio si desea que su parte justa.
Nada dice que tomamos donuts seriamente como automatizar un llamado a la acción.
En el primer ejemplo construimos un mapa de asociación contacto & y crear una llamada a la acción.
Código
sub teststub1 {<br> print "teststub1\n"; my $kvp1 = pairwise->new(); $kvp1->addkvp('Chad' ,'locust team'); $kvp1->addkvp('Mike' ,'locust team'); $kvp1->addkvp('Dave' ,'locust team'); $kvp1->addkvp('Jon' ,'locust team'); $kvp1->addkvp('Chad' ,'volunteer'); $kvp1->addkvp('Jon' ,'volunteer'); $kvp1->addkvp('Steve' ,'Citizen Forester'); $kvp1->addkvp('Dave' ,'Music Fan'); # print Dumper $kvp1; print $kvp1->map2str() . "\n"; $kvp1->invertkvp(); print $kvp1->map2str() . "\n"; my $locust_team = $kvp1->getvalue('locust team'); print "locust team Assemble! Attn:" . join (' ', . "\n"; return; }
Salida (los donuts no ninguna posibilidad!)
teststub1 Dave,1,Music Fan Dave,1,locust team Jon,1,locust team Jon,1,volunteer Mike,1,locust team Chad,1,locust team Chad,1,volunteer Steve,1,Citizen Forester Music Fan,1,Dave locust team,1,Dave locust team,1,Mike locust team,1,Jon locust team,1,Chad Citizen Forester,1,Steve volunteer,1,Jon volunteer,1,Chad locust team Assemble! Attn:Dave Mike Jon Chad
Caso de prueba 2: 1 papa 2 Papa...
Podemos encontrar hacia fuera si hay más de 1 patata
Código
sub teststub2 {<br> print "teststub2\n"; my $kvp1 = pairwise->new(); $kvp1->addkvp('potato1' ,'red'); $kvp1->addkvp('potato2' ,'blue'); $kvp1->addkvp('potato1' ,'blue'); $kvp1->addkvp('potato1' ,'red'); $kvp1->addkvp('potato2' ,'blue'); $kvp1->addkvp('potato3' ,'red'); $kvp1->addkvp('potato4' ,'red'); $kvp1->addkvp('potato4' ,'red'); #print $kvp1->map2str() . "\n"; $kvp1->invertkvp(); #print $kvp1->map2str() . "\n"; #Mr Potato impersonators... my $redpotatos = $kvp1->getvalue('red'); if (scalar( gt '1') { print "More then 1 red potato here \n"; } else { print "Nothing is here ... move along \n"; } }
Salida (Aviso del tamaño de la matriz proporciona una indicación de la fuerza de enlace)
teststub2 More than 1 red potato here
Caso de prueba 3: La caza para la papa roja
En lógica hay un concepto de . Modus Tollens. MT se reduce «negar el consecuente.»
Dicho de otra forma, si p implica q y no q entonces no p
Usaremos esto como parte de un proceso de eliminación para encontrar la verdadera---uhhh---Papa rojo.
Código
sub teststub3 { print "teststub3\n"; my $kvp1 = pairwise->new(); $kvp1->addkvp('potato1' ,'blue'); $kvp1->addkvp('potato2' ,'red'); $kvp1->addkvp('potato1' ,'red'); $kvp1->addkvp('potato1' ,'blue'); $kvp1->addkvp('potato2' ,'red'); $kvp1->addkvp('potato3' ,'blue'); $kvp1->addkvp('potato4' ,'blue'); $kvp1->addkvp('potato4' ,'blue'); print "starting with : \n"; print $kvp1->map2str() . "\n"; $kvp1->invertkvp(); my $bluelist = $kvp1->getvalue('blue'); foreach my $tot ( $kvp1->removekey($tot); print "removing $tot from consideration\n"; } print "Modus Tolens NOT blue : \n"; print $kvp1->map2str() . "\n"; }
Salida (Aviso a pesar de múltiples vínculos asociativos, las patatas con las asociaciones de azul se removieron en el 1 paso)
More then 1 red potato here <br>teststub3 starting with : potato4,2,blue potato2,2,red potato3,1,blue potato1,2,blue potato1,1,red removing potato4 from consideration removing potato3 from consideration removing potato1 from consideration Modus Tolens NOT blue : potato2,2,red
Caso 4: Histogramas y encontrar las intersecciones
Así que si los valores representan una coordenada para una clave específica, puede ser posible determinar intersecciones
Código:
sub teststub4 {<br> print "teststub4 finding interesection of defined points\n"; my $kvp1 = pairwise->new(); $kvp1->addkvp('wire1' ,'2,1'); $kvp1->addkvp('wire1' ,'2,2'); $kvp1->addkvp('wire1' ,'2,3'); $kvp1->addkvp('wire1' ,'2,4'); $kvp1->addkvp('wire1' ,'2,4'); $kvp1->addkvp('wire2' ,'4,2'); $kvp1->addkvp('wire2' ,'3,2'); $kvp1->addkvp('wire2' ,'2,2'); $kvp1->addkvp('wire2' ,'1,2'); print "starting with :\n"; print $kvp1->map2str() . "\n"; $kvp1->invertkvp(); my $multi = $kvp1->nonuniqkeys(); print "nonuniqkeys returns a hash of keys with multiple associations / overlaps\n" . Dumper $multi; $multi = $kvp1->nonuniqkvp(); print "nonuniqkeys returns a hash of kvp defined multiple times \n" . Dumper $multi; }
Salida: (Observe que el campo contiene comas y predeterminada el separador es una coma. Esto ilustra cómo tokenización puede hacerse más complicado. La función de separador puede utilizarse para cambiar lo que el método map2str se une a los campos de... Alternativamente, uno estratégicamente podría tomar ventaja de la situación. En cualquier caso, constante aplicación repetible permite al desarrollador entender y trabajar con el comportamiento. )
teststub4 finding intersection of defined points<br>starting with : wire1,1,2,3 wire1,1,2,2 wire1,2,2,4 wire1,1,2,1 wire2,1,3,2 wire2,1,1,2 wire2,1,4,2 wire2,1,2,2 nonuniqkeys returns a hash of keys with multiple associations / overlaps $VAR1 = { '2,2' => { 'wire1' => 1, 'wire2' => 1 } }; nonuniqkeys returns a hash of kvp difined multiple times $VAR1 = { '2,4' => { 'wire1' => 2 } };