mirror of https://gitee.com/bigwinds/arangodb
GraphViewer: The ModularityJoiner properly reacts to insertion / deletion of edges
This commit is contained in:
parent
65ecd3140a
commit
1a91aef78b
|
@ -324,6 +324,27 @@ function ModularityJoiner() {
|
||||||
revM = Math.pow(m, -1);
|
revM = Math.pow(m, -1);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
deleteEdge = function(s, t) {
|
||||||
|
if (matrix[s]) {
|
||||||
|
delete matrix[s][t];
|
||||||
|
delete backwardMatrix[t][s];
|
||||||
|
degrees[s]._out--;
|
||||||
|
degrees[t]._in--;
|
||||||
|
m--;
|
||||||
|
revM = Math.pow(m, -1);
|
||||||
|
if (_.isEmpty(matrix[s])) {
|
||||||
|
delete matrix[s];
|
||||||
|
delete backwardMatrix[t];
|
||||||
|
}
|
||||||
|
if (degrees[s]._in === 0 && degrees[s]._out === 0) {
|
||||||
|
delete degrees[s];
|
||||||
|
}
|
||||||
|
if (degrees[t]._in === 0 && degrees[t]._out === 0) {
|
||||||
|
delete degrees[t];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
makeInitialDegrees = function() {
|
makeInitialDegrees = function() {
|
||||||
a = {};
|
a = {};
|
||||||
_.each(degrees, function (n, id) {
|
_.each(degrees, function (n, id) {
|
||||||
|
@ -596,6 +617,8 @@ function ModularityJoiner() {
|
||||||
|
|
||||||
this.insertEdge = insertEdge;
|
this.insertEdge = insertEdge;
|
||||||
|
|
||||||
|
this.deleteEdge = deleteEdge;
|
||||||
|
|
||||||
this.getAdjacencyMatrix = getAdjacencyMatrix;
|
this.getAdjacencyMatrix = getAdjacencyMatrix;
|
||||||
|
|
||||||
this.getHeap = getHeap;
|
this.getHeap = getHeap;
|
||||||
|
|
|
@ -135,7 +135,7 @@
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
describe('getters', function() {
|
describe('getters', function() {
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
@ -199,6 +199,12 @@
|
||||||
expect(joiner.insertEdge.length).toEqual(2);
|
expect(joiner.insertEdge.length).toEqual(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should offer a function to delete an edge', function() {
|
||||||
|
expect(joiner.deleteEdge).toBeDefined();
|
||||||
|
expect(joiner.deleteEdge).toEqual(jasmine.any(Function));
|
||||||
|
expect(joiner.deleteEdge.length).toEqual(2);
|
||||||
|
});
|
||||||
|
|
||||||
it('should offer a setup function', function() {
|
it('should offer a setup function', function() {
|
||||||
expect(joiner.setup).toBeDefined();
|
expect(joiner.setup).toBeDefined();
|
||||||
expect(joiner.setup).toEqual(jasmine.any(Function));
|
expect(joiner.setup).toEqual(jasmine.any(Function));
|
||||||
|
@ -248,6 +254,75 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should react to insert edge', function() {
|
||||||
|
joiner.insertEdge("a", "b");
|
||||||
|
|
||||||
|
expect(joiner.getAdjacencyMatrix()).toEqual({
|
||||||
|
"0": {
|
||||||
|
"1": 1,
|
||||||
|
"3": 1
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"2": 1
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"1": 1,
|
||||||
|
"3": 1
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"0": 1,
|
||||||
|
"1": 1,
|
||||||
|
"2": 1
|
||||||
|
},
|
||||||
|
"a": {
|
||||||
|
"b": 1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should react to delete edge', function() {
|
||||||
|
joiner.deleteEdge("0", "1");
|
||||||
|
|
||||||
|
expect(joiner.getAdjacencyMatrix()).toEqual({
|
||||||
|
"0": {
|
||||||
|
"3": 1
|
||||||
|
},
|
||||||
|
"1": {
|
||||||
|
"2": 1
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"1": 1,
|
||||||
|
"3": 1
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"0": 1,
|
||||||
|
"1": 1,
|
||||||
|
"2": 1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should remove empty lines on delete', function() {
|
||||||
|
joiner.deleteEdge("1", "2");
|
||||||
|
|
||||||
|
expect(joiner.getAdjacencyMatrix()).toEqual({
|
||||||
|
"0": {
|
||||||
|
"1": 1,
|
||||||
|
"3": 1
|
||||||
|
},
|
||||||
|
"2": {
|
||||||
|
"1": 1,
|
||||||
|
"3": 1
|
||||||
|
},
|
||||||
|
"3": {
|
||||||
|
"0": 1,
|
||||||
|
"1": 1,
|
||||||
|
"2": 1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@ -601,7 +676,7 @@
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
*/
|
|
||||||
describe('checking direct community identification', function() {
|
describe('checking direct community identification', function() {
|
||||||
|
|
||||||
it('should be able to identify an obvious community', function() {
|
it('should be able to identify an obvious community', function() {
|
||||||
|
@ -670,7 +745,6 @@
|
||||||
*/
|
*/
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
describe('checking the zachary karate club', function() {
|
describe('checking the zachary karate club', function() {
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
@ -882,8 +956,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
*/
|
|
||||||
/*
|
|
||||||
describe('checking consistency after join', function() {
|
describe('checking consistency after join', function() {
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
@ -1041,8 +1114,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
*/
|
|
||||||
/*
|
|
||||||
describe('checking large networks', function() {
|
describe('checking large networks', function() {
|
||||||
|
|
||||||
it('should be able to handle 1000 nodes', function() {
|
it('should be able to handle 1000 nodes', function() {
|
||||||
|
@ -1601,7 +1673,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
it('should be able to handle 10000 nodes', function() {
|
it('should be able to handle 10000 nodes', function() {
|
||||||
|
|
Loading…
Reference in New Issue