aboutsummaryrefslogtreecommitdiffstats
path: root/tests/pureJava/MultiTernaryOps.java
blob: 384bc1c8061881dc87cd6b6116f35f0803c894a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
import org.aspectj.testing.*;

public class MultiTernaryOps {
    public static void main(String[] args) {
        new MultiTernaryOps().realMain(args);
    }

    int c = 0;
    int z = 0;
    public void realMain(String[] args) {

        int SIZE = 1000;
        int[] xs = new int[SIZE];
        boolean b = true;
        int e = 123;
        Object o = null;
        Object ot = new t();

        // b?e:e
        c(1); xs[c++] = t(0) ? 1 : 2; e();
        c(1); xs[c++] = f(0) ? 2 : 1; e();

        // b ? (b : e : e) : e
        c(2); xs[c++] = t(0) ? f( 1) ? 2 : 1 : 3; e();
        c(2); xs[c++] = t(0) ? (f( 1) ? 2 : 1) : 3; e();

        // b ? ( b : e : e) : e
        c(1); xs[c++] = f(0) ? x() ? 2 : 3 : 1; e();
        c(1); xs[c++] = f(0) ? (x() ? 2 : 3) : 1; e();
        
        // b ? (b ? (b ? e : e) : e) : e
        c(3); xs[c++] = t(0) ? (t(1) ? (t(2) ? 1 : 2) : 3) : 4; e();
        c(3); xs[c++] = t(0) ?  t(1) ? (t(2) ? 1 : 2) : 3  : 4; e();
        c(3); xs[c++] = t(0) ?  t(1) ?  t(2) ? 1 : 2  : 3  : 4; e();

        c(1); xs[c++] = f(0) ? (x() ? (x() ? 4 : 2) : 3) : 1; e();
        c(1); xs[c++] = f(0) ?  x() ? (x() ? 4 : 2) : 3  : 1; e();
        c(1); xs[c++] = f(0) ?  x() ?  x() ? 4 : 2  : 3  : 1; e();

        c(2); xs[c++] = t(0) ? (f(1) ? (x() ? 2 : 3) : 1) : 4; e();
        c(2); xs[c++] = t(0) ?  f(1) ? (x() ? 2 : 3) : 1  : 4; e();
        c(2); xs[c++] = t(0) ?  f(1) ?  x() ? 2 : 3  : 1  : 4; e();

        c(3); xs[c++] = t(0) ? (t(1) ? (f(2) ? 2 : 1) : 3) : 4; e();
        c(3); xs[c++] = t(0) ?  t(1) ? (f(2) ? 2 : 1) : 3  : 4; e();
        c(3); xs[c++] = t(0) ?  t(1) ?  f(2) ? 2 : 1  : 3  : 4; e();

        // b ? (b ? (b ? (b ? e : e) : e) : e) : e
        c(4); xs[c++] = t(0) ? (t(1) ? (t(2) ? (t(3) ? 1 : 2) : 3) : 4) : 5; e();
        c(4); xs[c++] = t(0) ?  t(1) ? (t(2) ? (t(3) ? 1 : 2) : 3) : 4  : 5; e();
        c(4); xs[c++] = t(0) ?  t(1) ?  t(2) ? (t(3) ? 1 : 2) : 3  : 4  : 5; e();
        c(4); xs[c++] = t(0) ?  t(1) ?  t(2) ?  t(3) ? 1 : 2  : 3  : 4  : 5; e();

        c(1); xs[c++] = f(0) ? (x() ? (x() ? (x() ? 5 : 2) : 3) : 4) : 1; e();
        c(1); xs[c++] = f(0) ?  x() ? (x() ? (x() ? 5 : 2) : 3) : 4  : 1; e();
        c(1); xs[c++] = f(0) ?  x() ?  x() ? (x() ? 5 : 2) : 3  : 4  : 1; e();
        c(1); xs[c++] = f(0) ?  x() ?  x() ?  x() ? 5 : 2  : 3  : 4  : 1; e();

        c(2); xs[c++] = t(0) ? (f(1) ? (x() ? (x() ? 4 : 2) : 3) : 1) : 5; e();
        c(2); xs[c++] = t(0) ?  f(1) ? (x() ? (x() ? 4 : 2) : 3) : 1  : 5; e();
        c(2); xs[c++] = t(0) ?  f(1) ?  x() ? (x() ? 4 : 2) : 3  : 1  : 5; e();
        c(2); xs[c++] = t(0) ?  f(1) ?  x() ?  x() ? 4 : 2  : 3  : 1  : 5; e();

        c(3); xs[c++] = t(0) ? (t(1) ? (f(2) ? (x() ? 3 : 2) : 1) : 4) : 5; e();
        c(3); xs[c++] = t(0) ?  t(1) ? (f(2) ? (x() ? 3 : 2) : 1) : 4  : 5; e();
        c(3); xs[c++] = t(0) ?  t(1) ?  f(2) ? (x() ? 3 : 2) : 1  : 4  : 5; e();
        c(3); xs[c++] = t(0) ?  t(1) ?  f(2) ?  x() ? 3 : 2  : 1  : 4  : 5; e();

        c(4); xs[c++] = t(0) ? (t(1) ? (t(2) ? (f(3) ? 2 : 1) : 3) : 4) : 5; e();
        c(4); xs[c++] = t(0) ?  t(1) ? (t(2) ? (f(3) ? 2 : 1) : 3) : 4  : 5; e();
        c(4); xs[c++] = t(0) ?  t(1) ?  t(2) ? (f(3) ? 2 : 1) : 3  : 4  : 5; e();
        c(4); xs[c++] = t(0) ?  t(1) ?  t(2) ?  f(3) ? 2 : 1  : 3  : 4  : 5; e();

        // b ? e : (b ? e : e)
        c(1); xs[c++] = t(0) ? 1 : (x() ? 2 : 3); e();
        c(1); xs[c++] = t(0) ? 1 :  x() ? 2 : 3 ; e();

        c(2); xs[c++] = f(0) ? 2 : (t(1) ? 1 : 3); e();
        c(2); xs[c++] = f(0) ? 2 :  t(1) ? 1 : 3 ; e();

        c(2); xs[c++] = f(0) ? 2 : (f(1) ? 3 : 1); e();
        c(2); xs[c++] = f(0) ? 2 :  f(1) ? 3 : 1 ; e();

        // b ? e : (b ? e : (b ? e : e))
        c(1); xs[c++] = t(0) ? 1 : (x() ? 2 : (x() ? 3 : 4)); e();
        c(1); xs[c++] = t(0) ? 1 :  x() ? 2 : (x() ? 3 : 4) ; e();
        c(1); xs[c++] = t(0) ? 1 :  x() ? 2 :  x() ? 3 : 4  ; e();

        c(2); xs[c++] = f(0) ? 2 : (t(1) ? 1 : (x() ? 3 : 4)); e();
        c(2); xs[c++] = f(0) ? 2 :  t(1) ? 1 : (x() ? 3 : 4) ; e();
        c(2); xs[c++] = f(0) ? 2 :  t(1) ? 1 :  x() ? 3 : 4  ; e();

        c(3); xs[c++] = f(0) ? 2 : (f(1) ? 3 : (t(2) ? 1 : 4)); e();
        c(3); xs[c++] = f(0) ? 2 :  f(1) ? 3 : (t(2) ? 1 : 4) ; e();
        c(3); xs[c++] = f(0) ? 2 :  f(1) ? 3 :  t(2) ? 1 : 4  ; e();

        c(3); xs[c++] = f(0) ? 2 : (f(1) ? 3 : (f(2) ? 4 : 1)); e();
        c(3); xs[c++] = f(0) ? 2 :  f(1) ? 3 : (f(2) ? 4 : 1) ; e();
        c(3); xs[c++] = f(0) ? 2 :  f(1) ? 3 :  f(2) ? 4 : 1  ; e();

        // b ? (b ? (b ? e : e) : (b ? e : e)) : e
        c(3); xs[c++] = t(0) ? (t(1) ? (t(2) ? 1 : 2) : (x() ? 3 : 4)) : 5; e();
        c(3); xs[c++] = t(0) ? (t(1) ?  t(2) ? 1 : 2  : (x() ? 3 : 4)) : 5; e();
        c(3); xs[c++] = t(0) ? (t(1) ? (t(2) ? 1 : 2) :  x() ? 3 : 4 ) : 5; e();
        c(3); xs[c++] = t(0) ?  t(1) ? (t(2) ? 1 : 2) :  x() ? 3 : 4   : 5; e();
        c(3); xs[c++] = t(0) ? (t(1) ?  t(2) ? 1 : 2  :  x() ? 3 : 4 ) : 5; e();
        c(3); xs[c++] = t(0) ?  t(1) ?  t(2) ? 1 : 2  :  x() ? 3 : 4   : 5; e();

        // b?e:e
        c(); xs[c++] = ot instanceof t ? 1 : 2; e();
        c(); xs[c++] = o instanceof t ? 2 : 1; e();

        // b ? (b : e : e) : e
        c(); xs[c++] = ot instanceof t ? o instanceof t  ? 2 : 1 : 3; e();
        c(); xs[c++] = ot instanceof t ? (o instanceof t  ? 2 : 1) : 3; e();

        // b ? ( b : e : e) : e
        c(); xs[c++] = o instanceof t ? x() ? 2 : 3 : 1; e();
        c(); xs[c++] = o instanceof t ? (x() ? 2 : 3) : 1; e();

        // b ? (b ? (b ? e : e) : e) : e
        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : 3) : 4; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ? (ot instanceof t ? 1 : 2) : 3  : 4; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  ot instanceof t ? 1 : 2  : 3  : 4; e();

        c(); xs[c++] = o instanceof t ? (x() ? (x() ? 4 : 2) : 3) : 1; e();
        c(); xs[c++] = o instanceof t ?  x() ? (x() ? 4 : 2) : 3  : 1; e();
        c(); xs[c++] = o instanceof t ?  x() ?  x() ? 4 : 2  : 3  : 1; e();

        c(); xs[c++] = ot instanceof t ? (o instanceof t ? (x() ? 2 : 3) : 1) : 4; e();
        c(); xs[c++] = ot instanceof t ?  o instanceof t ? (x() ? 2 : 3) : 1  : 4; e();
        c(); xs[c++] = ot instanceof t ?  o instanceof t ?  x() ? 2 : 3  : 1  : 4; e();

        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (o instanceof t ? 2 : 1) : 3) : 4; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ? (o instanceof t ? 2 : 1) : 3  : 4; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  o instanceof t ? 2 : 1  : 3  : 4; e();

        // b ? (b ? (b ? (b ? e : e) : e) : e) : e
        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : 3) : 4) : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : 3) : 4  : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  ot instanceof t ? (ot instanceof t ? 1 : 2) : 3  : 4  : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  ot instanceof t ?  ot instanceof t ? 1 : 2  : 3  : 4  : 5; e();

        c(); xs[c++] = o instanceof t ? (x() ? (x() ? (x() ? 5 : 2) : 3) : 4) : 1; e();
        c(); xs[c++] = o instanceof t ?  x() ? (x() ? (x() ? 5 : 2) : 3) : 4  : 1; e();
        c(); xs[c++] = o instanceof t ?  x() ?  x() ? (x() ? 5 : 2) : 3  : 4  : 1; e();
        c(); xs[c++] = o instanceof t ?  x() ?  x() ?  x() ? 5 : 2  : 3  : 4  : 1; e();

        c(); xs[c++] = ot instanceof t ? (o instanceof t ? (x() ? (x() ? 4 : 2) : 3) : 1) : 5; e();
        c(); xs[c++] = ot instanceof t ?  o instanceof t ? (x() ? (x() ? 4 : 2) : 3) : 1  : 5; e();
        c(); xs[c++] = ot instanceof t ?  o instanceof t ?  x() ? (x() ? 4 : 2) : 3  : 1  : 5; e();
        c(); xs[c++] = ot instanceof t ?  o instanceof t ?  x() ?  x() ? 4 : 2  : 3  : 1  : 5; e();

        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (o instanceof t ? (x() ? 3 : 2) : 1) : 4) : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ? (o instanceof t ? (x() ? 3 : 2) : 1) : 4  : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  o instanceof t ? (x() ? 3 : 2) : 1  : 4  : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  o instanceof t ?  x() ? 3 : 2  : 1  : 4  : 5; e();

        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? (o instanceof t ? 2 : 1) : 3) : 4) : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ? (ot instanceof t ? (o instanceof t ? 2 : 1) : 3) : 4  : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  ot instanceof t ? (o instanceof t ? 2 : 1) : 3  : 4  : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  ot instanceof t ?  o instanceof t ? 2 : 1  : 3  : 4  : 5; e();

        // b ? e : (b ? e : e)
        c(); xs[c++] = ot instanceof t ? 1 : (x() ? 2 : 3); e();
        c(); xs[c++] = ot instanceof t ? 1 :  x() ? 2 : 3 ; e();

        c(); xs[c++] = o instanceof t ? 2 : (ot instanceof t ? 1 : 3); e();
        c(); xs[c++] = o instanceof t ? 2 :  ot instanceof t ? 1 : 3 ; e();

        c(); xs[c++] = o instanceof t ? 2 : (o instanceof t ? 3 : 1); e();
        c(); xs[c++] = o instanceof t ? 2 :  o instanceof t ? 3 : 1 ; e();

        // b ? e : (b ? e : (b ? e : e))
        c(); xs[c++] = ot instanceof t ? 1 : (x() ? 2 : (x() ? 3 : 4)); e();
        c(); xs[c++] = ot instanceof t ? 1 :  x() ? 2 : (x() ? 3 : 4) ; e();
        c(); xs[c++] = ot instanceof t ? 1 :  x() ? 2 :  x() ? 3 : 4  ; e();

        c(); xs[c++] = o instanceof t ? 2 : (ot instanceof t ? 1 : (x() ? 3 : 4)); e();
        c(); xs[c++] = o instanceof t ? 2 :  ot instanceof t ? 1 : (x() ? 3 : 4) ; e();
        c(); xs[c++] = o instanceof t ? 2 :  ot instanceof t ? 1 :  x() ? 3 : 4  ; e();

        c(); xs[c++] = o instanceof t ? 2 : (o instanceof t ? 3 : (ot instanceof t ? 1 : 4)); e();
        c(); xs[c++] = o instanceof t ? 2 :  o instanceof t ? 3 : (ot instanceof t ? 1 : 4) ; e();
        c(); xs[c++] = o instanceof t ? 2 :  o instanceof t ? 3 :  ot instanceof t ? 1 : 4  ; e();

        c(); xs[c++] = o instanceof t ? 2 : (o instanceof t ? 3 : (o instanceof t ? 4 : 1)); e();
        c(); xs[c++] = o instanceof t ? 2 :  o instanceof t ? 3 : (o instanceof t ? 4 : 1) ; e();
        c(); xs[c++] = o instanceof t ? 2 :  o instanceof t ? 3 :  o instanceof t ? 4 : 1  ; e();

        // b ? (b ? (b ? e : e) : (b ? e : e)) : e
        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : (x() ? 3 : 4)) : 5; e();
        c(); xs[c++] = ot instanceof t ? (ot instanceof t ?  ot instanceof t ? 1 : 2  : (x() ? 3 : 4)) : 5; e();
        c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) :  x() ? 3 : 4 ) : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ? (ot instanceof t ? 1 : 2) :  x() ? 3 : 4   : 5; e();
        c(); xs[c++] = ot instanceof t ? (ot instanceof t ?  ot instanceof t ? 1 : 2  :  x() ? 3 : 4 ) : 5; e();
        c(); xs[c++] = ot instanceof t ?  ot instanceof t ?  ot instanceof t ? 1 : 2  :  x() ? 3 : 4   : 5; e();

        // += b ? e : e
        c(1,0); xs[c++] = z   += t(0) ? 1 : 9; e();
        c(1,2); xs[c++] = z   -= t(0) ? 1 : 9; e();
        c(1,1); xs[c++] = z   *= t(0) ? 1 : 9; e();
        c(1,1); xs[c++] = z   /= t(0) ? 1 : 9; e();
        c(1,1); xs[c++] = z   &= t(0) ? 1 : 9; e();
        c(1,0); xs[c++] = z   |= t(0) ? 1 : 9; e();
        c(1,3); xs[c++] = z   ^= t(0) ? 2 : 9; e();
        c(1,3); xs[c++] = z   %= t(0) ? 2 : 9; e();
        c(1,0); xs[c++] = z  <<= t(0) ? 1 : 9; e();
        c(1,3); xs[c++] = z  >>= t(0) ? 1 : 9; e(); 
        c(1,3); xs[c++] = z >>>= t(0) ? 1 : 0; e();

        c(1,0); xs[c++] = z   += f(0) ? 9 : 1; e();
        c(1,2); xs[c++] = z   -= f(0) ? 9 : 1; e();
        c(1,1); xs[c++] = z   *= f(0) ? 9 : 1; e();
        c(1,1); xs[c++] = z   /= f(0) ? 9 : 1; e();
        c(1,1); xs[c++] = z   &= f(0) ? 9 : 1; e();
        c(1,0); xs[c++] = z   |= f(0) ? 9 : 1; e();
        c(1,3); xs[c++] = z   ^= f(0) ? 9 : 2; e();
        c(1,3); xs[c++] = z   %= f(0) ? 9 : 2; e();
        c(1,0); xs[c++] = z  <<= f(0) ? 9 : 1; e();
        c(1,3); xs[c++] = z  >>= f(0) ? 9 : 1; e(); 
        c(1,3); xs[c++] = z >>>= f(0) ? 0 : 1; e();

        // b ? e + (b ? e : e) : e
        c(2); xs[c++] = t(0) ? 2 + (t(1) ? -1 :  1) : 3; e();
        c(1); xs[c++] = f(0) ? 2 + (x()  ?  3 :  1) : 1; e();
        c(2); xs[c++] = t(0) ? 2 + (f(1) ?  1 : -1) : 3; e();

        // b ? e + (b ? e : e) : (b ? e : e)
        c(2); xs[c++] = t(0) ? 2 + (t(1) ? -1 : 1) : (x() ? 3 : 4); e();
        c(2); xs[c++] = t(0) ? 2 + (t(1) ? -1 : 1) :  x() ? 3 : 4 ; e();

        c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) : (t(1) ? 1 : 4); e();
        c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) :  t(1) ? 1 : 4 ; e();

        c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) : (f(1) ? 4 : 1); e();
        c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) :  f(1) ? 4 : 1 ; e();

        c(2); xs[c++] = t(0) ? 2 + (f(1) ? 1 : -1) : (x() ? 3 : 4); e();
        c(2); xs[c++] = t(0) ? 2 + (f(1) ? 1 : -1) :  x() ? 3 : 4 ; e();

        // b ? z = (b ? e : e) : e;
        // problems
        c(2,-1); xs[c++] = t(0) ? z = (t(1) ? 1 : 2) : 3; e(1);
        c(2,-1); xs[c++] = t(0) ? z =  t(1) ? 1 : 2  : 3; e(1);

        c(1,-1); xs[c++] = f(0) ? z = (x() ? 3 : 2) : 1; e(-1);
        c(1,-1); xs[c++] = f(0) ? z =  x() ? 3 : 2  : 1; e(-1);

        // b ? (z = (b ? e : e)) : (b ? e : e)
        // problems
        c(2,-1); xs[c++] = t(0) ? (z = (t(1) ? 1 : 2)) : (x() ? 3 : 4); e(1);
        c(2,-1); xs[c++] = t(0) ?  z = (t(1) ? 1 : 2)  : (x() ? 3 : 4); e(1);
        c(2,-1); xs[c++] = t(0) ? (z = (t(1) ? 1 : 2)) :  x() ? 3 : 4 ; e(1);
        c(2,-1); xs[c++] = t(0) ? (z =  t(1) ? 1 : 2 ) : (x() ? 3 : 4); e(1);
        c(2,-1); xs[c++] = t(0) ? (z =  t(1) ? 1 : 2 ) :  x() ? 3 : 4 ; e(1);
        c(2,-1); xs[c++] = t(0) ?  z = (t(1) ? 1 : 2 ) :  x() ? 3 : 4 ; e(1);
        c(2,-1); xs[c++] = t(0) ?  z =  t(1) ? 1 : 2   :  x() ? 3 : 4 ; e(1);

        c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3 : 2)) : (t(1) ? 1 : 4); e(-1);
        c(2,-1); xs[c++] = f(0) ?  z = (x() ? 3 : 2)  : (t(1) ? 1 : 4); e(-1);
        c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3 : 2)) :  t(1) ? 1 : 4 ; e(-1);
        c(2,-1); xs[c++] = f(0) ? (z =  x() ? 3 : 2 ) : (t(1) ? 1 : 4); e(-1);
        c(2,-1); xs[c++] = f(0) ? (z =  x() ? 3 : 2 ) :  t(1) ? 1 : 4 ; e(-1);
        c(2,-1); xs[c++] = f(0) ?  z = (x() ? 3 : 2 ) :  t(1) ? 1 : 4 ; e(-1);
        c(2,-1); xs[c++] = f(0) ?  z =  x() ? 3 : 2   :  t(1) ? 1 : 4 ; e(-1);

        c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3:  2)) : (f(1) ? 4 : 1); e(-1);
        c(2,-1); xs[c++] = f(0) ?  z = (x() ? 3 : 2)  : (f(1) ? 4 : 1); e(-1);
        c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3 : 2)) :  f(1) ? 4 : 1 ; e(-1);
        c(2,-1); xs[c++] = f(0) ? (z =  x() ? 3 : 2 ) : (f(1) ? 4 : 1); e(-1);
        c(2,-1); xs[c++] = f(0) ? (z =  x() ? 3 : 2 ) :  f(1) ? 4 : 1 ; e(-1);
        c(2,-1); xs[c++] = f(0) ?  z = (x() ? 3 : 2 ) :  f(1) ? 4 : 1 ; e(-1);
        c(2,-1); xs[c++] = f(0) ?  z =  x() ? 3 : 2   :  f(1) ? 4 : 1 ; e(-1);


        for (int i = 0; i < xs.length; i++) {
            if (xs[i] != 0) {
                Tester.check(xs[i]==1, "xs["+i+"]=" + xs[i] + ", not 1!");
            }
        }

    }

    static class t {}
    
    int cur = 0;
    int expect = -1;
    private void c(int expect, int z) { this.expect = expect; cur = 0; this.z = z; }
    private void c(int expect) { c(expect, 0); }
    private void c() { c(-1); }
    private void e(int z) {
        if (z != -123) {
            Tester.check(this.z == z, c + ": z=" + this.z + ", should be " + z);
        }
        if (expect >= 0) {
            Tester.check(expect == cur, c + ": expect=" + expect + ", should be " + cur);
        }
    }
    private void e() { e(-123); }
    private boolean t(int i) { return b(i, true); }
    private boolean f(int i) { return b(i, false); }
    private boolean x()      { return b(-1, false); }
    private boolean b(int i, boolean b) {
        Tester.check(i >= 0, c + ": this expression shouldn't have been evaluated");
         if (i >= 0) Tester.check(i == cur, c + ": i=" + i + ", should be " + cur);
        cur++;
        return b;
    }


}