start of new file
[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 task bunchOfPaths
108     ( Parameter p1{!w}, Parameter p2{!w} ) {
109
110     Parameter y;
111
112     for( int i =0; i < 100; ++i ) {
113
114         if( y == p1 ) {
115             Parameter z;
116
117             for( int j = 0; i < 50; ++j ) {
118                 if( z == y ) {
119                     p1.f = y;
120                 } else {
121                     z = p2.g;
122                 }
123
124                 p1.f = z;
125             }
126
127             y = p1.g;
128         } else {
129
130             p2.f = y;
131         }
132     }
133
134     p1.f = p2.g;
135
136
137     taskexit( p1{w}, p2{w} );
138 }
139
140 task literalTest( Parameter p1{!w} ) {
141     Parameter x = null;
142     int y = 5;
143     String s = "Dude";
144
145     taskexit( p1{w} );
146 }
147
148 task newNoAlias
149     ( Parameter p1{!w}, Parameter p2{!w} ) {
150
151     for( int i = 0; i < 1; ++i ) {
152         p1.f = new Parameter();
153     }
154
155     taskexit( p1{w}, p2{w} );
156 }
157
158 task newPossibleAlias
159     ( Parameter p1{!w}, Parameter p2{!w} ) {
160
161     Parameter x, y;
162
163     for( int i = 0; i < 1; ++i ) {
164         p1.f = new Parameter();
165         if( true ) {
166             x = p1.f;
167         } else {
168             y = p1.f;
169         }
170     }
171
172     p2.f = y;
173
174     taskexit( p1{w}, p2{w} );
175 }