use Test::More tests => 8; use lib '../blib/lib','../blib/arch'; use_ok ("Algorithm::Cluster"); require_ok ("Algorithm::Cluster"); ######################### #------------------------------------------------------ # Data for Tests # #---------- # dataset 1 # my $weight1 = [ 1,1,1,1,1 ]; my $data1 = [ [ 1.1, 2.2, 3.3, 4.4, 5.5, ], [ 3.1, 3.2, 1.3, 2.4, 1.5, ], [ 4.1, 2.2, 0.3, 5.4, 0.5, ], [ 12.1, 2.0, 0.0, 5.0, 0.0, ], ]; my $mask1 = [ [ 1, 1, 1, 1, 1, ], [ 1, 1, 1, 1, 1, ], [ 1, 1, 1, 1, 1, ], [ 1, 1, 1, 1, 1, ], ]; my $data1_c1 = [ 0 ]; my $data1_c2 = [ 1,2 ]; my $data1_c3 = [ 3 ]; #---------- # dataset 2 # my $weight2 = [ 1,1 ]; my $data2 = [ [ 1.1, 1.2 ], [ 1.4, 1.3 ], [ 1.1, 1.5 ], [ 2.0, 1.5 ], [ 1.7, 1.9 ], [ 1.7, 1.9 ], [ 5.7, 5.9 ], [ 5.7, 5.9 ], [ 3.1, 3.3 ], [ 5.4, 5.3 ], [ 5.1, 5.5 ], [ 5.0, 5.5 ], [ 5.1, 5.2 ], ]; my $mask2 = [ [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], [ 1, 1 ], ]; my $data2_c1 = [ 0, 1, 2, 3 ]; my $data2_c2 = [ 4, 5, 6, 7 ]; my $data2_c3 = [ 8 ]; #------------------------------------------------------ # Tests # my $distance; #---------- # test dataset 1 # my %params = ( transpose => 0, method => 'a', dist => 'e', data => $data1, mask => $mask1, weight => $weight1, cluster1 => $data1_c1, cluster2 => $data1_c2, ); $distance = Algorithm::Cluster::clusterdistance(%params); is (sprintf ("%7.3f", $distance ), ' 6.650'); $params{cluster1} = $data1_c1; $params{cluster2} = $data1_c3; $distance = Algorithm::Cluster::clusterdistance(%params); is (sprintf ("%7.3f", $distance ), ' 32.508'); $params{cluster1} = $data1_c2; $params{cluster2} = $data1_c3; $distance = Algorithm::Cluster::clusterdistance(%params); is (sprintf ("%7.3f", $distance ), ' 15.118'); #---------- # test dataset 2 # %params = ( transpose => 0, method => 'a', dist => 'e', data => $data2, mask => $mask2, weight => $weight2, cluster1 => $data2_c1, cluster2 => $data2_c2, ); $distance = Algorithm::Cluster::clusterdistance(%params); is (sprintf ("%7.3f", $distance ), ' 5.833'); $params{cluster1} = $data2_c1; $params{cluster2} = $data2_c3; $distance = Algorithm::Cluster::clusterdistance(%params); is (sprintf ("%7.3f", $distance ), ' 3.298'); $params{cluster1} = $data2_c2; $params{cluster2} = $data2_c3; $distance = Algorithm::Cluster::clusterdistance(%params); is (sprintf ("%7.3f", $distance ), ' 0.360');