1 # This is -*-Perl-*- code#
2 # Bioperl Test Harness Script for Modules
8 test_begin(-tests => 171,
9 -requires_module => 'Graph',
10 -requires_module => 'XML::Twig' );
12 use_ok('Bio::Network::ProteinNet');
13 use_ok('Bio::Network::IO');
16 my $verbose = test_debug();
21 my $io = Bio::Network::IO->new(
23 -file => test_input_file("tab1part.tab"),
26 ok my $g1 = $io->next_network();
27 ok my $node = $g1->get_nodes_by_id('PIR:A64696');
28 my @proteins = $node->proteins;
29 ok $proteins[0]->accession_number eq 'PIR:A64696';
30 ok $node = $g1->nodes_by_id('PIR:A64696');
31 @proteins = $node->proteins;
32 ok $proteins[0]->accession_number eq 'PIR:A64696';
33 my %ids = $g1->get_ids_by_node($node);
35 my @ids = qw(A64696 2314583 3053N);
36 for my $k (keys %ids) {
37 ok ( $ids{$k} eq $ids[$x++] );
43 ok $g1->vertices == 76;
44 # now remove 2 nodes: this removes 4 edges
45 my $g2 = $g1->delete_vertices($g1->get_nodes_by_id('DIP:3082N'),
46 $g1->get_nodes_by_id('DIP:3083N') );
48 ok $g2->vertices == 74;
50 # test for identifiers and Annotations
52 ok $node = $g1->get_nodes_by_id('PIR:A64696');
53 @proteins = $node->proteins;
54 ok $proteins[0]->accession_number eq 'PIR:A64696';
55 my $ac = $proteins[0]->annotation;
56 @ids = $ac->get_Annotations('dblink');
57 ok $ids[0]->primary_id eq "A64696";
58 ok $ids[1]->primary_id eq "3053N";
59 ok $ids[2]->primary_id eq "2314583";
61 # test some basic graph properties from Graph
63 ok sprintf("%.3f",$g2->density), "0.028";
64 ok $g2->is_connected eq "";
65 ok $g2->is_forest eq "";
66 ok $g2->is_tree eq "";
67 ok $g2->is_empty eq "";
68 ok $g2->is_cyclic == 1;
69 ok $g2->expect_undirected;
71 # get connected subgraphs
73 my @components = $g2->connected_components();
74 ok scalar @components == 7;
76 # before deleting 3048N, 3047N has 2 neighbours
78 my @n1 = $g2->neighbors($g2->get_nodes_by_id('DIP:3047N'));
81 ok $g2->delete_vertices($g2->get_nodes_by_id('DIP:3048N'));
83 # after deleting there is only 1 interactor
85 @n1 = $g2->neighbors($g2->get_nodes_by_id('DIP:3047N'));
87 my $ncount = $g2->neighbor_count($g2->get_nodes_by_id('DIP:3047N'));
90 # check that no undefs are left after node removal
92 my @edges = $g2->edges;
93 for my $edgeref (@edges) {
94 my %interactions = $g2->get_interactions(@$edgeref);
95 for my $interaction (values %interactions) {
96 ok $interaction->primary_id;
100 # get an Interaction by its id
102 ok my $interx = $g2->get_interaction_by_id('DIP:4368E');
103 ok $interx->primary_id eq 'DIP:4368E';
110 my @n = $g2->neighbors($g2->get_nodes_by_id('DIP:3075N'));
113 ok $g2->remove_nodes($g2->get_nodes_by_id('DIP:3075N'));
114 ok scalar $g2->edges == 62;
116 # test connected_components
118 @components = $g2->connected_components();
119 ok scalar @components == 17;
121 # test isolated_vertices
123 my @ucnodes = $g2->isolated_vertices;
124 ok scalar @ucnodes == 10;
126 # test clustering_coefficent
128 ok sprintf("%.3f", $g2->clustering_coefficient($g2->get_nodes_by_id('PIR:B64525'))) == 0.022;
130 # test get_nodes_by_id() method
132 ok defined $g2->get_nodes_by_id('PIR:B64525');
133 is $g2->get_nodes_by_id('B64'), undef;
137 $io = Bio::Network::IO->new
139 -file => test_input_file("bovin_small_intact.xml"));
140 my $g = $io->next_network();
144 @ids = qw(EBI-354674 EBI-444335 EBI-349968 EBI-354657
145 EBI-302230 EBI-640775 EBI-640793 EBI-79764);
146 my @nodes = $g->get_nodes_by_id(@ids);
147 ok scalar @nodes == 8;
148 my $sg = $g->subgraph(@nodes);
152 @nodes = $g->get_nodes_by_id($ids[0]);
153 $sg = $g->subgraph(@nodes);
157 # test internal method _all_pairs()
159 my @pairs = $g->_all_pairs(@ids);
161 @pairs = $g->_all_pairs("A","B");
162 ok scalar @pairs == 1;
164 # test the add_interactions_from() method
166 $io = Bio::Network::IO->new
167 (-format => 'dip_tab',
168 -file => test_input_file("tab4part.tab"));
169 $g1 = $io->next_network();
171 my $io2 = Bio::Network::IO->new
172 (-format => 'dip_tab',
173 -file => test_input_file("tab3part.tab"));
174 $g2 = $io2->next_network();
181 ok my $node1 = $g1->get_nodes_by_id("UniProt:Q09472");
182 ok my $node2 = $g1->get_nodes_by_id("UniProt:P04637");
183 my %interx = $g1->get_interactions($node1,$node2);
184 ok scalar keys %interx == 1;
186 ok $node1 = $g1->get_nodes_by_id("UniProt:P10243");
187 ok $node2 = $g1->get_nodes_by_id("GenBank:2134877");
188 %interx = $g1->get_interactions($node1,$node2);
189 ok scalar keys %interx == 1;
191 is my $ix = $g1->get_interaction_by_id("DIP:16E"), undef;
192 is $ix = $g1->get_interaction_by_id("DIP:19E"), undef;
194 $g1->add_interactions_from($g2);
196 # $g1 should have 2 more Interactions with new interaction ids and
197 # the same number of nodes and edges, $g2 should be unaffected
204 ok $node1 = $g1->get_nodes_by_id("UniProt:Q09472");
205 ok $node2 = $g1->get_nodes_by_id("UniProt:P04637");
206 %interx = $g1->get_interactions($node1,$node2);
207 ok scalar keys %interx == 2;
209 ok $node1 = $g1->get_nodes_by_id("UniProt:P10243");
210 ok $node2 = $g1->get_nodes_by_id("GenBank:2134877");
211 %interx = $g1->get_interactions($node1,$node2);
212 ok scalar keys %interx == 2;
214 ok $ix = $g1->get_interaction_by_id("DIP:16E");
216 ok $ix = $g1->get_interaction_by_id("DIP:19E");
217 ok $ix->weight == 12;
219 # test that removing a node removes its edges correctly
221 ok $io = Bio::Network::IO->new
223 -file => test_input_file("sv40_small.xml"));
224 ok $g1 = $io->next_network();
225 ok $g1->edge_count == 3;
226 ok $g1->node_count == 5;
227 ok $g1->is_connected == 0;
228 @components = $g1->connected_components;
229 ok scalar @components == 2;
231 my $n = $g1->get_nodes_by_id("EBI-617321");
232 my @ns = $g1->edges_at($n);
234 $g1->remove_nodes($n);
235 ok $g1->edge_count == 1;
236 ok $g1->node_count == 4;
237 @components = $g1->connected_components;
238 ok scalar @components == 3;
239 @ns = $g1->isolated_vertices;
241 @ns = $g1->unconnected_nodes;
243 @ns = $g1->self_loop_vertices;
248 @components = $g1->components;
249 ok scalar @components == 3;
253 $n = $g1->get_random_node;
254 isa_ok( $n, 'Bio::Network::Node');
255 my $e = $g1->get_random_edge;
256 isa_ok( $e->[0], 'Bio::Network::Node');