AI-Gene-Sequence
view release on metacpan or search on metacpan
ok($gene->d eq 'abcdefghij');
# hammer randomness
$rt = 0;
for (1..$hammer) {
$gene = $main->clone;
eval '$gene->mutate_insert';
$rt = 1 if $@;
}
ok($rt,0);
}
{ print "# mutate_overwrite\n";
my $gene = $main->clone;
my $rt = $gene->mutate_overwrite(1,0,1); # first to second
ok($rt,1);
ok($gene->d, 'aacdefghij');
$gene = $main->clone;
$rt = $gene->mutate_overwrite(1,0,4,3); # has length
ok($rt,1);
ok($gene->d, 'abcdabchij');
$gene = $main->clone;
$rt = $gene->mutate_overwrite(1,3,4,3); # overlap
ok($rt,1);
ok($gene->d, 'abcddefhij');
$gene = $main->clone;
$rt = $gene->mutate_overwrite(1,0,10,3); # dump lies at end of gene
ok($rt,1);
ok($gene->d, 'abcdefghijabc');
$gene = $main->clone;
$rt = $gene->mutate_overwrite(1,0,11); # dump lies beyond end of gene
ok($rt,0);
ok($gene->d, 'abcdefghij');
$gene = $main->clone;
$rt = $gene->mutate_overwrite(1,11,4); # area to copy lies outside gene
ok($rt,0);
ok($gene->d, 'abcdefghij');
# hammer randomness
$rt = 0;
for (1..$hammer) {
$gene = $main->clone;
eval '$gene->mutate_overwrite(1,undef,undef,0)';
$rt = 1 if $@;
}
ok($rt,0);
}
{ print "# mutate_reverse\n";
my $gene = $main->clone;
my $rt = $gene->mutate_reverse(1,0,2);
ok($rt,1);
ok($gene->d, 'bacdefghij');
$gene = $main->clone;
$rt = $gene->mutate_reverse(1,0,10); # whole gene
ok($rt,1);
ok($gene->d, 'jihgfedcba');
$gene = $main->clone;
$rt = $gene->mutate_reverse(1,8,4); # extends beyond gene
ok($rt,0);
ok($gene->d, 'abcdefghij');
$gene = $main->clone;
$rt = $gene->mutate_reverse(1,10,1); # starts outside gene
ok($rt,0);
ok($gene->d, 'abcdefghij');
# hammer randomness
$rt = 0;
for (1..$hammer) {
$gene = $main->clone;
eval '$gene->mutate_reverse(1,undef,0)';
$rt = 1 if $@;
}
ok($rt,0);
}
{ print "# mutate_duplicate\n";
my $gene = $main->clone;
my $rt = $gene->mutate_duplicate(1,0,0);
ok($rt,1);
ok($gene->d, 'aabcdefghij');
$gene = $main->clone;
$rt = $gene->mutate_duplicate(1,9,0); # from end of gene to front
ok($rt,1);
ok($gene->d, 'jabcdefghij');
$gene = $main->clone;
$rt = $gene->mutate_duplicate(1,10,0); # from outside of gene
ok($rt,0);
ok($gene->d, 'abcdefghij');
$gene = $main->clone;
$rt = $gene->mutate_duplicate(1,0,11); # to posn beyond end of gene
ok($rt,0);
ok($gene->d, 'abcdefghij');
$gene = $main->clone;
$rt = $gene->mutate_duplicate(1,0,10); # to posn at very end of gene
ok($rt,1);
ok($gene->d, 'abcdefghija');
$gene = $main->clone;
$rt = $gene->mutate_duplicate(1,0,10,10); # double the gene
ok($rt,1);
ok($gene->d, 'abcdefghijabcdefghij');
# hammer randomness
$rt = 0;
for (1..$hammer) {
$gene = $main->clone;
eval '$gene->mutate_duplicate(1,undef,undef,0)';
}
ok($rt,0);
}
{ print "# mutate_switch\n";
my $gene = $main->clone;
my $rt = $gene->mutate_switch(1,0,9); # first and last
ok($rt,1);
ok($gene->d, 'jbcdefghia');
$gene = $main->clone;
$rt = $gene->mutate_switch(1,0,8,2,2); # 1st 2 and last 2
ok($rt,1);
ok($gene->d, 'ijcdefghab');
$gene = $main->clone;
$rt = $gene->mutate_switch(1,0,5,2,4); # different lengths
ok($rt,1);
ok($gene->d, 'fghicdeabj');
$gene = $main->clone;
( run in 1.180 second using v1.01-cache-2.11-cpan-d8267643d1d )