#!/usr/bin/perl
sub
some_partition;
my
$out
;
for
my
$dim
(2, 3, 5) {
for
my
$n
(1, 5, 30, 100) {
my
@points
=
map
rand
, 1..
$n
*$dim
;
my
$clp
= Algorithm::ClusterPoints->new(
radius
=> 1,
ordered
=> 1,
minimum_size
=> 1,
dimension
=>
$dim
);
$clp
->add_points(
@points
);
for
my
$ir
(1, 10, 100) {
my
$r
= 1/
$ir
;
$clp
->radius(
$r
);
for
my
$min_size
(1, 2, 10) {
for
(1..((
$dim
-1) || 1)) {
$clp
->dimensional_groups(some_partition(
$dim
));
my
@clusters
=
$clp
->clusters_ix;
my
@bfclusters
=
$clp
->brute_force_clusters_ix;
unless
(is_deeply(\
@clusters
, \
@bfclusters
,
"dim: $dim, n: $n, ir: $ir"
)) {
diag
"dimensional groups: "
. Algorithm::ClusterPoints::_hypercylinder_id(
$clp
->dimensional_groups);
unless
(
$out
) {
open
$out
,
'> /tmp/acp.out'
or
next
;
}
print
$out
Data::Dumper->Dump([
$clp
, \
@bfclusters
], [
qw($clp $bfc)
]);
}
}
}
}
}
}
sub
some_partition {
my
$n
=
shift
;
my
@part
;
for
my
$ix
(0..
$n
-1) {
push
@{
$part
[(
@part
+1) *
rand
] ||= []},
$ix
;
}
return
@part
;
}