Algorithm-KernelKMeans
view release on metacpan or search on metacpan
t/02_pp_impl.t view on Meta::CPAN
use strict;
use warnings;
use ExtUtils::testlib;
use FindBin;
use List::MoreUtils qw/zip/;
use Test::More;
use Test::Exception;
use lib $FindBin::Bin; # for Algorithm::NaiveKmeans
use Algorithm::KernelKMeans::PP;
use Algorithm::KernelKMeans::Util qw/generate_polynominal_kernel/;
use Algorithm::NaiveKMeans;
diag 'This test may take some minutes';
open my $vectors , '<', "$FindBin::Bin/vectors.txt" or die $!;
my @vertices = map {
my @vals = split /\s+/;
my @keys = 0 .. $#vals;
+{ zip @keys, @vals };
} <$vectors>;
open my $kmat, '<', "$FindBin::Bin/kernels.txt" or die $!;
my @kernel_matrix = map { [ split /\s+/ ] } <$kmat>;
dies_ok {
Algorithm::KernelKMeans::PP->new;
} '"vertices" is required';
lives_ok {
Algorithm::KernelKMeans::PP->new(vertices => \@vertices);
} 'Default kernel is available';
lives_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
weights => [0 .. $#vertices]
);
} '"vertices" and "weights" must be same size';
dies_ok {
Algorithm::KernelKMeans::XS->new(vertices => []);
} '"vertices" must not be empty';
dies_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
weights => [1, 1, 1]
);
} '"vertices" and "weights" must be same size';
lives_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel => generate_polynominal_kernel(1, 2)
);
} 'Kernel function can be set';
lives_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel_matrix => \@kernel_matrix
);
} 'Kernel matrix can be speficied manually';
dies_ok {
Algorithm::KernelKMeans::PP->new(
vertices => \@vertices,
kernel_matrix => [ @kernel_matrix[0 .. 31] ]
( run in 0.486 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )