1 25 41 package org.jgrapht.alg; 42 43 import java.util.*; 44 45 import junit.framework.*; 46 47 import org.jgrapht.*; 48 import org.jgrapht.graph.*; 49 50 51 57 public class VertexCoversTest 58 extends TestCase 59 { 60 61 63 private static final int TEST_GRAPH_SIZE = 200; 64 private static final int TEST_REPEATS = 20; 65 66 68 71 public void testFind2ApproximationCover() 72 { 73 for (int i = 0; i < TEST_REPEATS; i++) { 74 Graph<Integer , DefaultEdge> g = createRandomGraph(); 75 assertTrue( 76 isCover(VertexCovers.find2ApproximationCover(g), g)); 77 } 78 } 79 80 83 public void testFindGreedyCover() 84 { 85 for (int i = 0; i < TEST_REPEATS; i++) { 86 Graph<Integer , DefaultEdge> g = createRandomGraph(); 87 Set<Integer > c = 88 VertexCovers.findGreedyCover( 89 Graphs.undirectedGraph(g)); 90 assertTrue(isCover(c, g)); 91 } 92 } 93 94 105 private boolean isCover( 106 Set<Integer > vertexSet, 107 Graph<Integer , DefaultEdge> g) 108 { 109 Set<DefaultEdge> uncoveredEdges = new HashSet<DefaultEdge>(g.edgeSet()); 110 111 for (Iterator<Integer > i = vertexSet.iterator(); i.hasNext();) { 112 uncoveredEdges.removeAll(g.edgesOf(i.next())); 113 } 114 115 return uncoveredEdges.size() == 0; 116 } 117 118 123 private Graph<Integer , DefaultEdge> createRandomGraph() 124 { 125 Pseudograph<Integer , DefaultEdge> g = 128 new Pseudograph<Integer , DefaultEdge>(DefaultEdge.class); 129 130 for (int i = 0; i < TEST_GRAPH_SIZE; i++) { 131 g.addVertex(new Integer (i)); 132 } 133 134 List<Integer > vertices = new ArrayList<Integer >(g.vertexSet()); 135 136 for (int source = 0; source < TEST_GRAPH_SIZE; source++) { 138 int numEdgesToCreate = 139 ((int) Math.random() * TEST_GRAPH_SIZE / 2) + 1; 140 141 for (int j = 0; j < numEdgesToCreate; j++) { 142 int target = (int) Math.floor(Math.random() * TEST_GRAPH_SIZE); 144 g.addEdge(vertices.get(source), vertices.get(target)); 145 } 146 } 147 148 return g; 149 } 150 } 151 | Popular Tags |