package tests.ddg; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Set; import neo4j.traversals.batchInserter.Elementary; import neo4j.traversals.batchInserter.Function; import org.junit.Test; import org.neo4j.graphdb.index.IndexHits; import tests.TestDBTestsBatchInserter; import tests.udg.CFGCreator; import udg.CFGToUDGConverter; import udg.useDefGraph.UseDefGraph; import cfg.CFG; import ddg.CFGAndUDGToDefUseCFG; import ddg.DDGCreator; import ddg.DataDependenceGraph.DDG; import ddg.DataDependenceGraph.DefUseRelation; import ddg.DefUseCFG.BatchInserterFactory; import ddg.DefUseCFG.DefUseCFG; public class testDDGCreator extends TestDBTestsBatchInserter { @Test public void simplestTest() { IndexHits<Long> hits = Function.getFunctionsByName("ddg_simplest_test"); long functionId = hits.next(); DDGCreator ddgCreator = new DDGCreator(); DDG ddg = ddgCreator.createForFunctionById(functionId); Set<DefUseRelation> reachesLinks = ddg.getDefUseEdges(); assertTrue(reachesLinks.size() == 1); for (DefUseRelation x : ddg.getDefUseEdges()) { assertTrue((Elementary.getNodeCode((Long) x.src) .startsWith("int x = "))); assertTrue((Elementary.getNodeCode((long) x.dst) .startsWith("foo ( x )"))); } } @Test public void testConverter() { IndexHits<Long> hits = Function.getFunctionsByName("ddg_simplest_test"); long funcId = hits.next(); BatchInserterFactory cfgFactory = new BatchInserterFactory(); DefUseCFG defUseCfgDb = cfgFactory.create(funcId); CFGCreator cfgCreator = new CFGCreator(); CFGToUDGConverter converter = new CFGToUDGConverter(); CFGAndUDGToDefUseCFG converter2 = new CFGAndUDGToDefUseCFG(); CFG cfg = cfgCreator.getCFGForCode("f(){ int x = 0; foo(x);}"); UseDefGraph udg = converter.convert(cfg); DefUseCFG defUseCfg = converter2.convert(cfg, udg); assertEquals(defUseCfg.getStatements().size(), defUseCfgDb .getStatements().size()); assertEquals(defUseCfg.getParentBlocks().size(), defUseCfgDb .getParentBlocks().size()); assertEquals(defUseCfg.getChildBlocks().size(), defUseCfgDb .getChildBlocks().size()); assertEquals(defUseCfg.getSymbolsDefined().size(), defUseCfgDb .getSymbolsDefined().size()); assertEquals(defUseCfg.getSymbolsUsed().size(), defUseCfgDb .getSymbolsUsed().size()); } }