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 )