From 8a5cacc742c1e4fdcbd946035da638b625df8731 Mon Sep 17 00:00:00 2001
From: Ian Longden <ianl@sanger.ac.uk>
Date: Tue, 17 Feb 2004 11:48:45 +0000
Subject: [PATCH] tests for Density features

---
 modules/t/densityFeature.t        |  58 ++++++------
 modules/t/densityFeatureAdaptor.t | 142 ++++++++++++++++--------------
 2 files changed, 110 insertions(+), 90 deletions(-)

diff --git a/modules/t/densityFeature.t b/modules/t/densityFeature.t
index 051fd5990a..35e7e44d56 100644
--- a/modules/t/densityFeature.t
+++ b/modules/t/densityFeature.t
@@ -5,6 +5,7 @@ use strict;
 use warnings;
 
 use Bio::EnsEMBL::DensityFeature;
+use MultiTestDB;
 use Bio::EnsEMBL::Analysis;
 
 use TestUtils qw(debug test_getter_setter);
@@ -16,42 +17,47 @@ our $verbose = 0; #set to 1 to turn on debug printouts
 
 BEGIN { $| = 1;
 	use Test;
-	plan tests => 7;
+	plan tests => 4;
 }
 
 use TestUtils qw( debug );
 
-my $analysis = Bio::EnsEMBL::Analysis->new(-DBID => 1,
-                                           -LOGIC_NAME => 'test');
+my $multi = MultiTestDB->new;
+my $db = $multi->get_DBAdaptor('core');
 
 
-my $start = 10;
-my $end   = 102;
-my $density_value = 123;
-my $density_value_type = 'ratio';
+my $analysis =  new Bio::EnsEMBL::Analysis (-program     => "densityFeature.t",
+					   -database    => "ensembl",
+					   -gff_source  => "densityFeature.t",
+					   -gff_feature => "density",
+					   -logic_name  => "GeneDensityTest");
 
-my $df = Bio::EnsEMBL::DensityFeature->new
-  (-start    => $start,
-   -end      => $end,
-   -analysis => $analysis,
-   -density_value => $density_value,
-   -density_value_type => $density_value_type);
+my $dt = Bio::EnsEMBL::DensityType->new(-analysis   => $analysis,
+					-block_size => 600,
+					-value_type => 'sum');
 
-ok($df->start == $start && $df->analysis == $analysis && $df->end == $end);
-ok($df->strand == 0);
+my $slice_adaptor = $db->get_SliceAdaptor();
+my $slice = $slice_adaptor->fetch_by_region('chromosome', '20', 1, 600);
 
-ok($df->density_value == $density_value);
 
-$df = Bio::EnsEMBL::DensityFeature->new_fast
-  ({'start'    => $start,
-    'end'      => $end,
-    'analysis' => $analysis,
-    'density_value' => $density_value,
-    'density_value_type' => $density_value_type});
+#
+#test the constructor
+#
+my $feat = Bio::EnsEMBL::DensityFeature->new(-seq_region    => $slice,
+				             -start         => 1,
+					     -end           => 300,
+					     -density_type  => $dt,
+					     -density_value => 123);
 
-ok($df->start == $start && $df->analysis == $analysis && $df->end == $end);
-ok($df->strand == 0);
-ok($df->density_value == $density_value);
-ok($df->density_value_type eq $density_value_type);
+ok($feat && ref $feat && $feat->isa('Bio::EnsEMBL::DensityFeature'));
+
+
+#
+# Test the getter setter functions;
+#
+
+ok(&test_getter_setter($feat, 'start', 100));
+ok(&test_getter_setter($feat, 'end', 500));
+ok(&test_getter_setter($feat, 'density_value', 456));
 
 
diff --git a/modules/t/densityFeatureAdaptor.t b/modules/t/densityFeatureAdaptor.t
index 52dac028b4..f589e75ad1 100644
--- a/modules/t/densityFeatureAdaptor.t
+++ b/modules/t/densityFeatureAdaptor.t
@@ -1,16 +1,22 @@
-
+use lib 't';
 use strict;
 use warnings;
 
 use Bio::EnsEMBL::Utils::Exception qw(verbose);
+use Bio::EnsEMBL::DBSQL::DBAdaptor;
+use Bio::EnsEMBL::DBSQL::SliceAdaptor;
+use Bio::EnsEMBL::DBSQL::DensityFeatureAdaptor;
+use Bio::EnsEMBL::DBSQL::DensityTypeAdaptor;
+use Bio::EnsEMBL::Slice;
+use Bio::EnsEMBL::Analysis;
+use Bio::EnsEMBL::DensityType;
+use Bio::EnsEMBL::DensityFeature;
 use TestUtils qw( debug );
 use MultiTestDB;
 
-use lib 't';
-
 BEGIN { $| = 1;
 	use Test;
-	plan tests => 11;
+	plan tests => 18;
 }
 
 
@@ -18,88 +24,96 @@ BEGIN { $| = 1;
 our $verbose = 0;
 verbose('WARNING');
 
-my $multi_db = MultiTestDB->new;
-my $db = $multi_db->get_DBAdaptor('core');
+my $multi = MultiTestDB->new;
+my $db = $multi->get_DBAdaptor('core');
 
 
 my $dfa = $db->get_DensityFeatureAdaptor();
 
 ok(ref($dfa) && $dfa->isa('Bio::EnsEMBL::DBSQL::DensityFeatureAdaptor'));
 
-my $slice_adaptor = $db->get_SliceAdaptor();
-my $slice = $slice_adaptor->fetch_by_region('chromosome', '20', 1, 600);
-
-my $dfs = $dfa->fetch_all_by_Slice($slice, 'SNPDensity');
-ok(@$dfs);
-print_features($dfs);
-$dfs = $dfa->fetch_all_by_Slice($slice, 'RepeatCoverage');
-ok(@$dfs);
-print_features($dfs);
+#
+# Teststore
+#
 
+$multi->save('core', 'analysis');
+$multi->save('core', 'density_type');
+$multi->save('core', 'density_feature');
 
-$dfs = $dfa->fetch_all_by_Slice($slice, 'SNPDensity', 10, 1);
-ok(@$dfs);
-print_features($dfs);
-$dfs = $dfa->fetch_all_by_Slice($slice, 'RepeatCoverage', 10, 1);
-ok(@$dfs);
-print_features($dfs);
 
-$dfs = $dfa->fetch_all_by_Slice($slice, 'SNPDensity', 50, 1);
-ok(@$dfs);
-print_features($dfs);
-$dfs = $dfa->fetch_all_by_Slice($slice, 'RepeatCoverage', 50, 1);
-ok(@$dfs);
-print_features($dfs);
 
-$dfs = $dfa->fetch_all_by_Slice($slice, 'SNPDensity', 2, 1);
-ok(@$dfs);
-print_features($dfs);
-$dfs = $dfa->fetch_all_by_Slice($slice, 'RepeatCoverage', 2, 1);
-ok(@$dfs);
-print_features($dfs);
+my $aa  = $db->get_AnalysisAdaptor();
+my $analysis = new Bio::EnsEMBL::Analysis (-program     => "densityFeatureAdaptor.t",
+					   -database    => "ensembl",
+					   -gff_source  => "densityFeatureAdaptor.t",
+					   -gff_feature => "density",
+					   -logic_name  => "GeneDensityTest");
+ok(!$analysis->is_stored($db));
+$aa->store($analysis);
+ok($analysis->is_stored($db));
 
 
+my $block_size = 6000000;
 
-$slice_adaptor->fetch_by_region('chromosome', '20', 50, 600);
+my $dta = $db->get_DensityTypeAdaptor();
+my $dt = Bio::EnsEMBL::DensityType->new(-analysis   => $analysis,
+					-block_size => $block_size,
+					-value_type => 'sum');
 
-$dfs = $dfa->fetch_all_by_Slice($slice, 'SNPDensity', 50, 1);
-ok(@$dfs);
-print_features($dfs);
-$dfs = $dfa->fetch_all_by_Slice($slice, 'RepeatCoverage', 50, 1);
-ok(@$dfs);
-print_features($dfs);
+ok(!$dt->is_stored($db));
+$dta->store($dt);	
+ok($dt->is_stored($db));
 
 
 
-#
-# helper to draw an ascii representation of the density features
-#
-sub print_features {
-  my $features = shift;
-
-  return if(!@$features);
-
-  my $sum = 0;
-  my $length = 0;
-  my $type = $features->[0]->density_value_type();
-
-  debug("\n");
-  foreach my $f (@$features) {
-    my $draw_width = 1;
-    my $density_value = $f->density_value();
-    my $draw_height = int(0.75 * $density_value);
-    $sum += $density_value;
-    $length += $f->length();
-    for(my $i = 0; $i < $draw_width; $i++) {
-      debug(('*'x$draw_height) . "($density_value)");
+my $slice_adaptor = $db->get_SliceAdaptor();
+my $slice = $slice_adaptor->fetch_by_region('chromosome', '20', 1, ($block_size*10));
+
+my $start = $slice->start();
+my $end = ($start + $block_size)-1;
+my $term = $slice->start+$slice->length;
+  
+my @density_features=();
+while($start < $term){
+  my $sub_slice = $slice_adaptor->fetch_by_region('chromosome','20',$start,$end);
+  my $count =0;
+  foreach my $gene (@{$sub_slice->get_all_Genes()}){
+    if($gene->analysis()->logic_name() ne "pseudogene" and $gene->start >=1 ){
+      $count++
     }
   }
-  my $avg = undef;
-  $avg = $sum/$length if($length < 0);
-  debug("Type=$type, Sum=$sum, Length=$length, Avg/Base=$sum");
+	
+#  print $count."\n";
+
+  push @density_features, Bio::EnsEMBL::DensityFeature->new(-seq_region    => $slice,
+							     -start         => $start,
+							     -end           => $end,
+							     -density_type  => $dt,
+							     -density_value => $count);
+
+  $start = $end+1;
+  $end   = ($start + $block_size)-1;
 }
 
+ok(scalar( @density_features) == 10); 
+
+ok(!$density_features[0]->is_stored($db));
+$dfa->store(@density_features);		
+ok($density_features[0]->is_stored($db));
+
+#
+# get back from database and check
+#
+
+my @stored_features = @{$dfa->fetch_all_by_Slice($slice,'GeneDensityTest', 10)};
+
+for (my $i=0; $i< scalar(@density_features); $i++){
+  ok($density_features[0]->density_value() == $stored_features[0]->density_value());
+}
 
 
 
+$multi->restore('core', 'analysis');
+$multi->restore('core', 'density_type');
+$multi->restore('core', 'density_feature');
 
-- 
GitLab