1 package test.prefuse.data; 2 3 import java.util.Iterator ; 4 5 import junit.framework.TestCase; 6 import prefuse.data.Edge; 7 import prefuse.data.Graph; 8 import prefuse.data.Node; 9 import prefuse.data.Table; 10 import prefuse.util.GraphLib; 11 import test.prefuse.TestConfig; 12 13 public class GraphTest extends TestCase implements GraphTestData { 14 15 public static Graph getTestCaseGraph() { 16 Table nodes = new Table(NNODES, NNODECOLS); 17 for ( int c=0; c<NNODECOLS; ++c ) { 18 nodes.addColumn(NHEADERS[c], NTYPES[c]); 19 for ( int r=0; r<NNODES; ++r ) { 20 nodes.set(r, NHEADERS[c], NODES[c][r]); 21 } 22 } 23 24 Table edges = new Table(NEDGES, NEDGECOLS); 25 for ( int c=0; c<NEDGECOLS; ++c ) { 26 edges.addColumn(EHEADERS[c], ETYPES[c]); 27 for ( int r=0; r<NEDGES; ++r ) { 28 edges.set(r, EHEADERS[c], EDGES[c][r]); 29 } 30 } 31 32 return new Graph(nodes, edges, false, 33 NHEADERS[0], EHEADERS[0], EHEADERS[1]); 34 } 35 36 private Graph graph; 37 38 protected void setUp() throws Exception { 39 super.setUp(); 40 graph = getTestCaseGraph(); 41 } 42 43 46 protected void tearDown() throws Exception { 47 super.tearDown(); 48 graph = null; 49 } 50 51 public void testGraph() { 52 boolean verbose = TestConfig.verbose(); 53 54 Table nodes = graph.getNodeTable(); 55 Table edges = graph.getEdgeTable(); 56 57 assertEquals(NNODES, graph.getNodeCount()); 59 assertEquals(NEDGES, graph.getEdgeCount()); 60 assertEquals(NHEADERS[0], graph.getNodeKeyField()); 61 assertEquals(EHEADERS[0], graph.getEdgeSourceField()); 62 assertEquals(EHEADERS[1], graph.getEdgeTargetField()); 63 64 Iterator niter = graph.nodes(); 66 while ( niter.hasNext() ) { 67 Node node = (Node)niter.next(); 68 int nrow = node.getRow(); 69 70 if ( verbose ) System.out.print(nrow+"\t"); 71 72 for ( int i=0; i<NNODECOLS; ++i ) { 74 assertEquals(NODES[i][nrow], node.get(NHEADERS[i])); 75 assertEquals(NODES[i][nrow], nodes.get(nrow, NHEADERS[i])); 76 if ( verbose ) System.out.print(NHEADERS[i]+":"+NODES[i][nrow]+"\t"); 77 } 78 79 if ( verbose ) { 80 System.out.print("in:"+node.getInDegree()); 81 System.out.print("\t"); 82 System.out.print("out:"+node.getOutDegree()); 83 System.out.println(); 84 } 85 86 assertEquals(node.getInDegree(), INDEGREE[nrow]); 88 assertEquals(graph.getInDegree(nrow), INDEGREE[nrow]); 89 assertEquals(node.getOutDegree(), OUTDEGREE[nrow]); 90 assertEquals(graph.getOutDegree(nrow), OUTDEGREE[nrow]); 91 92 Iterator eiter = node.inEdges(); 94 while ( eiter.hasNext() ) { 95 Edge edge = (Edge)eiter.next(); 96 int erow = edge.getRow(); 97 assertEquals(nrow, edge.getTargetNode().getRow()); 98 assertEquals(nrow, graph.getTargetNode(erow)); 99 } 100 eiter = node.outEdges(); 101 while ( eiter.hasNext() ) { 102 Edge edge = (Edge)eiter.next(); 103 int erow = edge.getRow(); 104 assertEquals(nrow, edge.getSourceNode().getRow()); 105 assertEquals(nrow, graph.getSourceNode(erow)); 106 } 107 } 108 109 Iterator eiter = graph.edges(); 111 while ( eiter.hasNext() ) { 112 Edge edge = (Edge)eiter.next(); 113 int erow = edge.getRow(); 114 115 for ( int i=0; i<NEDGECOLS; ++i ) { 117 assertEquals(EDGES[i][erow], edge.get(EHEADERS[i])); 118 assertEquals(EDGES[i][erow], edges.get(erow, EHEADERS[i])); 119 } 120 121 Node s = edge.getSourceNode(); 123 int srow = s.getRow(); 124 assertEquals(srow, graph.getSourceNode(erow)); 125 int sk = nodes.getInt(srow, NHEADERS[0]); 126 assertEquals(sk, edges.getInt(erow, EHEADERS[0])); 127 128 Node t = edge.getTargetNode(); 129 int trow = t.getRow(); 130 assertEquals(trow, graph.getTargetNode(erow)); 131 int tk = nodes.getInt(trow, NHEADERS[0]); 132 assertEquals(tk, edges.getInt(erow, EHEADERS[1])); 133 134 assertEquals(srow, edge.getAdjacentNode(t).getRow()); 135 assertEquals(trow, edge.getAdjacentNode(s).getRow()); 136 assertEquals(srow, graph.getAdjacentNode(erow, trow)); 137 assertEquals(trow, graph.getAdjacentNode(erow, srow)); 138 } 139 } 140 141 public void testRemoveNode() { 142 int cliqueSize = 5; 143 Graph g = GraphLib.getClique(cliqueSize); 144 Edge[] edges = new Edge[4]; 145 146 Node rem = (Node)g.nodes().next(); 147 Iterator it = rem.edges(); 148 for ( int i=0; it.hasNext(); ++i ) { 149 edges[i] = (Edge)it.next(); 150 } 151 152 assertEquals(true, g.removeNode(rem)); 153 assertEquals(false, rem.isValid()); 154 155 Iterator nodes = g.nodes(); 156 while ( nodes.hasNext() ) { 157 assertEquals(cliqueSize-2, ((Node)nodes.next()).getDegree()); 158 } 159 for ( int i=0; i<edges.length; ++i ) { 160 assertEquals(false, edges[i].isValid()); 161 } 162 } 163 } 164 | Popular Tags |