1 # -*-Perl-*- Test Harness script for Bioperl
12 -requires_module => 'DB_File'
15 use_ok('Bio::SeqFeature::Collection');
16 use_ok('Bio::Location::Simple');
17 use_ok('Bio::Tools::GFF');
21 my $verbose = test_debug();
23 #First of all we need to create an flat db
24 my $simple = Bio::SeqIO->new(
26 -file => test_input_file('AB077698.gb')
30 my $seq = $simple->next_seq();
31 @features = $seq->top_SeqFeatures();
32 is(scalar @features, 11);
34 ok my $col = Bio::SeqFeature::Collection->new(-verbose => $verbose);
36 is($col->add_features( \@features), 11);
37 my @feat = $col->features_in_range(
39 Bio::Location::Simple->new(
50 print "location: ", $f->location->to_FTstring(), "\n";
54 is(scalar $col->features_in_range(
56 Bio::Location::Simple->new(
62 -strandmatch => 'ignore',
66 @feat = $col->features_in_range(
70 -strandmatch => 'strong',
75 for my $f ( sort { $a->start <=> $b->start} @feat ) {
76 print $f->primary_tag, " ", $f->location->to_FTstring(), "\n";
80 is($feat[0]->primary_tag, 'CDS');
81 ok($feat[0]->has_tag('gene'));
84 # specify input via -fh or -file
85 my $gffio = Bio::Tools::GFF->new(
86 -file => test_input_file('myco_sites.gff'),
90 # loop over the input stream
91 while(my $feature = $gffio->next_feature()) {
92 # do something with feature
93 push @features, $feature;
97 is(scalar @features, 412);
98 $col = Bio::SeqFeature::Collection->new(
105 is($col->add_features( \@features), 412);
107 my $r = Bio::Location::Simple->new(
113 @feat = $col->features_in_range(
115 -strandmatch => 'ignore',
119 is(scalar @feat, 56);
120 is($col->feature_count, 412);
121 my $count = $col->feature_count;
122 $col->remove_features( [$features[58], $features[60]]);
124 is( $col->feature_count, 410);
125 @feat = $col->features_in_range(
127 -strandmatch => 'ignore',
130 is( scalar @feat, 54);
131 # add the removed features back in in order to get the collection back to size
133 $col->add_features([$features[58], $features[60]]);
135 # let's randomize so we aren't removing and adding in the same order
136 # and hopefully randomly deal with a bin's expiration
137 fy_shuffle(\@features);
139 for my $f ( @features ) {
140 $count--, next unless defined $f;
141 $col->remove_features([$f]);
142 # ok( $col->feature_count, --$count);
144 is($col->feature_count, 0);
146 # explicitly destroy old instances above (should clear out any open filehandles
147 # w/o -keep flag set)
150 my $filename = test_output_file();
151 my $newcollection = Bio::SeqFeature::Collection->new(
152 -verbose => $verbose,
156 $newcollection->add_features(\@feat);
157 is($newcollection->feature_count, 54);
158 undef $newcollection;
160 $newcollection = Bio::SeqFeature::Collection->new(
161 -verbose => $verbose,
164 is($newcollection->feature_count, 54);
165 undef $newcollection;
167 # without -keep => 1, $filename was deleted as expected.
168 # to stop Bio::Root::Test complaining that the temp file was already deleted,
169 # we'll just create it again
170 open my $TMP, '>', $filename or die "Could not write file '$filename': $!\n";
175 my @fts = sort { $a->start <=> $b->start}
176 grep { $r->overlaps($_,'ignore') } @features;
180 print $f->primary_tag, " ", $f->location->to_FTstring(), "\n";
185 my %G = map { ($_,1) } @feat;
189 print "missing ", $A->primary_tag, " ", $A->location->to_FTstring(), "\n";
194 print "Number of features correctly retrieved $c\n";
195 for my $f ( sort { $a->start <=> $b->start} @feat ) {
196 print $f->primary_tag, " ", $f->location->to_FTstring(), "\n";
203 for( $i = @$array; $i--; ) {
204 my $j = int rand($i+1);
206 @$array[$i,$j] = @$array[$j,$i];