1 package edu.uci.ics.jung.algorithms.metrics;
2
3 import junit.framework.TestCase;
4 import edu.uci.ics.jung.algorithms.metrics.TriadicCensus;
5 import edu.uci.ics.jung.graph.DirectedGraph;
6 import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
7
8 public class TestTriad extends TestCase {
9
10 public void testConfigurationFromPaper() {
11 DirectedGraph<Character,Number> g = new DirectedSparseMultigraph<Character,Number>();
12 char u = 'u';
13 g.addVertex(u);
14 char v = 'v';
15 g.addVertex(v);
16 char w = 'w';
17 g.addVertex(w);
18 g.addEdge(0, w, u);
19 g.addEdge(1, u, v);
20 g.addEdge(2, v, u);
21
22 assertEquals(35, TriadicCensus.<Character,Number>triCode(g, u, v, w));
23 assertEquals(7, TriadicCensus.triType(35));
24 assertEquals("111D", TriadicCensus.TRIAD_NAMES[7]);
25
26 assertEquals(7, TriadicCensus.triType(TriadicCensus.<Character,Number>triCode(g, u, w, v)));
27 assertEquals(7, TriadicCensus.triType(TriadicCensus.<Character,Number>triCode(g, v, u, w)));
28
29 long[] counts = TriadicCensus.getCounts(g);
30
31 for (int i = 1; i <= 16; i++) {
32 if (i == 7) {
33 assertEquals(1, counts[i]);
34 } else {
35 assertEquals(0, counts[i]);
36 }
37 }
38 }
39
40 public void testFourVertexGraph() {
41
42
43
44
45
46
47
48
49 DirectedGraph<Character,Number> g = new DirectedSparseMultigraph<Character,Number>();
50 char u = 'u';
51 g.addVertex(u);
52 char v = 'v';
53 g.addVertex(v);
54 char w = 'w';
55 g.addVertex(w);
56 char t = 't';
57 g.addVertex(t);
58
59 g.addEdge(0, t, u );
60 g.addEdge(1, u, v );
61
62 long[] counts = TriadicCensus.getCounts(g);
63 for (int i = 1; i <= 16; i++) {
64 if( i == 2 ) {
65 assertEquals("On " + i, 2, counts[i]);
66 } else if (i == 6 || i == 1 ) {
67 assertEquals("On " + i, 1, counts[i]);
68 } else {
69 assertEquals(0, counts[i]);
70 }
71 }
72
73
74
75
76 g.addEdge(2, v, t );
77 g.addEdge(3, w, u );
78 g.addEdge(4, v, w );
79
80
81 counts = TriadicCensus.getCounts(g);
82
83 for (int i = 1; i <= 16; i++) {
84 if( i == 10 ) {
85 assertEquals("On " + i, 2, counts[i]);
86 } else if (i == 4 || i == 5 ) {
87 assertEquals("On " + i, 1, counts[i]);
88 } else {
89 assertEquals("On " + i , 0, counts[i]);
90 }
91 }
92 }
93
94 public void testThreeDotsThreeDashes() {
95 DirectedGraph<Character,Number> g = new DirectedSparseMultigraph<Character,Number>();
96 char u = 'u';
97 g.addVertex(u);
98 char v = 'v';
99 g.addVertex(v);
100 char w = 'w';
101 g.addVertex(w);
102
103 long[] counts = TriadicCensus.getCounts(g);
104
105 for (int i = 1; i <= 16; i++) {
106 if (i == 1) {
107 assertEquals(1, counts[i]);
108 } else {
109 assertEquals(0, counts[i]);
110 }
111 }
112
113 g.addEdge(0, v, u);
114 g.addEdge(1, u, v);
115 g.addEdge(2, v, w);
116 g.addEdge(3, w, v);
117 g.addEdge(4, u, w);
118 g.addEdge(5, w, u);
119
120 counts = TriadicCensus.getCounts(g);
121
122 for (int i = 1; i <= 16; i++) {
123 if (i == 16) {
124 assertEquals(1, counts[i]);
125 } else {
126 assertEquals("Count on " + i + " failed", 0, counts[i]);
127 }
128 }
129 }
130
131
132 public void testNull() {
133 DirectedGraph<Character,Number> g = new DirectedSparseMultigraph<Character,Number>();
134 long[] counts = TriadicCensus.getCounts(g);
135
136
137 for (int i = 1; i < TriadicCensus.MAX_TRIADS; i++) {
138 assertEquals("Empty Graph doesn't have count 0", 0, counts[i]);
139 }
140 }
141
142 public void testOneVertex() {
143 DirectedGraph<Character,Number> g = new DirectedSparseMultigraph<Character,Number>();
144 g.addVertex('u');
145 long[] counts = TriadicCensus.getCounts(g);
146
147
148 for (int i = 1; i < TriadicCensus.MAX_TRIADS; i++) {
149 assertEquals("One vertex Graph doesn't have count 0", 0, counts[i]);
150 }
151 }
152
153 public void testTwoVertices() {
154 DirectedGraph<Character,Number> g = new DirectedSparseMultigraph<Character,Number>();
155 char v1, v2;
156 g.addVertex(v1 = 'u');
157 g.addVertex(v2 = 'v');
158 g.addEdge(0, v1, v2);
159 long[] counts = TriadicCensus.getCounts(g);
160
161
162 for (int i = 1; i < TriadicCensus.MAX_TRIADS; i++) {
163 assertEquals("Two vertex Graph doesn't have count 0", 0, counts[i]);
164 }
165 }
166 }