3 import Analysis.OwnershipAnalysis.*;
10 protected static void test( String test,
14 String outcome = "...\tFAILED";
15 if( expected == result ) {
16 outcome = "...\tpassed";
19 System.out.println( test+" expected "+expected+outcome );
22 public static void main(String args[]) throws Exception {
25 // example test to know the testing routine is correct!
26 test( "4 == 5?", false, 4 == 5 );
27 test( "3 == 3?", true, 3 == 3 );
30 TokenTuple tt0 = new TokenTuple( new Integer( 1 ),
32 TokenTuple.ARITY_ONE );
34 TokenTuple tt1 = new TokenTuple( new Integer( 1 ),
36 TokenTuple.ARITY_ONE );
38 TokenTuple tt2 = new TokenTuple( new Integer( 2 ),
40 TokenTuple.ARITY_ONE );
42 TokenTuple tt3 = new TokenTuple( new Integer( 1 ),
44 TokenTuple.ARITY_MANY );
46 test( "tt0 equals tt1?", true, tt0.equals( tt1 ) );
47 test( "tt1 equals tt0?", true, tt1.equals( tt0 ) );
49 test( "tt0 equals tt2?", false, tt0.equals( tt2 ) );
50 test( "tt2 equals tt0?", false, tt2.equals( tt0 ) );
52 test( "tt0 equals tt3?", false, tt0.equals( tt3 ) );
53 test( "tt3 equals tt0?", false, tt3.equals( tt0 ) );
55 test( "tt2 equals tt3?", false, tt2.equals( tt3 ) );
56 test( "tt3 equals tt2?", false, tt3.equals( tt2 ) );
58 tt1 = tt1.increaseArity();
60 test( "tt1 equals tt2?", false, tt1.equals( tt2 ) );
61 test( "tt2 equals tt1?", false, tt2.equals( tt1 ) );
63 test( "tt1 equals tt3?", true, tt1.equals( tt3 ) );
64 test( "tt3 equals tt1?", true, tt3.equals( tt1 ) );
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 );
75 System.out.println( "tts4 is "+tts4 );
76 System.out.println( "tts5 is "+tts5 );
77 System.out.println( "tts6 is "+tts6 );
79 ReachabilitySet rs0 = new ReachabilitySet( tts0 );
80 rs0 = rs0.union( new ReachabilitySet( tts2 ) );
81 rs0 = rs0.union( new ReachabilitySet( tts5 ) );
83 System.out.println( "rs0 is "+rs0 );
85 TokenTuple tt4 = new TokenTuple( new Integer( 4 ),
87 TokenTuple.ARITY_ONE );
89 TokenTuple tt5 = new TokenTuple( new Integer( 4 ),
91 TokenTuple.ARITY_ONE );
93 TokenTuple tt6 = new TokenTuple( new Integer( 6 ),
95 TokenTuple.ARITY_ONE );
97 TokenTupleSet tts7 = new TokenTupleSet( tt4 );
98 //TokenTupleSet tts8 = new TokenTupleSet( tt5 );
99 TokenTupleSet tts9 = new TokenTupleSet( tt1 );
100 tts9 = tts9.union( tts2 );
102 ReachabilitySet rs1 = new ReachabilitySet( tts7 );
103 //rs1 = rs1.union( new ReachabilitySet( tts8 ) );
104 rs1 = rs1.union( new ReachabilitySet( tts9 ) );
106 System.out.println( "rs1 is "+rs1 );
109 ChangeTupleSet cts0 = rs0.unionUpArityToChangeSet( rs1 );
110 System.out.println( "cts0 is "+cts0 );
114 TokenTuple tt00 = new TokenTuple( new Integer( 9 ),
116 TokenTuple.ARITY_ONE );
118 TokenTuple tt01 = new TokenTuple( new Integer( 9 ),
120 TokenTuple.ARITY_ONE );
122 test( "tt00 equals tt01?", true, tt00.equals( tt01 ) );
123 test( "tt00 == tt01?", false, tt00 == tt01 );
125 tt00 = (TokenTuple) Canonical.makeCanonical( tt00 );
126 tt01 = (TokenTuple) Canonical.makeCanonical( tt01 );
128 test( "tt00 equals tt01?", true, tt00.equals( tt01 ) );
129 test( "tt00 == tt01?", true, tt00 == tt01 );
133 (TokenTuple) Canonical.makeCanonical(
134 new TokenTuple( new Integer( 10 ),
136 TokenTuple.ARITY_ONE )
140 (TokenTuple) Canonical.makeCanonical(
141 new TokenTuple( new Integer( 11 ),
143 TokenTuple.ARITY_ONE )
147 (TokenTuple) Canonical.makeCanonical(
148 new TokenTuple( new Integer( 12 ),
150 TokenTuple.ARITY_ONE )
153 TokenTupleSet ttsT00 =
154 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt00 ) );
156 TokenTupleSet ttsT01 =
157 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt01 ) );
159 TokenTupleSet ttsT02 =
160 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt02 ) );
162 TokenTupleSet ttsT03 =
163 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt03 ) );
165 TokenTupleSet ttsT04 =
166 (TokenTupleSet) Canonical.makeCanonical( new TokenTupleSet( tt04 ) );
168 TokenTupleSet tts00 = ttsT00.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
169 TokenTupleSet tts01 = ttsT01.union( ttsT02.union( ttsT03.union( ttsT04 ) ) );
171 test( "tts00 equals tts01?", true, tts00.equals( tts01 ) );
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 );
177 tts00 = (TokenTupleSet) Canonical.makeCanonical( tts00 );
178 tts01 = (TokenTupleSet) Canonical.makeCanonical( tts01 );
180 test( "tts00 equals tts01?", true, tts00.equals( tts01 ) );
181 test( "tts00 == tts01?", true, tts00 == tts01 );
185 ReachabilitySet rs2 = new ReachabilitySet( tts00 );
186 ReachabilitySet rs3 = new ReachabilitySet( tts01 ).union( rs2 );
188 System.out.println( "rs3 is "+rs3 );
190 rs3 = rs3.increaseArity( new Integer( 11 ) );
191 System.out.println( "rs3 is "+rs3 );
195 TokenTuple tt11 = new TokenTuple( new Integer( 1 ),
197 TokenTuple.ARITY_ONE );
199 TokenTuple tt12 = new TokenTuple( new Integer( 2 ),
201 TokenTuple.ARITY_ONE );
203 TokenTuple tt13 = new TokenTuple( new Integer( 3 ),
205 TokenTuple.ARITY_MANY );
207 TokenTuple tt14 = new TokenTuple( new Integer( 4 ),
209 TokenTuple.ARITY_ONE );
211 TokenTuple tt15 = new TokenTuple( new Integer( 5 ),
213 TokenTuple.ARITY_ONE );
215 TokenTuple tt16 = new TokenTuple( new Integer( 6 ),
217 TokenTuple.ARITY_MANY );
220 TokenTupleSet tts10 = new TokenTupleSet();
221 tts10 = tts10.add( tt11 );
222 tts10 = tts10.add( tt12 );
223 tts10 = tts10.add( tt13 );
224 tts10 = tts10.add( tt14 );
225 tts10 = tts10.add( tt15 );
226 tts10 = tts10.add( tt16 );
229 TokenTuple tt21 = new TokenTuple( new Integer( 1 ),
231 TokenTuple.ARITY_ONE );
233 TokenTuple tt22 = new TokenTuple( new Integer( 5 ),
235 TokenTuple.ARITY_ONE );
237 TokenTuple tt23 = new TokenTuple( new Integer( 3 ),
239 TokenTuple.ARITY_ONE );
241 TokenTuple tt24 = new TokenTuple( new Integer( 6 ),
243 TokenTuple.ARITY_MANY );
245 TokenTuple tt25 = new TokenTuple( new Integer( 7 ),
247 TokenTuple.ARITY_ONE );
249 TokenTuple tt26 = new TokenTuple( new Integer( 8 ),
251 TokenTuple.ARITY_MANY );
254 TokenTupleSet tts20 = new TokenTupleSet();
255 tts20 = tts20.add( tt21 );
256 tts20 = tts20.add( tt22 );
257 tts20 = tts20.add( tt23 );
258 tts20 = tts20.add( tt24 );
259 tts20 = tts20.add( tt25 );
260 tts20 = tts20.add( tt26 );
262 TokenTupleSet tts30 = tts10.unionUpArity( tts20 );
264 System.out.println( "tts10 is "+tts10 );
265 System.out.println( "tts20 is "+tts20 );
266 System.out.println( "" );
267 System.out.println( "tts30 is "+tts30 );
270 TokenTupleSet tts40 = new TokenTupleSet();
271 tts40 = tts40.add( tt21 );
272 tts40 = tts40.add( tt23 );
274 TokenTupleSet tts50 = new TokenTupleSet();
275 tts50 = tts50.add( tt21 );
276 tts50 = tts50.add( tt23 );
277 tts50 = tts50.add( tt22 );
279 TokenTupleSet tts60 = new TokenTupleSet();
280 tts60 = tts60.add( tt21 );
281 tts60 = tts60.add( tt24 );
283 TokenTupleSet tts70 = new TokenTupleSet();
284 tts70 = tts70.add( tt11 );
285 tts70 = tts70.add( tt13 );
286 tts70 = tts70.add( tt12 );
288 TokenTupleSet tts71 = new TokenTupleSet();
289 tts71 = tts71.add( tt13 );
290 tts71 = tts71.add( tt11 );
291 tts71 = tts71.add( tt15 );
293 TokenTupleSet tts72 = new TokenTupleSet();
294 tts72 = tts72.add( tt11 );
295 tts72 = tts72.add( tt16 );
297 TokenTupleSet tts73 = new TokenTupleSet();
298 tts73 = tts73.add( tt12 );
300 ReachabilitySet rs40 = new ReachabilitySet();
301 rs40 = rs40.add( tts40 );
302 rs40 = rs40.add( tts50 );
303 rs40 = rs40.add( tts60 );
305 ReachabilitySet rs50 = new ReachabilitySet();
306 rs50 = rs50.add( tts70 );
307 rs50 = rs50.add( tts71 );
308 rs50 = rs50.add( tts72 );
309 rs50 = rs50.add( tts73 );
311 ReachabilitySet rs60 = rs50.unionUpArity( rs40 );
313 System.out.println( "rs40 is "+rs40 );
314 System.out.println( "rs50 is "+rs50 );
315 System.out.println( "" );
316 System.out.println( "rs60 is "+rs60 );