/*
* Copyright 2012 Odysseus Software GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.odysseus.ithaka.digraph.layout.sugiyama;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import de.odysseus.ithaka.digraph.Digraph;
import de.odysseus.ithaka.digraph.Digraphs;
import de.odysseus.ithaka.digraph.SimpleDigraph;
import de.odysseus.ithaka.digraph.SimpleDigraphAdapter;
import de.odysseus.ithaka.digraph.layout.DigraphLayoutDimension;
import de.odysseus.ithaka.digraph.layout.DigraphLayoutDimensionProvider;
import de.odysseus.ithaka.digraph.layout.sugiyama.SugiyamaArc;
import de.odysseus.ithaka.digraph.layout.sugiyama.SugiyamaNode;
import de.odysseus.ithaka.digraph.layout.sugiyama.SugiyamaStep1;
public class SugiyamaStep1Test {
private Digraph<Integer,Boolean> empty = Digraphs.<Integer,Boolean>emptyDigraph();
private DigraphLayoutDimensionProvider<Integer> dim = new DigraphLayoutDimensionProvider<Integer>() {
@Override
public DigraphLayoutDimension getDimension(Integer node) {
return new DigraphLayoutDimension(String.valueOf(node).length(), 1);
}
};
private Map<Integer,SugiyamaNode<Integer>> map(Digraph<SugiyamaNode<Integer>, SugiyamaArc<Integer,Boolean>> sugiyama) {
Map<Integer,SugiyamaNode<Integer>> map = new HashMap<Integer, SugiyamaNode<Integer>>();
for (SugiyamaNode<Integer> sugiyamaNode : sugiyama.vertices()) {
map.put(sugiyamaNode.getVertex(), sugiyamaNode);
}
return map;
}
@Test public void testNodesAndEdges() {
SimpleDigraph<Integer> dag = new SimpleDigraphAdapter<Integer>();
dag.add(1, 2);
dag.add(3);
Digraph<SugiyamaNode<Integer>, SugiyamaArc<Integer,Boolean>> sugiyama =
new SugiyamaStep1<Integer,Boolean>().createLayoutGraph(dag, dim, empty, 0);
Map<Integer,SugiyamaNode<Integer>> map = map(sugiyama);
assertEquals(3, map.size());
assertTrue(map.keySet().contains(1));
assertTrue(map.keySet().contains(2));
assertTrue(map.keySet().contains(3));
SugiyamaNode<Integer> node = map.get(1);
assertNotNull(node);
assertEquals(dim.getDimension(1), node.getDimension());
assertFalse(node.isDummy());
SugiyamaArc<Integer,Boolean> edge = sugiyama.get(map.get(1), map.get(2));
assertNotNull(edge);
assertSame(map.get(1), edge.getSource());
assertSame(map.get(2), edge.getTarget());
assertTrue(edge.getEdge().booleanValue());
assertFalse(edge.isFeedback());
}
@Test public void testLayers111() {
SimpleDigraph<Integer> dag = new SimpleDigraphAdapter<Integer>();
dag.add(1, 2);
dag.add(2, 3);
Map<Integer,SugiyamaNode<Integer>> map =
map(new SugiyamaStep1<Integer,Boolean>().createLayoutGraph(dag, dim, empty, 0));
assertEquals(0, map.get(1).getLayer());
assertEquals(1, map.get(2).getLayer());
assertEquals(2, map.get(3).getLayer());
}
@Test public void testLayers120() {
SimpleDigraph<Integer> dag = new SimpleDigraphAdapter<Integer>();
dag.add(1, 2);
dag.add(1, 3);
Map<Integer,SugiyamaNode<Integer>> map =
map(new SugiyamaStep1<Integer,Boolean>().createLayoutGraph(dag, dim, empty, 0));
assertEquals(0, map.get(1).getLayer());
assertEquals(1, map.get(2).getLayer());
assertEquals(1, map.get(3).getLayer());
}
@Test public void testLayers210() {
SimpleDigraph<Integer> dag = new SimpleDigraphAdapter<Integer>();
dag.add(1, 2);
dag.add(3, 2);
Map<Integer,SugiyamaNode<Integer>> map =
map(new SugiyamaStep1<Integer,Boolean>().createLayoutGraph(dag, dim, empty, 0));
assertEquals(0, map.get(1).getLayer());
assertEquals(1, map.get(2).getLayer());
assertEquals(0, map.get(3).getLayer());
}
@Test public void testComponents() {
SimpleDigraph<Integer> dag = new SimpleDigraphAdapter<Integer>();
dag.add(1, 2);
dag.add(1, 3);
dag.add(4, 5);
dag.add(6, 5);
Map<Integer,SugiyamaNode<Integer>> map =
map(new SugiyamaStep1<Integer,Boolean>().createLayoutGraph(dag, dim, empty, 0));
assertEquals(0, map.get(1).getLayer());
assertEquals(1, map.get(2).getLayer());
assertEquals(1, map.get(3).getLayer());
assertEquals(0, map.get(4).getLayer());
assertEquals(1, map.get(5).getLayer());
assertEquals(0, map.get(6).getLayer());
}
}