package edu.brown.graphs; import java.util.*; import org.voltdb.catalog.*; import edu.brown.BaseTestCase; import edu.brown.designer.*; import edu.brown.utils.ProjectType; public class TestDirectedGraph extends BaseTestCase { protected static AbstractDirectedGraph<DesignerVertex, DesignerEdge> graph; protected static Map<String, DesignerVertex> vertex_xref = new HashMap<String, DesignerVertex>(); protected static String path[] = { "WAREHOUSE", "DISTRICT", "CUSTOMER", "ORDERS" }; @Override protected void setUp() throws Exception { super.setUp(ProjectType.TPCC); if (graph == null) { graph = new AbstractDirectedGraph<DesignerVertex, DesignerEdge>(catalog_db) { private static final long serialVersionUID = 1L; // Nothing... }; for (Table catalog_tbl : catalog_db.getTables()) { for (String table_name : path) { if (table_name.equals(catalog_tbl.getName())) { DesignerVertex v = new DesignerVertex(catalog_tbl); graph.addVertex(v); vertex_xref.put(catalog_tbl.getName(), v); break; } } // FOR } // FOR DesignerVertex previous = null; for (String item : path) { DesignerVertex v = vertex_xref.get(item); if (previous != null) { graph.addEdge(new DesignerEdge(graph), previous, v); } previous = v; } // FOR } } public void testGetVertex() throws Exception { String table_name = "WAREHOUSE"; DesignerVertex v = graph.getVertex(catalog_db.getTables().get(table_name)); assertNotNull(v); assertEquals(table_name, v.getCatalogItem().getName()); } /** * testGetPath */ public void testGetPath() throws Exception { DesignerVertex v0 = vertex_xref.get(path[0]); DesignerVertex v1 = vertex_xref.get(path[path.length - 1]); List<DesignerEdge> ret_path = graph.getPath(v0, v1); assertNotNull(ret_path); assertEquals(path.length - 1, ret_path.size()); for (int i = 0, cnt = ret_path.size(); i < cnt; i++) { DesignerEdge e = ret_path.get(i); assertEquals(vertex_xref.get(path[i]), graph.getSource(e)); } // FOR } /** * testGetAncestors */ public void testGetAncestors() throws Exception { DesignerVertex v = vertex_xref.get(path[path.length - 1]); List<DesignerVertex> ancestors = graph.getAncestors(v); assertEquals(path.length - 1, ancestors.size()); // System.out.println("Ancestors: " + ancestors); int j = 0; for (int i = ancestors.size() - 1; i >= 0; i--) { assertEquals(vertex_xref.get(path[j++]), ancestors.get(i)); } // FOR } /** * testGetDescendants */ public void testGetDescendants() throws Exception { DesignerVertex v = vertex_xref.get(path[0]); Set<DesignerVertex> descendants = graph.getDescendants(v); // System.out.println("Descedants: " + descendants); assertEquals(path.length, descendants.size()); for (int i = 0; i < path.length; i++) { assertTrue(descendants.contains(vertex_xref.get(path[i]))); } } /** * testGetRoots */ public void testGetRoots() throws Exception { Set<DesignerVertex> roots = graph.getRoots(); // System.out.println("ROOTS: " + roots); assertEquals(1, roots.size()); assertTrue(roots.contains(vertex_xref.get(path[0]))); } }