### teststubs_pairwise.pl
### hydrotron (Jon G.) 2015-04-14
### Script that exercises methods in pairwise.pm

#!/usr/bin/perl -I ./
use strict;
use Data::Dumper; 
use pairwise;
##################
#switch out #=1-4
teststub1();
teststub2();
teststub3();
teststub4();
##################


sub teststub1 {
     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";

     #Those donuts don't stand a chance!
     my $locust_team = $kvp1->getvalue('locust team');
     print "locust team Assemble! Attn:" . join (' ', @$locust_team) . "\n";
return;
}

sub teststub2 {
     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(@$redpotatos) gt '1') {
	print "More then 1 red potato here \n";
     } else {
	print "Nothing is here ... move along \n";
     }
}

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 (@$bluelist){
	$kvp1->removekey($tot);
        print "removing $tot from consideration\n";
     }
     print "Modus Tolens NOT blue : \n";
     print $kvp1->map2str() . "\n";  
}


sub teststub4 {
     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 difined  multiple times \n" . Dumper $multi;
   
}

