3 import Analysis.OwnershipAnalysis.*;
10 static boolean aTestFailed;
13 protected static void test( String test,
17 if( expected == result ) {
18 outcome = "...\tpassed";
20 outcome = "...\tFAILED";
24 System.out.println( test+" expect "+expected+outcome );
28 public static void main(String args[]) throws Exception {
33 System.out.println( "---------------------------------------" );
35 System.out.println( "---------------------------------------" );
37 System.out.println( "---------------------------------------" );
40 System.out.println( "<><><><><><><><><><><><><><><><><><><><><><><><>" );
41 System.out.println( "<><><> WARNING: At least one test failed. <><><>" );
42 System.out.println( "<><><><><><><><><><><><><><><><><><><><><><><><>" );
44 System.out.println( "<><> All tests passed. <><>" );
49 public static void testExample() {
51 // example test to know the testing routine is correct!
52 test( "4 == 5?", false, 4 == 5 );
53 test( "3 == 3?", true, 3 == 3 );
57 public static void testTokenTuple() {
59 TokenTuple tt0 = new TokenTuple( new Integer( 1 ), true, TokenTuple.ARITY_ONE );
60 TokenTuple tt1 = new TokenTuple( new Integer( 1 ), true, TokenTuple.ARITY_ONE );
61 TokenTuple tt2 = new TokenTuple( new Integer( 2 ), true, TokenTuple.ARITY_ONE );
62 TokenTuple tt3 = new TokenTuple( new Integer( 1 ), true, TokenTuple.ARITY_MANY );
63 TokenTuple tt4 = new TokenTuple( new Integer( 3 ), false, TokenTuple.ARITY_ONE );
64 TokenTuple tt5 = new TokenTuple( new Integer( 3 ), false, TokenTuple.ARITY_ONE );
66 test( "tt0 equals tt1?", true, tt0.equals( tt1 ) );
67 test( "tt1 equals tt0?", true, tt1.equals( tt0 ) );
68 test( "tt1.hashCode == tt0.hashCode?", true, tt1.hashCode() == tt0.hashCode() );
70 test( "tt0 equals tt2?", false, tt0.equals( tt2 ) );
71 test( "tt2 equals tt0?", false, tt2.equals( tt0 ) );
72 test( "tt2.hashCode == tt0.hashCode?", false, tt2.hashCode() == tt0.hashCode() );
74 test( "tt0 equals tt3?", false, tt0.equals( tt3 ) );
75 test( "tt3 equals tt0?", false, tt3.equals( tt0 ) );
76 test( "tt3.hashCode == tt0.hashCode?", false, tt3.hashCode() == tt0.hashCode() );
78 test( "tt2 equals tt3?", false, tt2.equals( tt3 ) );
79 test( "tt3 equals tt2?", false, tt3.equals( tt2 ) );
80 test( "tt3.hashCode == tt2.hashCode?", false, tt3.hashCode() == tt2.hashCode() );
82 tt1 = tt1.increaseArity();
84 test( "tt1 equals tt2?", false, tt1.equals( tt2 ) );
85 test( "tt2 equals tt1?", false, tt2.equals( tt1 ) );
86 test( "tt2.hashCode == tt1.hashCode?", false, tt2.hashCode() == tt1.hashCode() );
88 test( "tt1 equals tt3?", true, tt1.equals( tt3 ) );
89 test( "tt3 equals tt1?", true, tt3.equals( tt1 ) );
90 test( "tt3.hashCode == tt1.hashCode?", true, tt3.hashCode() == tt1.hashCode() );
92 test( "tt4 equals tt5?", true, tt4.equals( tt5 ) );
93 test( "tt5 equals tt4?", true, tt5.equals( tt4 ) );
94 test( "tt5.hashCode == tt4.hashCode?", true, tt5.hashCode() == tt4.hashCode() );
96 tt4 = tt4.increaseArity();
98 test( "tt4 equals tt5?", true, tt4.equals( tt5 ) );
99 test( "tt5 equals tt4?", true, tt5.equals( tt4 ) );
100 test( "tt5.hashCode == tt4.hashCode?", true, tt5.hashCode() == tt4.hashCode() );
103 TokenTuple tt6 = new TokenTuple( new Integer( 6 ), false, TokenTuple.ARITY_ONE );
104 TokenTuple tt7 = new TokenTuple( new Integer( 6 ), false, TokenTuple.ARITY_ONE );
105 TokenTuple tt8 = new TokenTuple( new Integer( 8 ), false, TokenTuple.ARITY_ONE );
106 TokenTuple tt9 = new TokenTuple( new Integer( 9 ), false, TokenTuple.ARITY_ONE );
108 test( "tt6 equals tt7?", true, tt6.equals( tt7 ) );
109 test( "tt6.hashCode == tt7.hashCode?", true, tt6.hashCode() == tt7.hashCode() );
111 test( "tt8 equals tt7?", false, tt8.equals( tt7 ) );
112 test( "tt8.hashCode == tt7.hashCode?", false, tt8.hashCode() == tt7.hashCode() );
114 // notice that this makes tt7 canonical
115 tt7 = tt7.changeTokenTo( new Integer( 8 ) );
117 test( "tt6 equals tt7?", false, tt6.equals( tt7 ) );
118 test( "tt6.hashCode == tt7.hashCode?", false, tt6.hashCode() == tt7.hashCode() );
120 test( "tt8 equals tt7?", true, tt8.equals( tt7 ) );
121 test( "tt8.hashCode == tt7.hashCode?", true, tt8.hashCode() == tt7.hashCode() );
123 test( "tt6 == tt7?", false, tt6 == tt7 );
124 test( "tt8 == tt7?", false, tt8 == tt7 );
125 test( "tt9 == tt7?", false, tt9 == tt7 );
127 tt6 = tt6.makeCanonical();
128 tt8 = tt8.makeCanonical();
129 tt9 = tt9.makeCanonical();
131 test( "tt6 == tt7?", false, tt6 == tt7 );
132 test( "tt8 == tt7?", true, tt8 == tt7 );
133 test( "tt9 == tt7?", false, tt9 == tt7 );
137 public static void testTokenTupleSet() {
138 TokenTuple tt0 = new TokenTuple( new Integer( 0 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
139 TokenTuple tt1 = new TokenTuple( new Integer( 1 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
140 TokenTuple tt2 = new TokenTuple( new Integer( 2 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
142 TokenTupleSet tts0 = new TokenTupleSet( tt0 );
143 TokenTupleSet tts1 = new TokenTupleSet( tt1 );
144 TokenTupleSet tts2a = new TokenTupleSet( tt2 );
145 TokenTupleSet tts2b = new TokenTupleSet( tt2 );
147 test( "tts0.equals( null )?", false, tts0.equals( null ) );
148 test( "tts0.equals( tts1 )?", false, tts0.equals( tts1 ) );
149 test( "tts0.hashCode == tts1.hashCode?", false, tts0.hashCode() == tts1.hashCode() );
151 test( "tts2a.equals( tts2b )?", true, tts2a.equals( tts2b ) );
152 test( "tts2b.equals( tts2a )?", true, tts2b.equals( tts2a ) );
153 test( "tts2a.hashCode == tts2b.hashCode?", true, tts2a.hashCode() == tts2b.hashCode() );
156 TokenTupleSet tts012a = new TokenTupleSet();
157 tts012a = tts012a.add( tt0 );
158 tts012a = tts012a.add( tt1 );
159 tts012a = tts012a.add( tt2 );
161 TokenTupleSet tts012b = tts0.union( tts1.union( tts2b.union( tts2a ) ) );
163 test( "tts012a.equals( tts012b )?", true, tts012a.equals( tts012b ) );
164 test( "tts012a.hashCode == tts012b.hashCode?", true, tts012a.hashCode() == tts012b.hashCode() );
167 TokenTupleSet ttsEmpty = new TokenTupleSet();
169 test( "tts012a.isEmpty()?", false, tts012a.isEmpty() );
170 test( "ttsEmpty.isEmpty()?", true, ttsEmpty.isEmpty() );
171 test( "ttsEmpty.isSubset( tts012a )?", true, ttsEmpty.isSubset( tts012a ) );
172 test( "tts012a.isSubset( ttsEmpty )?", false, tts012a.isSubset ( ttsEmpty ) );
173 test( "tts2a.isSubset( tts012a )?", true, tts2a.isSubset ( tts012a ) );
174 test( "tts012a.isSubset( tts2a )?", false, tts012a.isSubset ( tts2a ) );
175 test( "tts2a.isSubset( tts2b )?", true, tts2a.isSubset ( tts2b ) );
178 TokenTuple tt1star = new TokenTuple( new Integer( 1 ), true, TokenTuple.ARITY_MANY ).makeCanonical();
179 TokenTuple tt3 = new TokenTuple( new Integer( 3 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
181 test( "ttsEmpty.containsTuple( tt2 )?", false, ttsEmpty.containsTuple( tt2 ) );
182 test( "ttsEmpty.containsTuple( tt1 )?", false, ttsEmpty.containsTuple( tt1 ) );
183 test( "ttsEmpty.containsTuple( tt1star )?", false, ttsEmpty.containsTuple( tt1star ) );
184 test( "ttsEmpty.containsTuple( tt3 )?", false, ttsEmpty.containsTuple( tt3 ) );
186 test( "tts2a.containsTuple( tt2 )?", true, tts2a.containsTuple( tt2 ) );
187 test( "tts2a.containsTuple( tt1 )?", false, tts2a.containsTuple( tt1 ) );
188 test( "tts2a.containsTuple( tt1star )?", false, tts2a.containsTuple( tt1star ) );
189 test( "tts2a.containsTuple( tt3 )?", false, tts2a.containsTuple( tt3 ) );
191 test( "tts012a.containsTuple( tt2 )?", true, tts012a.containsTuple( tt2 ) );
192 test( "tts012a.containsTuple( tt1 )?", true, tts012a.containsTuple( tt1 ) );
193 test( "tts012a.containsTuple( tt1star )?", false, tts012a.containsTuple( tt1star ) );
194 test( "tts012a.containsTuple( tt3 )?", false, tts012a.containsTuple( tt3 ) );
197 TokenTuple tt4 = new TokenTuple( new Integer( 4 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
198 TokenTuple tt5 = new TokenTuple( new Integer( 5 ), true, TokenTuple.ARITY_ONE ).makeCanonical();
199 TokenTuple tt6 = new TokenTuple( new Integer( 6 ), true, TokenTuple.ARITY_ONE ).makeCanonical();
200 TokenTuple tt7 = new TokenTuple( new Integer( 7 ), true, TokenTuple.ARITY_MANY ).makeCanonical();
202 TokenTuple tt5star = new TokenTuple( new Integer( 5 ), true, TokenTuple.ARITY_MANY ).makeCanonical();
203 TokenTuple tt6star = new TokenTuple( new Integer( 6 ), true, TokenTuple.ARITY_MANY ).makeCanonical();
205 TokenTupleSet tts4567a = new TokenTupleSet();
206 tts4567a = tts4567a.add( tt4 ).add( tt5 ).add( tt6 ).add( tt7 );
208 TokenTupleSet tts4567b = new TokenTupleSet( tts4567a );
210 TokenTupleSet tts4567c = new TokenTupleSet();
211 tts4567c = tts4567c.add( tt4 ).add( tt5star ).add( tt6 ).add( tt7 );
213 TokenTupleSet tts4567d = new TokenTupleSet();
214 tts4567d = tts4567d.add( tt4 ).add( tt5star ).add( tt6star ).add( tt7 );
216 test( "tts4567a.equals( tts4567b )?", true, tts4567a.equals( tts4567b ) );
217 test( "tts4567a.hashCode == tts4567b.hashCode?", true, tts4567a.hashCode() == tts4567b.hashCode() );
219 test( "tts4567a.equals( tts4567c )?", false, tts4567a.equals( tts4567c ) );
220 test( "tts4567a.hashCode == tts4567c.hashCode?", false, tts4567a.hashCode() == tts4567c.hashCode() );
222 test( "tts4567a.equals( tts4567d )?", false, tts4567a.equals( tts4567d ) );
223 test( "tts4567a.hashCode == tts4567d.hashCode?", false, tts4567a.hashCode() == tts4567d.hashCode() );
225 tts4567a = tts4567a.increaseArity( new Integer( 6 ) );
227 test( "tts4567a.equals( tts4567b )?", false, tts4567a.equals( tts4567b ) );
228 test( "tts4567a.hashCode == tts4567b.hashCode?", false, tts4567a.hashCode() == tts4567b.hashCode() );
230 test( "tts4567a.equals( tts4567c )?", false, tts4567a.equals( tts4567c ) );
231 // it's okay if the objects are not equal but hashcodes are, its a collision
232 //test( "tts4567a.hashCode == tts4567c.hashCode?", false, tts4567a.hashCode() == tts4567c.hashCode() );
234 test( "tts4567a.equals( tts4567d )?", false, tts4567a.equals( tts4567d ) );
235 test( "tts4567a.hashCode == tts4567d.hashCode?", false, tts4567a.hashCode() == tts4567d.hashCode() );
237 tts4567a = tts4567a.increaseArity( new Integer( 5 ) );
240 test( "tts4567a.equals( tts4567b )?", false, tts4567a.equals( tts4567b ) );
241 test( "tts4567a.hashCode == tts4567b.hashCode?", false, tts4567a.hashCode() == tts4567b.hashCode() );
243 test( "tts4567a.equals( tts4567c )?", false, tts4567a.equals( tts4567c ) );
244 test( "tts4567a.hashCode == tts4567c.hashCode?", false, tts4567a.hashCode() == tts4567c.hashCode() );
246 test( "tts4567a.equals( tts4567d )?", true, tts4567a.equals( tts4567d ) );
247 test( "tts4567a.hashCode == tts4567d.hashCode?", true, tts4567a.hashCode() == tts4567d.hashCode() );
250 test( "tts4567a.containsToken( new Integer( 1 ) )?", false, tts4567a.containsToken( new Integer( 1 ) ) );
251 test( "tts4567a.containsToken( new Integer( 4 ) )?", true, tts4567a.containsToken( new Integer( 4 ) ) );
252 test( "tts4567a.containsToken( new Integer( 5 ) )?", true, tts4567a.containsToken( new Integer( 5 ) ) );
253 test( "tts4567a.containsToken( new Integer( 7 ) )?", true, tts4567a.containsToken( new Integer( 7 ) ) );
254 test( "tts4567a.containsToken( new Integer( 8 ) )?", false, tts4567a.containsToken( new Integer( 8 ) ) );
257 TokenTuple tt10 = new TokenTuple( new Integer( 10 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
258 TokenTuple tt11 = new TokenTuple( new Integer( 11 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
259 TokenTuple tt12 = new TokenTuple( new Integer( 12 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
260 TokenTuple tt13 = new TokenTuple( new Integer( 13 ), true, TokenTuple.ARITY_ONE ).makeCanonical();
261 TokenTuple tt13star = new TokenTuple( new Integer( 13 ), true, TokenTuple.ARITY_MANY ).makeCanonical();
262 TokenTuple tt42 = new TokenTuple( new Integer( 42 ), false, TokenTuple.ARITY_ONE ).makeCanonical();
263 TokenTuple tt52 = new TokenTuple( new Integer( 52 ), true, TokenTuple.ARITY_ONE ).makeCanonical();
264 TokenTuple tt62star = new TokenTuple( new Integer( 62 ), true, TokenTuple.ARITY_MANY ).makeCanonical();
266 AllocationSite as = new AllocationSite( 3, null );
267 as.setIthOldest( 0, new Integer( 10 ) );
268 as.setIthOldest( 1, new Integer( 11 ) );
269 as.setIthOldest( 2, new Integer( 12 ) );
270 as.setSummary ( new Integer( 13 ) );
273 TokenTupleSet ttsAgeTest0a = new TokenTupleSet();
274 ttsAgeTest0a = ttsAgeTest0a.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star );
276 TokenTupleSet ttsAgeTest0b = new TokenTupleSet();
277 ttsAgeTest0b = ttsAgeTest0b.add( tt12 ).add( tt52 ).add( tt42 ).add( tt62star );
279 test( "ttsAgeTest0a.equals( ttsAgeTest0b )?", false, ttsAgeTest0a.equals( ttsAgeTest0b ) );
280 ttsAgeTest0a = ttsAgeTest0a.ageTokens( as );
281 test( "ttsAgeTest0a.equals( ttsAgeTest0b )?", true, ttsAgeTest0a.equals( ttsAgeTest0b ) );
284 TokenTupleSet ttsAgeTest1a = new TokenTupleSet();
285 ttsAgeTest1a = ttsAgeTest1a.add( tt10 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13 );
287 TokenTupleSet ttsAgeTest1b = new TokenTupleSet();
288 ttsAgeTest1b = ttsAgeTest1b.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13 );
290 test( "ttsAgeTest1a.equals( ttsAgeTest1b )?", false, ttsAgeTest1a.equals( ttsAgeTest1b ) );
291 ttsAgeTest1a = ttsAgeTest1a.ageTokens( as );
292 test( "ttsAgeTest1a.equals( ttsAgeTest1b )?", true, ttsAgeTest1a.equals( ttsAgeTest1b ) );
295 TokenTupleSet ttsAgeTest2a = new TokenTupleSet();
296 ttsAgeTest2a = ttsAgeTest2a.add( tt10 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt12 ).add( tt11 );
298 TokenTupleSet ttsAgeTest2b = new TokenTupleSet();
299 ttsAgeTest2b = ttsAgeTest2b.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13 ).add( tt12 );
301 test( "ttsAgeTest2a.equals( ttsAgeTest2b )?", false, ttsAgeTest2a.equals( ttsAgeTest2b ) );
302 ttsAgeTest2a = ttsAgeTest2a.ageTokens( as );
303 test( "ttsAgeTest2a.equals( ttsAgeTest2b )?", true, ttsAgeTest2a.equals( ttsAgeTest2b ) );
306 TokenTupleSet ttsAgeTest3a = new TokenTupleSet();
307 ttsAgeTest3a = ttsAgeTest3a.add( tt13 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt12 ).add( tt10 );
309 TokenTupleSet ttsAgeTest3b = new TokenTupleSet();
310 ttsAgeTest3b = ttsAgeTest3b.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13star );
312 test( "ttsAgeTest3a.equals( ttsAgeTest3b )?", false, ttsAgeTest3a.equals( ttsAgeTest3b ) );
313 ttsAgeTest3a = ttsAgeTest3a.ageTokens( as );
314 test( "ttsAgeTest3a.equals( ttsAgeTest3b )?", true, ttsAgeTest3a.equals( ttsAgeTest3b ) );
320 public static void garbage() {
326 TokenTupleSet tts0 = new TokenTupleSet( tt0 );
327 TokenTupleSet tts1 = new TokenTupleSet( tt1 );
328 TokenTupleSet tts2 = new TokenTupleSet( tt2 );
329 TokenTupleSet tts3 = new TokenTupleSet( tt3 );
330 TokenTupleSet tts4 = tts1.union( tts3 );
331 TokenTupleSet tts5 = tts0.union( tts2 );
332 TokenTupleSet tts6 = tts1.union( tts1 );
334 System.out.println( "tts4 is "+tts4 );
335 System.out.println( "tts5 is "+tts5 );
336 System.out.println( "tts6 is "+tts6 );
338 ReachabilitySet rs0 = new ReachabilitySet( tts0 );
339 rs0 = rs0.union( new ReachabilitySet( tts2 ) );
340 rs0 = rs0.union( new ReachabilitySet( tts5 ) );
342 System.out.println( "rs0 is "+rs0 );
344 TokenTuple tt4 = new TokenTuple( new Integer( 4 ),
346 TokenTuple.ARITY_ONE );
348 TokenTuple tt5 = new TokenTuple( new Integer( 4 ),
350 TokenTuple.ARITY_ONE );
352 TokenTuple tt6 = new TokenTuple( new Integer( 6 ),
354 TokenTuple.ARITY_ONE );
356 TokenTupleSet tts7 = new TokenTupleSet( tt4 );
357 //TokenTupleSet tts8 = new TokenTupleSet( tt5 );
358 TokenTupleSet tts9 = new TokenTupleSet( tt1 );
359 tts9 = tts9.union( tts2 );
361 ReachabilitySet rs1 = new ReachabilitySet( tts7 );
362 //rs1 = rs1.union( new ReachabilitySet( tts8 ) );
363 rs1 = rs1.union( new ReachabilitySet( tts9 ) );
365 System.out.println( "rs1 is "+rs1 );
368 ChangeTupleSet cts0 = rs0.unionUpArityToChangeSet( rs1 );
369 System.out.println( "cts0 is "+cts0 );
373 TokenTuple tt00 = new TokenTuple( new Integer( 9 ),
375 TokenTuple.ARITY_ONE );
377 TokenTuple tt01 = new TokenTuple( new Integer( 9 ),
379 TokenTuple.ARITY_ONE );
381 test( "tt00 equals tt01?", true, tt00.equals( tt01 ) );
382 test( "tt00 == tt01?", false, tt00 == tt01 );
384 tt00 = (TokenTuple) Canonical.makeCanonical( tt00 );
385 tt01 = (TokenTuple) Canonical.makeCanonical( tt01 );
387 test( "tt00 equals tt01?", true, tt00.equals( tt01 ) );
388 test( "tt00 == tt01?", true, tt00 == tt01 );
392 (TokenTuple) Canonical.makeCanonical(
393 new TokenTuple( new Integer( 10 ),
395 TokenTuple.ARITY_ONE )
399 (TokenTuple) Canonical.makeCanonical(
400 new TokenTuple( new Integer( 11 ),
402 TokenTuple.ARITY_ONE )
406 (TokenTuple) Canonical.makeCanonical(
407 new TokenTuple( new Integer( 12 ),
409 TokenTuple.ARITY_ONE )
412 TokenTupleSet ttsT00 =
413 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt00 ) );
415 TokenTupleSet ttsT01 =
416 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt01 ) );
418 TokenTupleSet ttsT02 =
419 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt02 ) );
421 TokenTupleSet ttsT03 =
422 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt03 ) );
424 TokenTupleSet ttsT04 =
425 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt04 ) );
427 TokenTupleSet tts00 = ttsT00.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
428 TokenTupleSet tts01 = ttsT01.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
430 test( "tts00 equals tts01?", true, tts00.equals( tts01 ) );
432 // It's OK that this one turns out true--I changed the union operator
433 // to automatically canonicalize stuff!
434 test( "tts00 == tts01?", false, tts00 == tts01 );
436 tts00 = (TokenTupleSet) Canonical.makeCanonical( tts00 );
437 tts01 = (TokenTupleSet) Canonical.makeCanonical( tts01 );
439 test( "tts00 equals tts01?", true, tts00.equals( tts01 ) );
440 test( "tts00 == tts01?", true, tts00 == tts01 );
444 ReachabilitySet rs2 = new ReachabilitySet( tts00 );
445 ReachabilitySet rs3 = new ReachabilitySet( tts01 ).union( rs2 );
447 System.out.println( "rs3 is "+rs3 );
449 rs3 = rs3.increaseArity( new Integer( 11 ) );
450 System.out.println( "rs3 is "+rs3 );
454 TokenTuple tt11 = new TokenTuple( new Integer( 1 ),
456 TokenTuple.ARITY_ONE );
458 TokenTuple tt12 = new TokenTuple( new Integer( 2 ),
460 TokenTuple.ARITY_ONE );
462 TokenTuple tt13 = new TokenTuple( new Integer( 3 ),
464 TokenTuple.ARITY_MANY );
466 TokenTuple tt14 = new TokenTuple( new Integer( 4 ),
468 TokenTuple.ARITY_ONE );
470 TokenTuple tt15 = new TokenTuple( new Integer( 5 ),
472 TokenTuple.ARITY_ONE );
474 TokenTuple tt16 = new TokenTuple( new Integer( 6 ),
476 TokenTuple.ARITY_MANY );
479 TokenTupleSet tts10 = new TokenTupleSet();
480 tts10 = tts10.add( tt11 );
481 tts10 = tts10.add( tt12 );
482 tts10 = tts10.add( tt13 );
483 tts10 = tts10.add( tt14 );
484 tts10 = tts10.add( tt15 );
485 tts10 = tts10.add( tt16 );
489 TokenTuple tt21 = new TokenTuple( new Integer( 1 ),
491 TokenTuple.ARITY_ONE );
493 TokenTuple tt22 = new TokenTuple( new Integer( 5 ),
495 TokenTuple.ARITY_ONE );
497 TokenTuple tt23 = new TokenTuple( new Integer( 3 ),
499 TokenTuple.ARITY_ONE );
501 TokenTuple tt24 = new TokenTuple( new Integer( 6 ),
503 TokenTuple.ARITY_MANY );
505 TokenTuple tt25 = new TokenTuple( new Integer( 7 ),
507 TokenTuple.ARITY_ONE );
509 TokenTuple tt26 = new TokenTuple( new Integer( 8 ),
511 TokenTuple.ARITY_MANY );
514 TokenTupleSet tts20 = new TokenTupleSet();
515 tts20 = tts20.add( tt21 );
516 tts20 = tts20.add( tt22 );
517 tts20 = tts20.add( tt23 );
518 tts20 = tts20.add( tt24 );
519 tts20 = tts20.add( tt25 );
520 tts20 = tts20.add( tt26 );
522 TokenTupleSet tts30 = tts10.unionUpArity( tts20 );
524 System.out.println( "tts10 is "+tts10 );
525 System.out.println( "tts20 is "+tts20 );
526 System.out.println( "" );
527 System.out.println( "tts30 is "+tts30 );
530 TokenTupleSet tts40 = new TokenTupleSet();
531 tts40 = tts40.add( tt21 );
532 tts40 = tts40.add( tt23 );
534 TokenTupleSet tts50 = new TokenTupleSet();
535 tts50 = tts50.add( tt21 );
536 tts50 = tts50.add( tt23 );
537 tts50 = tts50.add( tt22 );
539 TokenTupleSet tts60 = new TokenTupleSet();
540 tts60 = tts60.add( tt21 );
541 tts60 = tts60.add( tt24 );
543 TokenTupleSet tts70 = new TokenTupleSet();
544 tts70 = tts70.add( tt11 );
545 tts70 = tts70.add( tt13 );
546 tts70 = tts70.add( tt12 );
548 TokenTupleSet tts71 = new TokenTupleSet();
549 tts71 = tts71.add( tt13 );
550 tts71 = tts71.add( tt11 );
551 tts71 = tts71.add( tt15 );
553 TokenTupleSet tts72 = new TokenTupleSet();
554 tts72 = tts72.add( tt11 );
555 tts72 = tts72.add( tt16 );
557 TokenTupleSet tts73 = new TokenTupleSet();
558 tts73 = tts73.add( tt12 );
560 ReachabilitySet rs40 = new ReachabilitySet();
561 rs40 = rs40.add( tts40 );
562 rs40 = rs40.add( tts50 );
563 rs40 = rs40.add( tts60 );
565 ReachabilitySet rs50 = new ReachabilitySet();
566 rs50 = rs50.add( tts70 );
567 rs50 = rs50.add( tts71 );
568 rs50 = rs50.add( tts72 );
569 rs50 = rs50.add( tts73 );
571 ReachabilitySet rs60 = rs50.unionUpArity( rs40 );
573 System.out.println( "rs40 is "+rs40 );
574 System.out.println( "rs50 is "+rs50 );
575 System.out.println( "" );
576 System.out.println( "rs60 is "+rs60 );