The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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');