Étape 4: Exemples et cas de Test
Nous allons exercer le module, avec quelques cas de test.
Pour utiliser le module, qu'il faut
- Ajoutez l’emplacement du module à la liste des chemins
- Cela se fait après à la première ligne avec - I. /
- . / suppose que le module est dans le même répertoire que le script
- Ajoutez la ligne « utilisation par paire; »
- Remarque le nom du package, le nom de fichier du module ont été choisis pour correspondre
La teststubs_pairwise.pl contient une version en cours d’exécution de ces exemples :
#!/usr/bin/perl -I ./ <br>use strict; use Data::Dumper; use pairwise; ################## teststub1(); teststub2(); teststub3(); teststub4(); ################## #teststubs listed here
Scénario de test 1: qui est avec moi.
Beignes sont une affaire sérieuse, si vous voulez que votre juste part.
Rien ne dit que nous prenons des beignes au sérieux comme l’automatisation d’un appel à l’action.
Dans le premier exemple, nous allons construire une carte de contact association & et créer un appel à l’action.
Code
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; }
Sortie (ces beignets ne sont pas une chance!)
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
Patate de scénario de test de 2: 1 pomme de terre 2...
Pouvons nous savoir si il n’y a plus de 1 pomme de terre
Code
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"; } }
Sortie (Avis la taille du tableau donne une indication de la force du lien)
teststub2 More than 1 red potato here
Scénario de test 3: La chasse pour la pomme de terre rouge
En logique, il y a un concept de . Modus Tollens. MT se résume « niant le qui en découle. »
Dit autrement, si vous n’avez pas q alors vous n’avez pas besoin de p et que p implique q
Nous allons utiliser cela dans le cadre d’un processus d’élimination pour trouver le vrai---euh---pommes de terre rouges.
Code
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"; }
Sortie (Remarquez malgré plusieurs liens associatifs, les pommes de terre avec les associations de bleues ont été retirées à le 1 étape)
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
Scénario de test 4: Histogrammes & recherche d’intersections
Donc si les valeurs représentent une coordonnée d’une clé spécifique, il peut être possible de déterminer les intersections
Code :
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; }
Sortie : (Notez que le champ contient des virgules, et par défaut, le séparateur est une virgule. Cet exemple illustre comment jetons peut être rendue plus compliquée. La fonction de séparateur peut être utilisée pour changer ce que la méthode map2str rejoint les champs sur... Sinon, on pourrait stratégiquement prendre avantage de la situation. Dans les deux cas, mise en œuvre reproductible cohérente permet au développeur de comprendre et de travailler avec le comportement. )
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 } };