6cccfe721a60898cdaa4f85a93f8165dc1a3aa5a
[IRC.git] / Robust / src / Tests / OwnershipAnalysisTest / testTokens / Main.java
1 import IR.*;
2 import IR.Flat.*;
3 import Analysis.OwnershipAnalysis.*;
4 import java.util.*;
5 import java.io.*;
6
7
8 public class Main {
9
10     static boolean aTestFailed;
11
12
13     protected static void test( String test,
14                                 boolean expected,
15                                 boolean result ) {
16         String outcome;
17         if( expected == result ) {
18             outcome = "...\tpassed";
19         } else {
20             outcome = "...\tFAILED";
21             aTestFailed = true;
22         }
23         
24         System.out.println( test+" expect "+expected+outcome );
25     }
26
27
28     public static void main(String args[]) throws Exception {
29
30         aTestFailed = false;
31
32         testExample();
33         System.out.println( "---------------------------------------" );
34         testTokenTuple();
35         System.out.println( "---------------------------------------" );
36         testTokenTupleSet();
37         System.out.println( "---------------------------------------" );
38
39         if( aTestFailed ) {
40             System.out.println( "<><><><><><><><><><><><><><><><><><><><><><><><>" );
41             System.out.println( "<><><> WARNING: At least one test failed. <><><>" );
42             System.out.println( "<><><><><><><><><><><><><><><><><><><><><><><><>" );
43         } else {
44             System.out.println( "<><> All tests passed. <><>" );
45         }
46     }
47
48     
49     public static void testExample() {
50         
51         // example test to know the testing routine is correct!
52         test( "4 == 5?", false, 4 == 5 );
53         test( "3 == 3?", true,  3 == 3 );
54     }
55
56
57     public static void testTokenTuple() {
58
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  );
65
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() );
69
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() );
73
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() );
77
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() );
81
82         tt1 = tt1.increaseArity();
83
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() );
87
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() );
91
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() );
95
96         tt4 = tt4.increaseArity();
97
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() );
101
102
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  );
107
108         test( "tt6 equals tt7?",               true,  tt6.equals( tt7 )                );
109         test( "tt6.hashCode == tt7.hashCode?", true,  tt6.hashCode() == tt7.hashCode() );
110
111         test( "tt8 equals tt7?",               false, tt8.equals( tt7 )                );
112         test( "tt8.hashCode == tt7.hashCode?", false, tt8.hashCode() == tt7.hashCode() );
113
114         // notice that this makes tt7 canonical
115         tt7 = tt7.changeTokenTo( new Integer( 8 ) );
116
117         test( "tt6 equals tt7?",               false, tt6.equals( tt7 )                );
118         test( "tt6.hashCode == tt7.hashCode?", false, tt6.hashCode() == tt7.hashCode() );
119
120         test( "tt8 equals tt7?",               true,  tt8.equals( tt7 )                );
121         test( "tt8.hashCode == tt7.hashCode?", true,  tt8.hashCode() == tt7.hashCode() );
122
123         test( "tt6 == tt7?", false, tt6 == tt7 );
124         test( "tt8 == tt7?", false, tt8 == tt7 );
125         test( "tt9 == tt7?", false, tt9 == tt7 );
126
127         tt6 = tt6.makeCanonical();
128         tt8 = tt8.makeCanonical();
129         tt9 = tt9.makeCanonical();
130
131         test( "tt6 == tt7?", false, tt6 == tt7 );
132         test( "tt8 == tt7?", true,  tt8 == tt7 );
133         test( "tt9 == tt7?", false, tt9 == tt7 );
134     }
135
136
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();
141
142         TokenTupleSet tts0  = new TokenTupleSet( tt0 );
143         TokenTupleSet tts1  = new TokenTupleSet( tt1 );
144         TokenTupleSet tts2a = new TokenTupleSet( tt2 );
145         TokenTupleSet tts2b = new TokenTupleSet( tt2 );
146
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() );
150
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() );
154
155
156         TokenTupleSet tts012a = new TokenTupleSet();
157         tts012a = tts012a.add( tt0 );
158         tts012a = tts012a.add( tt1 );
159         tts012a = tts012a.add( tt2 );
160
161         TokenTupleSet tts012b = tts0.union( tts1.union( tts2b.union( tts2a ) ) );
162
163         test( "tts012a.equals( tts012b )?", true, tts012a.equals( tts012b ) );
164         test( "tts012a.hashCode == tts012b.hashCode?", true, tts012a.hashCode() == tts012b.hashCode() );
165
166
167         TokenTupleSet ttsEmpty = new TokenTupleSet();
168         
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    ) );
176
177         
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();
180
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     ) );
185
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     ) );
190
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     ) );
195
196
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();
201
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();
204
205         TokenTupleSet tts4567a = new TokenTupleSet();
206         tts4567a = tts4567a.add( tt4 ).add( tt5 ).add( tt6 ).add( tt7 );
207
208         TokenTupleSet tts4567b = new TokenTupleSet( tts4567a );
209
210         TokenTupleSet tts4567c = new TokenTupleSet();
211         tts4567c = tts4567c.add( tt4 ).add( tt5star ).add( tt6 ).add( tt7 );
212
213         TokenTupleSet tts4567d = new TokenTupleSet();
214         tts4567d = tts4567d.add( tt4 ).add( tt5star ).add( tt6star ).add( tt7 );
215
216         test( "tts4567a.equals( tts4567b )?", true, tts4567a.equals( tts4567b ) );
217         test( "tts4567a.hashCode == tts4567b.hashCode?", true, tts4567a.hashCode() == tts4567b.hashCode() );
218
219         test( "tts4567a.equals( tts4567c )?", false, tts4567a.equals( tts4567c ) );
220         test( "tts4567a.hashCode == tts4567c.hashCode?", false, tts4567a.hashCode() == tts4567c.hashCode() );
221
222         test( "tts4567a.equals( tts4567d )?", false, tts4567a.equals( tts4567d ) );
223         test( "tts4567a.hashCode == tts4567d.hashCode?", false, tts4567a.hashCode() == tts4567d.hashCode() );
224
225         tts4567a = tts4567a.increaseArity( new Integer( 6 ) );
226
227         test( "tts4567a.equals( tts4567b )?", false, tts4567a.equals( tts4567b ) );
228         test( "tts4567a.hashCode == tts4567b.hashCode?", false, tts4567a.hashCode() == tts4567b.hashCode() );
229
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() );
233
234         test( "tts4567a.equals( tts4567d )?", false, tts4567a.equals( tts4567d ) );
235         test( "tts4567a.hashCode == tts4567d.hashCode?", false, tts4567a.hashCode() == tts4567d.hashCode() );
236
237         tts4567a = tts4567a.increaseArity( new Integer( 5 ) );
238
239
240         test( "tts4567a.equals( tts4567b )?", false, tts4567a.equals( tts4567b ) );
241         test( "tts4567a.hashCode == tts4567b.hashCode?", false, tts4567a.hashCode() == tts4567b.hashCode() );
242
243         test( "tts4567a.equals( tts4567c )?", false, tts4567a.equals( tts4567c ) );
244         test( "tts4567a.hashCode == tts4567c.hashCode?", false, tts4567a.hashCode() == tts4567c.hashCode() );
245
246         test( "tts4567a.equals( tts4567d )?", true, tts4567a.equals( tts4567d ) );
247         test( "tts4567a.hashCode == tts4567d.hashCode?", true, tts4567a.hashCode() == tts4567d.hashCode() );
248
249         
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 ) ) );
255
256
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();
265
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 ) );
271
272
273         TokenTupleSet ttsAgeTest0a = new TokenTupleSet();
274         ttsAgeTest0a = ttsAgeTest0a.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star );
275
276         TokenTupleSet ttsAgeTest0b = new TokenTupleSet();
277         ttsAgeTest0b = ttsAgeTest0b.add( tt12 ).add( tt52 ).add( tt42 ).add( tt62star );
278
279         test( "ttsAgeTest0a.equals( ttsAgeTest0b )?", false, ttsAgeTest0a.equals( ttsAgeTest0b ) );
280         ttsAgeTest0a = ttsAgeTest0a.ageTokens( as );
281         test( "ttsAgeTest0a.equals( ttsAgeTest0b )?", true,  ttsAgeTest0a.equals( ttsAgeTest0b ) );
282
283
284         TokenTupleSet ttsAgeTest1a = new TokenTupleSet();
285         ttsAgeTest1a = ttsAgeTest1a.add( tt10 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13 );
286
287         TokenTupleSet ttsAgeTest1b = new TokenTupleSet();
288         ttsAgeTest1b = ttsAgeTest1b.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13 );
289
290         test( "ttsAgeTest1a.equals( ttsAgeTest1b )?", false, ttsAgeTest1a.equals( ttsAgeTest1b ) );
291         ttsAgeTest1a = ttsAgeTest1a.ageTokens( as );
292         test( "ttsAgeTest1a.equals( ttsAgeTest1b )?", true,  ttsAgeTest1a.equals( ttsAgeTest1b ) );
293
294
295         TokenTupleSet ttsAgeTest2a = new TokenTupleSet();
296         ttsAgeTest2a = ttsAgeTest2a.add( tt10 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt12 ).add( tt11 );
297
298         TokenTupleSet ttsAgeTest2b = new TokenTupleSet();
299         ttsAgeTest2b = ttsAgeTest2b.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13 ).add( tt12 );
300
301         test( "ttsAgeTest2a.equals( ttsAgeTest2b )?", false, ttsAgeTest2a.equals( ttsAgeTest2b ) );
302         ttsAgeTest2a = ttsAgeTest2a.ageTokens( as );
303         test( "ttsAgeTest2a.equals( ttsAgeTest2b )?", true,  ttsAgeTest2a.equals( ttsAgeTest2b ) );
304
305
306         TokenTupleSet ttsAgeTest3a = new TokenTupleSet();
307         ttsAgeTest3a = ttsAgeTest3a.add( tt13 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt12 ).add( tt10 );
308
309         TokenTupleSet ttsAgeTest3b = new TokenTupleSet();
310         ttsAgeTest3b = ttsAgeTest3b.add( tt11 ).add( tt52 ).add( tt42 ).add( tt62star ).add( tt13star );
311
312         test( "ttsAgeTest3a.equals( ttsAgeTest3b )?", false, ttsAgeTest3a.equals( ttsAgeTest3b ) );
313         ttsAgeTest3a = ttsAgeTest3a.ageTokens( as );
314         test( "ttsAgeTest3a.equals( ttsAgeTest3b )?", true,  ttsAgeTest3a.equals( ttsAgeTest3b ) );
315     }
316
317
318
319
320     public static void garbage() {
321         /*
322
323
324         
325         
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 );
333
334         System.out.println( "tts4 is "+tts4 );
335         System.out.println( "tts5 is "+tts5 );
336         System.out.println( "tts6 is "+tts6 );
337
338         ReachabilitySet rs0 = new ReachabilitySet( tts0 );
339         rs0 = rs0.union( new ReachabilitySet( tts2 ) );
340         rs0 = rs0.union( new ReachabilitySet( tts5 ) );
341
342         System.out.println( "rs0 is "+rs0 );
343
344         TokenTuple tt4 = new TokenTuple( new Integer( 4 ),
345                                          true,
346                                          TokenTuple.ARITY_ONE );
347
348                 TokenTuple tt5 = new TokenTuple( new Integer( 4 ),
349                                          true,
350                                          TokenTuple.ARITY_ONE );
351         
352         TokenTuple tt6 = new TokenTuple( new Integer( 6 ),
353                                          false,
354                                          TokenTuple.ARITY_ONE );
355
356         TokenTupleSet tts7 = new TokenTupleSet( tt4 );
357         //TokenTupleSet tts8 = new TokenTupleSet( tt5 );
358         TokenTupleSet tts9 = new TokenTupleSet( tt1 );
359         tts9 = tts9.union( tts2 );
360
361         ReachabilitySet rs1 = new ReachabilitySet( tts7 );
362         //rs1 = rs1.union( new ReachabilitySet( tts8 ) );
363         rs1 = rs1.union( new ReachabilitySet( tts9 ) );
364
365         System.out.println( "rs1 is "+rs1 );
366
367
368         ChangeTupleSet cts0 = rs0.unionUpArityToChangeSet( rs1 );
369         System.out.println( "cts0 is "+cts0 );
370         
371
372
373         TokenTuple tt00 = new TokenTuple( new Integer( 9 ),
374                                           true,
375                                           TokenTuple.ARITY_ONE );
376
377         TokenTuple tt01 = new TokenTuple( new Integer( 9 ),
378                                           true,
379                                           TokenTuple.ARITY_ONE );
380
381         test( "tt00 equals tt01?", true,  tt00.equals( tt01 ) );        
382         test( "tt00 ==     tt01?", false, tt00 ==      tt01   );        
383
384         tt00 = (TokenTuple) Canonical.makeCanonical( tt00 );
385         tt01 = (TokenTuple) Canonical.makeCanonical( tt01 );
386
387         test( "tt00 equals tt01?", true,  tt00.equals( tt01 ) );        
388         test( "tt00 ==     tt01?", true,  tt00 ==      tt01   );        
389
390
391         TokenTuple tt02 = 
392             (TokenTuple) Canonical.makeCanonical( 
393                                                  new TokenTuple( new Integer( 10 ),
394                                                                  true,
395                                                                  TokenTuple.ARITY_ONE )
396                                                   );
397
398         TokenTuple tt03 = 
399             (TokenTuple) Canonical.makeCanonical( 
400                                                  new TokenTuple( new Integer( 11 ),
401                                                                  true,
402                                                                  TokenTuple.ARITY_ONE )
403                                                   );
404
405         TokenTuple tt04 = 
406             (TokenTuple) Canonical.makeCanonical( 
407                                                  new TokenTuple( new Integer( 12 ),
408                                                                  true,
409                                                                  TokenTuple.ARITY_ONE )
410                                                   );
411
412         TokenTupleSet ttsT00 =
413             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt00 ) );
414
415         TokenTupleSet ttsT01 =
416             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt01 ) );
417
418         TokenTupleSet ttsT02 =
419             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt02 ) );
420
421         TokenTupleSet ttsT03 =
422             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt03 ) );
423
424         TokenTupleSet ttsT04 =
425             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt04 ) );
426
427         TokenTupleSet tts00 = ttsT00.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
428         TokenTupleSet tts01 = ttsT01.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
429
430         test( "tts00 equals tts01?", true,  tts00.equals( tts01 ) );
431
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   );    
435
436         tts00 = (TokenTupleSet) Canonical.makeCanonical( tts00 );
437         tts01 = (TokenTupleSet) Canonical.makeCanonical( tts01 );
438
439         test( "tts00 equals tts01?", true,  tts00.equals( tts01 ) );    
440         test( "tts00 ==     tts01?", true,  tts00 ==      tts01   );
441
442
443         
444         ReachabilitySet rs2 = new ReachabilitySet( tts00 );
445         ReachabilitySet rs3 = new ReachabilitySet( tts01 ).union( rs2 );
446
447         System.out.println( "rs3 is "+rs3 );
448
449         rs3 = rs3.increaseArity( new Integer( 11 ) );
450         System.out.println( "rs3 is "+rs3 );
451         */
452
453         /*
454         TokenTuple tt11 = new TokenTuple( new Integer( 1 ),
455                                          false,
456                                          TokenTuple.ARITY_ONE );
457
458         TokenTuple tt12 = new TokenTuple( new Integer( 2 ),
459                                          true,
460                                          TokenTuple.ARITY_ONE );
461
462         TokenTuple tt13 = new TokenTuple( new Integer( 3 ),
463                                          true,
464                                          TokenTuple.ARITY_MANY );
465
466         TokenTuple tt14 = new TokenTuple( new Integer( 4 ),
467                                          true,
468                                          TokenTuple.ARITY_ONE );
469
470         TokenTuple tt15 = new TokenTuple( new Integer( 5 ),
471                                          true,
472                                          TokenTuple.ARITY_ONE );
473
474         TokenTuple tt16 = new TokenTuple( new Integer( 6 ),
475                                          true,
476                                          TokenTuple.ARITY_MANY );
477         */
478         /*
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 );
486         */
487
488         /*
489         TokenTuple tt21 = new TokenTuple( new Integer( 1 ),
490                                          false,
491                                          TokenTuple.ARITY_ONE );
492
493         TokenTuple tt22 = new TokenTuple( new Integer( 5 ),
494                                          true,
495                                          TokenTuple.ARITY_ONE );
496
497         TokenTuple tt23 = new TokenTuple( new Integer( 3 ),
498                                          true,
499                                          TokenTuple.ARITY_ONE );
500
501         TokenTuple tt24 = new TokenTuple( new Integer( 6 ),
502                                          true,
503                                          TokenTuple.ARITY_MANY );
504
505         TokenTuple tt25 = new TokenTuple( new Integer( 7 ),
506                                          true,
507                                          TokenTuple.ARITY_ONE );
508
509         TokenTuple tt26 = new TokenTuple( new Integer( 8 ),
510                                          true,
511                                          TokenTuple.ARITY_MANY );
512         */
513         /*
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 );              
521
522         TokenTupleSet tts30 = tts10.unionUpArity( tts20 );
523
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 );
528         */
529         /*
530         TokenTupleSet tts40 = new TokenTupleSet();
531         tts40 = tts40.add( tt21 );
532         tts40 = tts40.add( tt23 );
533
534         TokenTupleSet tts50 = new TokenTupleSet();
535         tts50 = tts50.add( tt21 );
536         tts50 = tts50.add( tt23 );
537         tts50 = tts50.add( tt22 );
538
539         TokenTupleSet tts60 = new TokenTupleSet();
540         tts60 = tts60.add( tt21 );
541         tts60 = tts60.add( tt24 );
542
543         TokenTupleSet tts70 = new TokenTupleSet();
544         tts70 = tts70.add( tt11 );
545         tts70 = tts70.add( tt13 );
546         tts70 = tts70.add( tt12 );
547
548         TokenTupleSet tts71 = new TokenTupleSet();
549         tts71 = tts71.add( tt13 );
550         tts71 = tts71.add( tt11 );
551         tts71 = tts71.add( tt15 );
552
553         TokenTupleSet tts72 = new TokenTupleSet();
554         tts72 = tts72.add( tt11 );
555         tts72 = tts72.add( tt16 );
556
557         TokenTupleSet tts73 = new TokenTupleSet();
558         tts73 = tts73.add( tt12 );
559
560         ReachabilitySet rs40 = new ReachabilitySet();
561         rs40 = rs40.add( tts40 );
562         rs40 = rs40.add( tts50 );
563         rs40 = rs40.add( tts60 );
564
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 );
570
571         ReachabilitySet rs60 = rs50.unionUpArity( rs40 );
572
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 );
577         */
578     }
579 }