bbop-graph
Version:
General purpose (mathematical) graph library in JavaScript.
118 lines (100 loc) • 4.13 kB
JavaScript
////
//// The GO makes a nice test case.
////
var assert = require('chai').assert;
var model = new require('..');
///
/// Start unit testing.
///
describe('test using GO data', function(){
var go_nodes = null;
var go_edges = null;
// Pre-run.
before(function() {
// Remember, we are running from the project root, so relative
// to there (?).
go_nodes = require('./go.nodes.json');
go_edges = require('./go.edges.json');
});
it('all good', function(){
this.timeout(30000); // 30s
// Global testing graph.
var g = new model.graph();
// Add all nodes.
//print('all nodes len: ' + bbop.model.go.nodes.length);
for( var n = 0; n < go_nodes.length; n++ ){
var jnode = go_nodes[n];
//print('index: ' + n + ' jnode: ' + jnode['id']);
g.add_node(new model.node(jnode['id']));
}
// Add all edges.
// print('all edges len: ' + bbop.model.go.edges.length);
for( var e = 0; e < go_edges.length; e++ ){
var jedge = go_edges[e];
//print('index: ' + e);
g.add_edge(new model.edge(jedge['subject'],
jedge['object'],
jedge['predicate']));
}
//
assert.equal(3, g.get_root_nodes().length);//, 'right number of GO roots');
assert.equal(false, g.is_leaf_node('GO:0022008'));//, 'neurogenesis ! a leaf');
assert.equal(true, g.is_leaf_node('GO:0048174'));//, 'but this should be');
// Let's get serious about parents.
var p_hash = {};
var parents = g.get_parent_nodes('GO:0022008');
for( var i = 0; i < parents.length; i++ ){
p_hash[ parents[i].id() ] = true;
}
assert.equal(2, parents.length);//, '2 parents');
assert.equal(true, p_hash['GO:0007399']);//, 'has 1 of 2');
assert.equal(true, p_hash['GO:0030154']);//, 'has 2 of 2');
// Let's get serious about children.
var c_hash = {};
var children = g.get_child_nodes('GO:0022008');
for( var j = 0; j < children.length; j++ ){
c_hash[ children[j].id() ] = true;
}
assert.equal(5, g.get_child_nodes('GO:0022008').length);//, '5 kids');
assert.equal(true, c_hash['GO:0048699']);//, 'has 1 of 5');
assert.equal(true, c_hash['GO:0042063']);//, 'has 2 of 5');
assert.equal(true, c_hash['GO:0050768']);//, 'has 3 of 5');
assert.equal(true, c_hash['GO:0050769']);//, 'has 4 of 5');
assert.equal(true, c_hash['GO:0050767']);//, 'has 5 of 5');
// ファイト!
var sub = g.get_ancestor_subgraph('GO:0022008');
// Roots.
assert.equal(1, sub.get_root_nodes().length);//, '1 sub root');
assert.equal(true, sub.is_root_node('GO:0008150'));//, 'sub root');
assert.equal(false, sub.is_root_node('GO:0032502'));//, '! sub root 1');
assert.equal(false, sub.is_root_node('GO:0022008'));//, '! sub root 2');
// Leaves.
assert.equal(1, sub.get_leaf_nodes().length);//, '1 leaf');
assert.equal('GO:0022008', sub.get_leaf_nodes()[0].id());//, 'pig leaf');
assert.equal(true, sub.is_leaf_node('GO:0022008'));//, 'sub leaf');
// Graph structure up.
assert.equal(0, sub.get_parent_nodes('GO:0008150').length);//, '8150 root');
assert.equal(2, sub.get_parent_nodes('GO:0022008').length);//, 'pig 2 up');
assert.equal(1, sub.get_parent_nodes('GO:0030154').length);//, 'cell 1 up');
// Graph structure down.
assert.equal('GO:0048869', sub.get_child_nodes('GO:0009987')[0].id());//, 'to proc');
// General.
assert.equal(11, sub.all_nodes().length);//, '11 nodes');
// ファイト II!
var dec = g.get_descendent_subgraph('GO:0022008');
// Roots.
assert.equal(1, dec.get_root_nodes().length);//, '1 sub root');
assert.equal(false, dec.is_root_node('GO:0008150'));//, 'sub root');
assert.equal(false, dec.is_root_node('GO:0032502'));//, '! sub root 1');
assert.equal(true, dec.is_root_node('GO:0022008'));//, '! sub root 2');
// Leaves.
assert.equal(228, dec.get_leaf_nodes().length);//, '1 leaf');
assert.equal(false, dec.is_leaf_node('GO:0022008'));//, 'sub leaf');
// Graph structure up.
assert.equal(0, dec.get_parent_nodes('GO:0008150').length);
assert.equal(0, dec.get_parent_nodes('GO:0022008').length);
assert.equal(0, dec.get_parent_nodes('GO:0030154').length);
// General.
assert.equal(490, dec.all_nodes().length);//, '490 nodes');
});
});