94 lines
3.2 KiB
Java
94 lines
3.2 KiB
Java
/******************************************************************************
|
|
* Copyright (c) 2002 - 2014 IBM Corporation.
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
* which accompanies this distribution, and is available at
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
*
|
|
* Contributors:
|
|
* IBM Corporation - initial API and implementation
|
|
*****************************************************************************/
|
|
|
|
package com.ibm.wala.core.tests.basic;
|
|
|
|
import junit.framework.Assert;
|
|
|
|
import org.junit.Test;
|
|
|
|
import com.ibm.wala.util.collections.IteratorUtil;
|
|
import com.ibm.wala.util.graph.NumberedGraph;
|
|
import com.ibm.wala.util.graph.impl.ExtensionGraph;
|
|
import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph;
|
|
import com.ibm.wala.util.graph.traverse.SCCIterator;
|
|
|
|
public class ExtensionGraphTest {
|
|
|
|
private static NumberedGraph<String> makeBaseGraph() {
|
|
NumberedGraph<String> base = SlowSparseNumberedGraph.make();
|
|
|
|
base.addNode("A");
|
|
base.addNode("B");
|
|
base.addNode("C");
|
|
base.addNode("D");
|
|
base.addNode("E");
|
|
base.addNode("F");
|
|
base.addNode("G");
|
|
base.addNode("H");
|
|
|
|
base.addEdge("A", "B");
|
|
base.addEdge("B", "C");
|
|
base.addEdge("A", "D");
|
|
base.addEdge("D", "E");
|
|
base.addEdge("A", "F");
|
|
base.addEdge("F", "G");
|
|
base.addEdge("C", "H");
|
|
base.addEdge("E", "H");
|
|
base.addEdge("G", "H");
|
|
|
|
return base;
|
|
}
|
|
|
|
private static void augmentA(NumberedGraph<String> base) {
|
|
base.addEdge("C", "B");
|
|
base.addEdge("E", "D");
|
|
base.addEdge("G", "F");
|
|
}
|
|
|
|
private static void augmentB(NumberedGraph<String> base) {
|
|
base.addNode("I");
|
|
base.addNode("J");
|
|
|
|
base.addEdge("I", "J");
|
|
base.addEdge("A", "I");
|
|
base.addEdge("H", "J");
|
|
}
|
|
|
|
private static void augmentC(NumberedGraph<String> base) {
|
|
base.addEdge("H", "A");
|
|
}
|
|
|
|
@Test
|
|
public void testAugment() {
|
|
NumberedGraph<String> base = makeBaseGraph();
|
|
Assert.assertEquals("base has 8 SCCs", 8, IteratorUtil.count(new SCCIterator<String>(base)));
|
|
|
|
NumberedGraph<String> x = new ExtensionGraph<String>(base);
|
|
augmentA(x);
|
|
Assert.assertEquals("base+A has 5 SCCs", 5, IteratorUtil.count(new SCCIterator<String>(x)));
|
|
Assert.assertEquals("base has 8 SCCs", 8, IteratorUtil.count(new SCCIterator<String>(base)));
|
|
|
|
NumberedGraph<String> y = new ExtensionGraph<String>(x);
|
|
augmentB(y);
|
|
Assert.assertEquals("base+A+B has 7 SCCs", 7, IteratorUtil.count(new SCCIterator<String>(y)));
|
|
Assert.assertEquals("base+A has 5 SCCs", 5, IteratorUtil.count(new SCCIterator<String>(x)));
|
|
Assert.assertEquals("base has 8 SCCs", 8, IteratorUtil.count(new SCCIterator<String>(base)));
|
|
|
|
NumberedGraph<String> z = new ExtensionGraph<String>(y);
|
|
augmentC(z);
|
|
Assert.assertEquals("base+A+B+C has 3 SCCs", 3, IteratorUtil.count(new SCCIterator<String>(z)));
|
|
Assert.assertEquals("base+A+B has 7 SCCs", 7, IteratorUtil.count(new SCCIterator<String>(y)));
|
|
Assert.assertEquals("base+A has 5 SCCs", 5, IteratorUtil.count(new SCCIterator<String>(x)));
|
|
Assert.assertEquals("base has 8 SCCs", 8, IteratorUtil.count(new SCCIterator<String>(base)));
|
|
}
|
|
}
|