local
$YAML::LoadBlessed
= 1;
BEGIN { plan
'no_plan'
};
use
lib
qw( lib ../lib ../../lib )
;
my
$size
= 16;
my
$primitives
= {
sum
=> [2, -1, 1],
multiply
=> [2, -1, 1],
substract
=> [2, -1, 1],
divide
=> [2, -1, 1],
x
=> [0, -10, 10],
y
=> [0, -10, 10] };
my
%modulesToTest
= (
String
=> [[
'a'
..
'z'
],
$size
],
BitString
=> [
$size
],
Vector
=> [
$size
],
Bit_Vector
=> [{
length
=>
$size
}],
Tree
=> [
$primitives
,
$size
/4 ] );
sub
createAndTest ($$;$) {
my
$module
=
shift
||
die
"No module name"
;
my
$newArgs
=
shift
||
die
"No args"
;
my
$class
=
"Algorithm::Evolutionary::Individual::$module"
;
eval
" require $class"
||
die
"Can't load module $class: $@"
;
my
$nct
= new
$class
@$newArgs
;
print
"Testing $module\n"
;
isa_ok(
$nct
,
$class
);
if
(
$module
ne
'Tree'
) {
is(
$nct
->size(),
$size
,
"Size"
);
}
else
{
is(
$nct
->size(), 1,
"Size"
);
}
for
(
my
$i
= 0;
$i
<
$nct
->size();
$i
++ ) {
is(
defined
(
$nct
->Atom(
$i
)), 1,
"Atom($i)"
);
}
my
$yaml
=
$nct
->as_yaml();
my
$fromyaml
= Load(
$yaml
);
ok(
$yaml
,
$fromyaml
->as_yaml());
return
$nct
;
}
use_ok(
'Algorithm::Evolutionary::Individual::Base'
);
my
@ops
= Algorithm::Evolutionary::Individual::Base->my_operators();
ok(
$ops
[0],
'None'
);
my
%indis
;
for
(
keys
%modulesToTest
) {
my
$indi
= createAndTest(
$_
,
$modulesToTest
{
$_
});
$indis
{
ref
$_
} =
$indi
;
}