Source code: com/port80/graph/dot/impl/VirtualGraph_Test01.java
1 //
2 // Copyright(c) 2002, Chris Leung
3 //
4
5 package com.port80.graph.dot.impl;
6
7 import java.util.HashMap;
8 import java.util.Map;
9
10 import junit.framework.Assert;
11 import junit.framework.Test;
12 import junit.framework.TestCase;
13 import junit.framework.TestSuite;
14
15 import com.port80.graph.IGraph;
16 import com.port80.graph.dot.impl.VirtualGraph.MinimiumSpacingIterator;
17 import com.port80.util.Debug;
18 import com.port80.util.msg;
19
20 /**
21 * @author chrisl
22 */
23 public class VirtualGraph_Test01 extends TestCase {
24
25 private static boolean VERBOSE = false;
26 private static boolean CHECK = true;
27
28 ////////////////////////////////////////////////////////////////////////
29
30 public VirtualGraph_Test01(String name) {
31 super(name);
32 }
33
34 ////////////////////////////////////////////////////////////////////////
35
36 public void testMinimiumSpacingIterator_01() {
37 final String PREFIX = "testMinimiumSpacingIterator_01";
38 final String testGraph =
39 "digraph testMinimiumSpacingIterator_01 "
40 + "{ a->b; b->c; b->d; b->e; a->c; a->d; a->e; c->c; }";
41 IGraph graph = TestUtil.createGraph(testGraph);
42 //
43 VirtualGraph vgraph = new VirtualGraph(graph);
44 if (VERBOSE) {
45 msg.println(graph.sprintGraph());
46 msg.println("VirtualGraph: minRank=" + vgraph.minRank + ", maxRank=" + vgraph.maxRank);
47 }
48 Assert.assertTrue(vgraph.minRank == 0);
49 Assert.assertTrue(vgraph.maxRank == 2);
50 vgraph.buildRanks(0);
51 //
52 VirtualGraph.MinimiumSpacingIterator it;
53 int min, max;
54 //
55 it = vgraph.new MinimiumSpacingIterator(vgraph.minRank + 1);
56 if (VERBOSE)
57 msg.println("MinimiumSpacingIterator: 1: left=" + it.left.getName() + ", index=" + it.index);
58 Assert.assertTrue(it.left != null);
59 min = Integer.MAX_VALUE;
60 max = 0;
61 int width = Integer.MAX_VALUE;
62 for (int i = 0; it.hasNext(); ++i) {
63 int w = it.left.leftWidth + it.left.rightWidth;
64 if (w < width)
65 width = w;
66 w = it.next();
67 if (w > max)
68 max = w;
69 if (w < min)
70 min = w;
71 if (VERBOSE)
72 msg.println("i=" + i + ", spacing=" + w + ", left=" + it.right.getName());
73 }
74 checkEESpacing(min, width, vgraph);
75 checkXESpacing(max, vgraph);
76 //
77 it = vgraph.new MinimiumSpacingIterator(vgraph.minRank + 2);
78 if (VERBOSE)
79 msg.println("MinimiumSpacingIterator: 2: left=" + it.left.getName() + ", index=" + it.index);
80 Assert.assertTrue(it.left != null);
81 min = Integer.MAX_VALUE;
82 max = 0;
83 for (int i = 0; it.hasNext(); ++i) {
84 int w = it.next();
85 if (w > max)
86 max = w;
87 if (w < min)
88 min = w;
89 if (VERBOSE)
90 msg.println("i=" + i + ", spacing=" + w + ", left=" + it.right.getName());
91 }
92 checkVSpacing(min, max, vgraph);
93 }
94
95 private void checkVSpacing(int min, int max, VirtualGraph vgraph) {
96 int vspacing = vgraph.getVertexSpacing();
97 Assert.assertTrue(min == vspacing); // Without self edge.
98 Assert.assertTrue(max == 2 * vspacing); // With self edge.
99 }
100
101 private void checkXESpacing(int spacing, VirtualGraph vgraph) {
102 int xespacing = vgraph.getVertexSpacing() / vgraph.fXDIV_XEDGE;
103 Assert.assertTrue(spacing == xespacing);
104 }
105
106 private void checkEESpacing(int spacing, int width, VirtualGraph vgraph) {
107 Assert.assertTrue(spacing == 0);
108 int espacing = vgraph.getVertexSpacing() / vgraph.fXDIV_EDGES;
109 Assert.assertTrue(width == espacing);
110 }
111
112 ////////////////////////////////////////////////////////////////////////
113
114 public static Test suite() {
115 TestSuite suite = new TestSuite(VirtualGraph_Test01.class);
116 return suite;
117 }
118
119 public static void main(String[] args) {
120 Map opts = new HashMap();
121 args = msg.getArgs(opts, "VirtualGraphTest_01", args, "- verbose=v nocheck=c");
122 if (opts.get("verbose") != null) {
123 Debug.enable("verbose");
124 VERBOSE = true;
125 }
126 if (opts.get("nocheck") != null) {
127 CHECK = false;
128 }
129 junit.textui.TestRunner.run(suite());
130 // junit.swingui.TestRunner.run(new TestVirtualGraph("TestVirtualGraph").getClass());
131 }
132
133 ////////////////////////////////////////////////////////////////////////
134 }