Added reachability classes, all of which are extensions of Canonical such that
[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     protected static void test( String test,
11                                 boolean expected,
12                                 boolean result ) {
13
14         String outcome = "...\tFAILED";
15         if( expected == result ) {
16             outcome = "...\tpassed";
17         }
18         
19         System.out.println( test+" expected "+expected+outcome );
20     }
21
22     public static void main(String args[]) throws Exception {
23
24         
25         // example test to know the testing routine is correct!
26         test( "4 == 5?", false, 4 == 5 );
27         test( "3 == 3?", true,  3 == 3 );
28
29
30         TokenTuple tt0 = new TokenTuple( new Integer( 1 ),
31                                          true,
32                                          TokenTuple.ARITY_ONE );
33
34         TokenTuple tt1 = new TokenTuple( new Integer( 1 ),
35                                          true,
36                                          TokenTuple.ARITY_ONE );
37
38         TokenTuple tt2 = new TokenTuple( new Integer( 2 ),
39                                          true,
40                                          TokenTuple.ARITY_ONE );
41
42         TokenTuple tt3 = new TokenTuple( new Integer( 1 ),
43                                          true,
44                                          TokenTuple.ARITY_MANY );
45
46         test( "tt0 equals tt1?", true,  tt0.equals( tt1 ) );
47         test( "tt1 equals tt0?", true,  tt1.equals( tt0 ) );
48
49         test( "tt0 equals tt2?", false, tt0.equals( tt2 ) );
50         test( "tt2 equals tt0?", false, tt2.equals( tt0 ) );
51
52         test( "tt0 equals tt3?", false, tt0.equals( tt3 ) );
53         test( "tt3 equals tt0?", false, tt3.equals( tt0 ) );
54
55         test( "tt2 equals tt3?", false, tt2.equals( tt3 ) );
56         test( "tt3 equals tt2?", false, tt3.equals( tt2 ) );
57
58         tt1 = tt1.increaseArity();
59
60         test( "tt1 equals tt2?", false, tt1.equals( tt2 ) );
61         test( "tt2 equals tt1?", false, tt2.equals( tt1 ) );
62
63         test( "tt1 equals tt3?", true,  tt1.equals( tt3 ) );
64         test( "tt3 equals tt1?", true,  tt3.equals( tt1 ) );
65         
66         
67         TokenTupleSet tts0 = new TokenTupleSet( tt0 );
68         TokenTupleSet tts1 = new TokenTupleSet( tt1 );
69         TokenTupleSet tts2 = new TokenTupleSet( tt2 );
70         TokenTupleSet tts3 = new TokenTupleSet( tt3 );
71         TokenTupleSet tts4 = tts1.union( tts3 );
72         TokenTupleSet tts5 = tts0.union( tts2 );
73         TokenTupleSet tts6 = tts1.union( tts1 );
74
75         System.out.println( "tts4 is "+tts4 );
76         System.out.println( "tts5 is "+tts5 );
77         System.out.println( "tts6 is "+tts6 );
78
79         ReachabilitySet rs0 = new ReachabilitySet( tts0 );
80         rs0 = rs0.union( new ReachabilitySet( tts2 ) );
81         rs0 = rs0.union( new ReachabilitySet( tts5 ) );
82
83         System.out.println( "rs0 is "+rs0 );
84
85         TokenTuple tt4 = new TokenTuple( new Integer( 4 ),
86                                          true,
87                                          TokenTuple.ARITY_ONE );
88
89                 TokenTuple tt5 = new TokenTuple( new Integer( 4 ),
90                                          true,
91                                          TokenTuple.ARITY_ONE );
92         
93         TokenTuple tt6 = new TokenTuple( new Integer( 6 ),
94                                          false,
95                                          TokenTuple.ARITY_ONE );
96
97         TokenTupleSet tts7 = new TokenTupleSet( tt4 );
98         //TokenTupleSet tts8 = new TokenTupleSet( tt5 );
99         TokenTupleSet tts9 = new TokenTupleSet( tt1 );
100         tts9 = tts9.union( tts2 );
101
102         ReachabilitySet rs1 = new ReachabilitySet( tts7 );
103         //rs1 = rs1.union( new ReachabilitySet( tts8 ) );
104         rs1 = rs1.union( new ReachabilitySet( tts9 ) );
105
106         System.out.println( "rs1 is "+rs1 );
107
108
109         ChangeTupleSet cts0 = rs0.unionUpArity( rs1 );
110         System.out.println( "cts0 is "+cts0 );
111         
112
113
114         TokenTuple tt00 = new TokenTuple( new Integer( 9 ),
115                                           true,
116                                           TokenTuple.ARITY_ONE );
117
118         TokenTuple tt01 = new TokenTuple( new Integer( 9 ),
119                                           true,
120                                           TokenTuple.ARITY_ONE );
121
122         test( "tt00 equals tt01?", true,  tt00.equals( tt01 ) );        
123         test( "tt00 ==     tt01?", false, tt00 ==      tt01   );        
124
125         tt00 = (TokenTuple) Canonical.makeCanonical( tt00 );
126         tt01 = (TokenTuple) Canonical.makeCanonical( tt01 );
127
128         test( "tt00 equals tt01?", true,  tt00.equals( tt01 ) );        
129         test( "tt00 ==     tt01?", true,  tt00 ==      tt01   );        
130
131
132         TokenTuple tt02 = 
133             (TokenTuple) Canonical.makeCanonical( 
134                                                  new TokenTuple( new Integer( 10 ),
135                                                                  true,
136                                                                  TokenTuple.ARITY_ONE )
137                                                   );
138
139         TokenTuple tt03 = 
140             (TokenTuple) Canonical.makeCanonical( 
141                                                  new TokenTuple( new Integer( 11 ),
142                                                                  true,
143                                                                  TokenTuple.ARITY_ONE )
144                                                   );
145
146         TokenTuple tt04 = 
147             (TokenTuple) Canonical.makeCanonical( 
148                                                  new TokenTuple( new Integer( 12 ),
149                                                                  true,
150                                                                  TokenTuple.ARITY_ONE )
151                                                   );
152
153         TokenTupleSet ttsT00 =
154             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt00 ) );
155
156         TokenTupleSet ttsT01 =
157             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt01 ) );
158
159         TokenTupleSet ttsT02 =
160             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt02 ) );
161
162         TokenTupleSet ttsT03 =
163             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt03 ) );
164
165         TokenTupleSet ttsT04 =
166             (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt04 ) );
167
168         TokenTupleSet tts00 = ttsT00.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
169         TokenTupleSet tts01 = ttsT01.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
170
171         test( "tts00 equals tts01?", true,  tts00.equals( tts01 ) );
172
173         // It's OK that this one turns out true--I changed the union operator
174         // to automatically canonicalize stuff!
175         test( "tts00 ==     tts01?", false, tts00 ==      tts01   );    
176
177         tts00 = (TokenTupleSet) Canonical.makeCanonical( tts00 );
178         tts01 = (TokenTupleSet) Canonical.makeCanonical( tts01 );
179
180         test( "tts00 equals tts01?", true,  tts00.equals( tts01 ) );    
181         test( "tts00 ==     tts01?", true,  tts00 ==      tts01   );    
182     }
183 }