1e03e52cbf3aebf706f19fdf09824b633e662e57
[IRC.git] / Robust / src / Tests / OwnershipAnalysisTest / test02 / test02.java
1 public class Parameter {
2     flag w;
3     int a, b;
4     Parameter f, g;
5     Penguin penguin;
6
7     public Parameter() { a = 0; b = 0; f = null; g = null; }
8
9     public void bar() { foo(); }
10     public void foo() { bar(); }
11 }
12
13 public class Penguin {
14     int x, y;
15
16     public Penguin() { x = 0; y = 0; }
17
18     public void bar() { x = 1; }
19 }
20
21 task Startup( StartupObject s{ initialstate } ) {
22
23     /*
24     Parameter p = new Parameter(){!w};
25     p.foo();
26
27     Penguin g = new Penguin();
28     g.bar();
29     */
30
31     Parameter p;
32
33     for( int i = 0; i < 3; ++i ) {
34         p = new Parameter();
35         p.penguin = new Penguin();
36         p.penguin.bar();
37     }
38
39     p = null;
40
41     taskexit( s{ !initialstate } );
42 }
43
44 /*
45 task aliasFromObjectAssignment
46     ( Parameter p1{!w}, Parameter p2{!w} ) {
47     
48     p1.f = p2.g;
49
50     taskexit( p1{w}, p2{w} );
51 }
52
53 task noAliasFromPrimitiveAssignment
54     ( Parameter p1{!w}, Parameter p2{!w} ) {
55     
56     p1.a = p2.b;
57
58     taskexit( p1{w}, p2{w} );
59 }
60
61 task aliasWithTwoLinks
62     ( Parameter p1{!w}, Parameter p2{!w} ) {
63     
64     Parameter j = p1.f;
65     p2.f = j;
66
67     taskexit( p1{w}, p2{w} );
68 }
69
70 task aliasWithThreeLinks
71     ( Parameter p1{!w}, Parameter p2{!w} ) {
72     
73     Parameter j = p1.f;
74     Parameter k = j;
75     p2.f = k;
76
77     taskexit( p1{w}, p2{w} );
78 }
79
80 task noAliasBreakLinks
81     ( Parameter p1{!w}, Parameter p2{!w} ) {
82     
83     Parameter j = p1.f;
84     Parameter k = j;
85     k = p2.f;
86     p2.f = k;
87
88     taskexit( p1{w}, p2{w} );
89 }
90
91 task possibleAliasConditional
92     ( Parameter p1{!w}, Parameter p2{!w} ) {
93     
94     Parameter y;
95
96     if( p1.a == 0 ) {
97         y = p1.f;
98     } else {
99         y = p2.f;
100     }
101
102     p2.g = y;
103
104     taskexit( p1{w}, p2{w} );
105 }
106 */
107
108 /*
109 task bunchOfPaths
110     ( Parameter p1{!w}, Parameter p2{!w} ) {
111
112     Parameter y;
113
114     for( int i =0; i < 100; ++i ) {
115
116         if( y == p1 ) {
117             Parameter z;
118
119             for( int j = 0; i < 50; ++j ) {
120                 if( z == y ) {
121                     p1.f = y;
122                 } else {
123                     z = p2.g;
124                 }
125
126                 p1.f = z;
127             }
128
129             y = p1.g;
130         } else {
131
132             p2.f = y;
133         }
134     }
135
136     p1.f = p2.g;
137
138
139     taskexit( p1{w}, p2{w} );
140 }
141 */
142
143 /*
144 task literalTest( Parameter p1{!w} ) {
145     Parameter x = null;
146     int y = 5;
147     String s = "Dude";
148
149     taskexit( p1{w} );
150 }
151
152 task newNoAlias
153     ( Parameter p1{!w}, Parameter p2{!w} ) {
154
155     for( int i = 0; i < 1; ++i ) {
156         p1.f = new Parameter();
157     }
158
159     taskexit( p1{w}, p2{w} );
160 }
161
162 task newPossibleAlias
163     ( Parameter p1{!w}, Parameter p2{!w} ) {
164
165     Parameter x, y;
166
167     for( int i = 0; i < 1; ++i ) {
168         p1.f = new Parameter();
169         if( true ) {
170             x = p1.f;
171         } else {
172             y = p1.f;
173         }
174     }
175
176     p2.f = y;
177
178     taskexit( p1{w}, p2{w} );
179 }
180 */