@Test
public void testEdgesCounting() {
DhnsGraphController controller = new DhnsGraphController();
Dhns dhns = new Dhns(controller, null);
GraphViewImpl view = dhns.getGraphStructure().getMainView();
HierarchicalDirectedGraphImpl graph = new HierarchicalDirectedGraphImpl(dhns, view);
TreeStructure treeStructure = view.getStructure();
GraphFactoryImpl factory = dhns.factory();
AbstractNode node1 = factory.newNode();
AbstractNode node2 = factory.newNode();
AbstractNode node3 = factory.newNode();
graph.addNode(node1);
graph.addNode(node2);
graph.addNode(node3);
AbstractEdge edge1 = factory.newEdge(node1, node2);
AbstractEdge edge2 = factory.newEdge(node2, node1);
AbstractEdge edge3 = factory.newEdge(node3, node3);
graph.addEdge(edge1);
graph.addEdge(edge2);
graph.addEdge(edge3);
assertEquals(3, view.getEdgesCountTotal());
assertEquals(1, view.getMutualEdgesTotal());
assertEquals(3, view.getEdgesCountEnabled());
assertEquals(1, view.getMutualEdgesEnabled());
assertEquals(1, node1.getEnabledInDegree());
assertEquals(1, node1.getEnabledOutDegree());
assertEquals(1, node1.getEnabledMutualDegree());
assertEquals(1, node2.getEnabledInDegree());
assertEquals(1, node2.getEnabledOutDegree());
assertEquals(1, node2.getEnabledMutualDegree());
assertEquals(1, node3.getEnabledInDegree());
assertEquals(1, node3.getEnabledOutDegree());
assertEquals(0, node3.getEnabledMutualDegree());
graph.clearEdges(node3);
assertEquals(2, view.getEdgesCountTotal());
assertEquals(1, view.getMutualEdgesTotal());
assertEquals(0, node3.getEnabledInDegree());
assertEquals(0, node3.getEnabledOutDegree());
assertEquals(0, node3.getEnabledMutualDegree());
graph.clearEdges(node1);
assertEquals(0, view.getEdgesCountTotal());
assertEquals(0, view.getMutualEdgesTotal());
assertEquals(0, node1.getEnabledInDegree());
assertEquals(0, node1.getEnabledOutDegree());
assertEquals(0, node1.getEnabledMutualDegree());
assertEquals(0, node2.getEnabledInDegree());
assertEquals(0, node2.getEnabledOutDegree());
assertEquals(0, node2.getEnabledMutualDegree());
graph.addEdge(edge1);
graph.addEdge(edge2);
graph.addEdge(edge3);
graph.removeEdge(edge3);
assertEquals(2, view.getEdgesCountTotal());
assertEquals(1, view.getMutualEdgesTotal());
assertEquals(2, view.getEdgesCountEnabled());
assertEquals(1, view.getMutualEdgesEnabled());
assertEquals(0, node3.getEnabledInDegree());
assertEquals(0, node3.getEnabledOutDegree());
assertEquals(0, node3.getEnabledMutualDegree());
graph.removeEdge(edge1);
assertEquals(1, view.getEdgesCountTotal());
assertEquals(0, view.getMutualEdgesTotal());
assertEquals(1, view.getEdgesCountEnabled());
assertEquals(0, view.getMutualEdgesEnabled());
assertEquals(1, node1.getEnabledInDegree());
assertEquals(0, node1.getEnabledOutDegree());
assertEquals(0, node1.getEnabledMutualDegree());
assertEquals(0, node2.getEnabledInDegree());
assertEquals(1, node2.getEnabledOutDegree());
assertEquals(0, node2.getEnabledMutualDegree());
graph.addEdge(edge1);
assertEquals(2, view.getEdgesCountTotal());
assertEquals(1, view.getMutualEdgesTotal());
assertEquals(2, view.getEdgesCountEnabled());
assertEquals(1, view.getMutualEdgesEnabled());
assertEquals(1, node1.getEnabledInDegree());