WALA/com.ibm.wala.core.tests/src/com/ibm/wala/core/tests/basic/ExtensionGraphTest.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)));
}
}