3 import Analysis.OwnershipAnalysis.*;
8 ///////////////////////////////////////////
10 // The testing of the ownership graph
11 // components relies on the testTokens
12 // test in another directory. Those classes
13 // are assumed to be fully tested here.
15 ///////////////////////////////////////////
20 static boolean aTestFailed;
22 protected static void test( String test,
26 if( expected == result ) {
27 outcome = "...\tpassed";
29 outcome = "...\tFAILED";
33 System.out.println( test+" expect "+expected+outcome );
36 public static void main(String args[]) throws Exception {
40 System.out.println( "---------------------------------------" );
42 System.out.println( "---------------------------------------" );
44 System.out.println( "---------------------------------------" );
47 System.out.println( "<><><><><><><><><><><><><><><><><><><><><><><><>" );
48 System.out.println( "<><><> WARNING: At least one test failed. <><><>" );
49 System.out.println( "<><><><><><><><><><><><><><><><><><><><><><><><>" );
51 System.out.println( "<><> All tests passed. <><>" );
55 public static void testExample() {
56 // example test to know the testing routine is correct!
57 test( "4 == 5?", false, 4 == 5 );
58 test( "3 == 3?", true, 3 == 3 );
62 public static void testNodesAndEdges() {
63 TempDescriptor lnTestA = new TempDescriptor( "lnTestA" );
64 TempDescriptor lnTestB = new TempDescriptor( "lnTestB" );
66 LabelNode ln0 = new LabelNode( lnTestA );
67 LabelNode ln1 = new LabelNode( lnTestA );
68 LabelNode ln2 = new LabelNode( lnTestB );
70 test( "ln0 equals ln1?", true, ln0.equals( ln1 ) );
71 test( "ln1 equals ln0?", true, ln1.equals( ln0 ) );
72 test( "ln0 equals ln2?", false, ln0.equals( ln2 ) );
73 test( "ln2 equals ln1?", false, ln2.equals( ln1 ) );
76 public HeapRegionNode( Integer id,
77 boolean isSingleObject,
80 AllocationSite allocSite,
81 ReachabilitySet alpha,
85 TokenTuple tt00 = new TokenTuple( new Integer( 00 ), false, TokenTuple.ARITY_ONE );
86 TokenTuple tt01 = new TokenTuple( new Integer( 01 ), false, TokenTuple.ARITY_ONE );
87 TokenTupleSet tts0 = new TokenTupleSet( tt00 ).add( tt01 );
88 ReachabilitySet a0 = new ReachabilitySet( tts0 );
90 HeapRegionNode hrn00 = new HeapRegionNode( new Integer( 00 ),
98 HeapRegionNode hrn01 = new HeapRegionNode( new Integer( 01 ),
106 HeapRegionNode hrn02 = new HeapRegionNode( new Integer( 01 ),
114 test( "hrn01.equals( hrn00 )?", false, hrn01.equals( hrn00 ) );
115 test( "hrn01.equals( hrn02 )?", true, hrn01.equals( hrn02 ) );
117 test( "hrn01.hashCode() == hrn00.hashCode()?", false, hrn01.hashCode() == hrn00.hashCode() );
118 test( "hrn01.hashCode() == hrn02.hashCode()?", true, hrn01.hashCode() == hrn02.hashCode() );
120 HeapRegionNode hrn03 = new HeapRegionNode( new Integer( 00 ),
130 public ReferenceEdge( OwnershipNode src,
132 FieldDescriptor fieldDesc,
133 boolean isInitialParamReflexive,
134 ReachabilitySet beta ) {
137 ReferenceEdge edge0 = new ReferenceEdge( ln0, hrn00, null, false, a0 );
138 ReferenceEdge edge1 = new ReferenceEdge( ln0, hrn00, null, false, a0 );
139 ReferenceEdge edge2 = new ReferenceEdge( hrn01, hrn00, null, false, a0 );
140 ReferenceEdge edge3 = new ReferenceEdge( hrn02, hrn03, null, false, a0 );
141 ReferenceEdge edge4 = new ReferenceEdge( hrn01, hrn00, null, false, a0 );
143 test( "edge0.equals( edge1 )?", true, edge0.equals( edge1 ) );
144 test( "edge0.hashCode() == edge1.hashCode()?", true, edge0.hashCode() == edge1.hashCode() );
146 test( "edge2.equals( edge1 )?", false, edge2.equals( edge1 ) );
147 test( "edge2.hashCode() == edge1.hashCode()?", false, edge2.hashCode() == edge1.hashCode() );
149 test( "edge2.equals( edge3 )?", false, edge2.equals( edge3 ) );
150 // a collision, because even though src and dst are not same objects, they are equivalent and
151 // produce the same hashcode
152 //test( "edge2.hashCode() == edge3.hashCode()?", false, edge2.hashCode() == edge3.hashCode() );
154 test( "edge2.equals( edge4 )?", true, edge2.equals( edge4 ) );
155 test( "edge2.hashCode() == edge4.hashCode()?", true, edge2.hashCode() == edge4.hashCode() );
160 public static void testGraphs() {
161 // test equality of label objects that are logically
162 // same/different but all separate objects
163 // these tests show how a label node object or other
164 // ownership graph element can be equivalent logically
165 // to a different object in another graph
166 TempDescriptor lnTestA = new TempDescriptor( "lnTestA" );
167 TempDescriptor lnTestB = new TempDescriptor( "lnTestB" );
169 LabelNode ln0 = new LabelNode( lnTestA );
170 LabelNode ln1 = new LabelNode( lnTestA );
171 LabelNode ln2 = new LabelNode( lnTestB );
173 test( "ln0 equals ln1?", true, ln0.equals( ln1 ) );
174 test( "ln1 equals ln0?", true, ln1.equals( ln0 ) );
175 test( "ln0 equals ln2?", false, ln0.equals( ln2 ) );
176 test( "ln2 equals ln1?", false, ln2.equals( ln1 ) );
179 // ownership graphs g3 and g4 are equivalent
180 // graphs as specified in OwnershipGraph.java,
181 // just built from different objects that contain the
182 // equivalent values and merged in a different
184 int allocationDepth = 3;
186 OwnershipGraph g0 = new OwnershipGraph( allocationDepth );
187 TempDescriptor g0tdp1 = new TempDescriptor( "p1" );
188 TempDescriptor g0tdx = new TempDescriptor( "x" );
189 g0.assignParameterAllocationToTemp( true, g0tdp1, new Integer( 0 ) );
190 g0.assignTempYToTempX ( g0tdp1, g0tdx );
192 OwnershipGraph g1 = new OwnershipGraph( allocationDepth );
193 TempDescriptor g1tdp2 = new TempDescriptor( "p2" );
194 TempDescriptor g1tdy = new TempDescriptor( "y" );
195 TempDescriptor g1tdz = new TempDescriptor( "z" );
196 g1.assignParameterAllocationToTemp( true, g1tdp2, new Integer( 0 ) );
197 g1.assignTempYToTempX ( g1tdp2, g1tdy );
198 g1.assignTempYFieldFToTempX ( g1tdp2, null, g1tdz );
200 OwnershipGraph g2 = new OwnershipGraph( allocationDepth );
201 TempDescriptor g2tdp3 = new TempDescriptor( "p3" );
202 TempDescriptor g2tdp4 = new TempDescriptor( "p4" );
203 TempDescriptor g2tdw = new TempDescriptor( "w" );
204 g2.assignParameterAllocationToTemp( true, g2tdp3, new Integer( 0 ) );
205 g2.assignParameterAllocationToTemp( true, g2tdp4, new Integer( 1 ) );
206 g2.assignTempYToTempX ( g2tdp4, g2tdw );
207 g2.assignTempYToTempXFieldF ( g2tdw, g2tdp3, null );
209 OwnershipGraph g3 = new OwnershipGraph( allocationDepth );
214 OwnershipGraph g4 = new OwnershipGraph( allocationDepth );
219 OwnershipGraph g5 = new OwnershipGraph( allocationDepth );
220 TempDescriptor g5tdp1 = new TempDescriptor( "p1" );
221 TempDescriptor g5tdy = new TempDescriptor( "y" );
222 g5.assignParameterAllocationToTemp( true, g5tdp1, new Integer( 0 ) );
223 g5.assignTempYToTempX ( g5tdp1, g5tdy );
227 g3.writeGraph( "g3", true, false, false, false );
228 g4.writeGraph( "g4", true, false, false, false );
229 } catch( IOException e ) {}
232 test( "g0 equals to g1?", false, g0.equals( g1 ) );
233 test( "g1 equals to g0?", false, g1.equals( g0 ) );
235 test( "g0 equals to g2?", false, g0.equals( g2 ) );
236 test( "g2 equals to g0?", false, g2.equals( g0 ) );
238 test( "g1 equals to g2?", false, g1.equals( g2 ) );
239 test( "g2 equals to g1?", false, g2.equals( g1 ) );
241 test( "g3 equals to g0?", false, g3.equals( g0 ) );
242 test( "g3 equals to g1?", false, g3.equals( g1 ) );
243 test( "g3 equals to g2?", false, g3.equals( g2 ) );
245 test( "g4 equals to g0?", false, g4.equals( g0 ) );
246 test( "g4 equals to g1?", false, g4.equals( g1 ) );
247 test( "g4 equals to g2?", false, g4.equals( g2 ) );
249 test( "g3 equals to g4?", true, g3.equals( g4 ) );
250 test( "g4 equals to g3?", true, g4.equals( g3 ) );
252 test( "g0 equals to g5?", false, g0.equals( g5 ) );
253 test( "g5 equals to g0?", false, g5.equals( g0 ) );