/* ==========================================
* JGraphT : a free Java graph-theory library
* ==========================================
*
* Project Info: http://jgrapht.sourceforge.net/
* Project Creator: Barak Naveh (http://sourceforge.net/users/barak_naveh)
*
* (C) Copyright 2003-2008, by Barak Naveh and Contributors.
*
* This program and the accompanying materials are dual-licensed under
* either
*
* (a) the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation, or (at your option) any
* later version.
*
* or (per the licensee's choosing)
*
* (b) the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation.
*/
/* ------------------------
* SubgraphTest.java
* ------------------------
* (C) Copyright 2003-2008, by Michael Behrisch and Contributors.
*
* Original Author: Michael Behrisch
* Contributor(s): -
*
* $Id$
*
* Changes
* -------
* 21-Sep-2004 : Initial revision (MB);
*
*/
package org.jgrapht.graph;
import java.util.*;
import junit.framework.*;
import org.jgrapht.*;
/**
* Unit test for {@link Subgraph} class.
*
* @author Michael Behrisch
* @since Sep 21, 2004
*/
public class SubgraphTest
extends TestCase
{
//~ Instance fields --------------------------------------------------------
private String v1 = "v1";
private String v2 = "v2";
private String v3 = "v3";
private String v4 = "v4";
//~ Constructors -----------------------------------------------------------
/**
* @see junit.framework.TestCase#TestCase(java.lang.String)
*/
public SubgraphTest(String name)
{
super(name);
}
//~ Methods ----------------------------------------------------------------
/**
* .
*/
public void testInducedSubgraphListener()
{
UndirectedGraph<String, DefaultEdge> g = init(true);
UndirectedSubgraph<String, DefaultEdge> sub =
new UndirectedSubgraph<String, DefaultEdge>(g, null, null);
assertEquals(g.vertexSet(), sub.vertexSet());
assertEquals(g.edgeSet(), sub.edgeSet());
g.addEdge(v3, v4);
assertEquals(g.vertexSet(), sub.vertexSet());
assertEquals(g.edgeSet(), sub.edgeSet());
}
/**
* Tests Subgraph.
*/
public void testSubgraph()
{
UndirectedGraph<String, DefaultEdge> g = init(false);
UndirectedSubgraph<String, DefaultEdge> sub =
new UndirectedSubgraph<String, DefaultEdge>(g, null, null);
assertEquals(g.vertexSet(), sub.vertexSet());
assertEquals(g.edgeSet(), sub.edgeSet());
Set<String> vset = new HashSet<String>(g.vertexSet());
g.removeVertex(v1);
assertEquals(vset, sub.vertexSet()); // losing track
g = init(false);
vset = new HashSet<String>();
vset.add(v1);
sub = new UndirectedSubgraph<String, DefaultEdge>(g, vset, null);
assertEquals(vset, sub.vertexSet());
assertEquals(0, sub.degreeOf(v1));
assertEquals(Collections.EMPTY_SET, sub.edgeSet());
vset.add(v2);
vset.add(v3);
sub =
new UndirectedSubgraph<String, DefaultEdge>(
g,
vset,
new HashSet<DefaultEdge>(g.getAllEdges(v1, v2)));
assertEquals(vset, sub.vertexSet());
assertEquals(1, sub.edgeSet().size());
}
/**
* .
*/
public void testSubgraphListener()
{
UndirectedGraph<String, DefaultEdge> g = init(true);
UndirectedSubgraph<String, DefaultEdge> sub =
new UndirectedSubgraph<String, DefaultEdge>(g, null, null);
assertEquals(g.vertexSet(), sub.vertexSet());
assertEquals(g.edgeSet(), sub.edgeSet());
Set<String> vset = new HashSet<String>(g.vertexSet());
g.removeVertex(v1);
vset.remove(v1);
assertEquals(vset, sub.vertexSet()); // not losing track
assertEquals(g.edgeSet(), sub.edgeSet());
}
private UndirectedGraph<String, DefaultEdge> init(boolean listenable)
{
UndirectedGraph<String, DefaultEdge> g;
if (listenable) {
g = new ListenableUndirectedGraph<String, DefaultEdge>(
DefaultEdge.class);
} else {
g = new SimpleGraph<String, DefaultEdge>(
DefaultEdge.class);
}
g.addVertex(v1);
g.addVertex(v2);
g.addVertex(v3);
g.addVertex(v4);
g.addEdge(v1, v2);
g.addEdge(v2, v3);
g.addEdge(v3, v1);
g.addEdge(v1, v4);
return g;
}
public void testInducedSubgraphUnderlyingEdgeAddition()
{
ListenableGraph<Object, DefaultEdge> baseGraph =
new ListenableUndirectedGraph<Object, DefaultEdge>(
DefaultEdge.class);
baseGraph.addVertex(v1);
baseGraph.addVertex(v2);
Set<Object> initialVertexes = new LinkedHashSet<Object>();
initialVertexes.add(v1);
Subgraph<Object, DefaultEdge, ListenableGraph<Object, DefaultEdge>> subgraph =
new Subgraph<Object,
DefaultEdge, ListenableGraph<Object, DefaultEdge>>(
baseGraph,
initialVertexes,
null);
baseGraph.addEdge(v1, v2);
assertFalse(subgraph.containsEdge(v1, v2));
}
}
// End SubgraphTest.java