1 /*
2 * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 // -- This file was mechanically generated: Do not edit! -- //
25
26 /*
27 * @test
28 * @comment Set CompileThresholdScaling to 0.1 so that the warmup loop sets to 2000 iterations
29 * to hit compilation thresholds
30 * @run testng/othervm -Diters=2000 -XX:CompileThresholdScaling=0.1 VarHandleTestMethodHandleAccessBoolean
31 */
32
33 import org.testng.annotations.BeforeClass;
34 import org.testng.annotations.DataProvider;
35 import org.testng.annotations.Test;
36
37 import java.lang.invoke.MethodHandle;
38 import java.lang.invoke.MethodHandles;
39 import java.lang.invoke.VarHandle;
40 import java.util.ArrayList;
41 import java.util.Arrays;
42 import java.util.List;
43
44 import static org.testng.Assert.*;
45
46 public class VarHandleTestMethodHandleAccessBoolean extends VarHandleBaseTest {
47 static final boolean static_final_v = true;
48
49 static boolean static_v;
50
51 final boolean final_v = true;
52
53 boolean v;
54
55 VarHandle vhFinalField;
56
57 VarHandle vhField;
58
59 VarHandle vhStaticField;
60
61 VarHandle vhStaticFinalField;
62
63 VarHandle vhArray;
64
65 @BeforeClass
66 public void setup() throws Exception {
67 vhFinalField = MethodHandles.lookup().findVarHandle(
68 VarHandleTestMethodHandleAccessBoolean.class, "final_v", boolean.class);
69
70 vhField = MethodHandles.lookup().findVarHandle(
71 VarHandleTestMethodHandleAccessBoolean.class, "v", boolean.class);
72
73 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle(
74 VarHandleTestMethodHandleAccessBoolean.class, "static_final_v", boolean.class);
75
76 vhStaticField = MethodHandles.lookup().findStaticVarHandle(
77 VarHandleTestMethodHandleAccessBoolean.class, "static_v", boolean.class);
78
79 vhArray = MethodHandles.arrayElementVarHandle(boolean[].class);
80 }
81
82
83 @DataProvider
84 public Object[][] accessTestCaseProvider() throws Exception {
85 List<AccessTestCase<?>> cases = new ArrayList<>();
86
87 for (VarHandleToMethodHandle f : VarHandleToMethodHandle.values()) {
88 cases.add(new MethodHandleAccessTestCase("Instance field",
89 vhField, f, hs -> testInstanceField(this, hs)));
90 cases.add(new MethodHandleAccessTestCase("Instance field unsupported",
91 vhField, f, hs -> testInstanceFieldUnsupported(this, hs),
92 false));
93
94 cases.add(new MethodHandleAccessTestCase("Static field",
95 vhStaticField, f, VarHandleTestMethodHandleAccessBoolean::testStaticField));
96 cases.add(new MethodHandleAccessTestCase("Static field unsupported",
97 vhStaticField, f, VarHandleTestMethodHandleAccessBoolean::testStaticFieldUnsupported,
98 false));
99
100 cases.add(new MethodHandleAccessTestCase("Array",
101 vhArray, f, VarHandleTestMethodHandleAccessBoolean::testArray));
102 cases.add(new MethodHandleAccessTestCase("Array unsupported",
103 vhArray, f, VarHandleTestMethodHandleAccessBoolean::testArrayUnsupported,
104 false));
105 cases.add(new MethodHandleAccessTestCase("Array index out of bounds",
106 vhArray, f, VarHandleTestMethodHandleAccessBoolean::testArrayIndexOutOfBounds,
107 false));
108 }
109
110 // Work around issue with jtreg summary reporting which truncates
111 // the String result of Object.toString to 30 characters, hence
112 // the first dummy argument
113 return cases.stream().map(tc -> new Object[]{tc.toString(), tc}).toArray(Object[][]::new);
114 }
115
116 @Test(dataProvider = "accessTestCaseProvider")
117 public <T> void testAccess(String desc, AccessTestCase<T> atc) throws Throwable {
118 T t = atc.get();
119 int iters = atc.requiresLoop() ? ITERS : 1;
120 for (int c = 0; c < iters; c++) {
121 atc.testAccess(t);
122 }
123 }
124
125
126 static void testInstanceField(VarHandleTestMethodHandleAccessBoolean recv, Handles hs) throws Throwable {
127 // Plain
128 {
129 hs.get(TestAccessMode.SET).invokeExact(recv, true);
130 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
131 assertEquals(x, true, "set boolean value");
132 }
133
134
135 // Volatile
136 {
137 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, false);
138 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv);
139 assertEquals(x, false, "setVolatile boolean value");
140 }
141
142 // Lazy
143 {
144 hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, true);
145 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv);
146 assertEquals(x, true, "setRelease boolean value");
147 }
148
149 // Opaque
150 {
151 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, false);
152 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv);
153 assertEquals(x, false, "setOpaque boolean value");
154 }
155
156 hs.get(TestAccessMode.SET).invokeExact(recv, true);
157
158 // Compare
159 {
160 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, true, false);
161 assertEquals(r, true, "success compareAndSet boolean");
162 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
163 assertEquals(x, false, "success compareAndSet boolean value");
164 }
165
166 {
167 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, true, false);
168 assertEquals(r, false, "failing compareAndSet boolean");
169 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
170 assertEquals(x, false, "failing compareAndSet boolean value");
171 }
172
173 {
174 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(recv, false, true);
175 assertEquals(r, false, "success compareAndExchange boolean");
176 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
177 assertEquals(x, true, "success compareAndExchange boolean value");
178 }
179
180 {
181 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(recv, false, false);
182 assertEquals(r, true, "failing compareAndExchange boolean");
183 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
184 assertEquals(x, true, "failing compareAndExchange boolean value");
185 }
186
187 {
188 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, true, false);
189 assertEquals(r, true, "success compareAndExchangeAcquire boolean");
190 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
191 assertEquals(x, false, "success compareAndExchangeAcquire boolean value");
192 }
193
194 {
195 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, true, false);
196 assertEquals(r, false, "failing compareAndExchangeAcquire boolean");
197 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
198 assertEquals(x, false, "failing compareAndExchangeAcquire boolean value");
199 }
200
201 {
202 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, false, true);
203 assertEquals(r, false, "success compareAndExchangeRelease boolean");
204 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
205 assertEquals(x, true, "success compareAndExchangeRelease boolean value");
206 }
207
208 {
209 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, false, false);
210 assertEquals(r, true, "failing compareAndExchangeRelease boolean");
211 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
212 assertEquals(x, true, "failing compareAndExchangeRelease boolean value");
213 }
214
215 {
216 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_PLAIN);
217 boolean success = false;
218 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
219 success = (boolean) mh.invokeExact(recv, true, false);
220 if (!success) weakDelay();
221 }
222 assertEquals(success, true, "success weakCompareAndSetPlain boolean");
223 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
224 assertEquals(x, false, "success weakCompareAndSetPlain boolean value");
225 }
226
227 {
228 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_PLAIN).invokeExact(recv, true, false);
229 assertEquals(success, false, "failing weakCompareAndSetPlain boolean");
230 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
231 assertEquals(x, false, "failing weakCompareAndSetPlain boolean value");
232 }
233
234 {
235 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE);
236 boolean success = false;
237 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
238 success = (boolean) mh.invokeExact(recv, false, true);
239 if (!success) weakDelay();
240 }
241 assertEquals(success, true, "success weakCompareAndSetAcquire boolean");
242 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
243 assertEquals(x, true, "success weakCompareAndSetAcquire boolean");
244 }
245
246 {
247 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(recv, false, false);
248 assertEquals(success, false, "failing weakCompareAndSetAcquire boolean");
249 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
250 assertEquals(x, true, "failing weakCompareAndSetAcquire boolean value");
251 }
252
253 {
254 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE);
255 boolean success = false;
256 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
257 success = (boolean) mh.invokeExact(recv, true, false);
258 if (!success) weakDelay();
259 }
260 assertEquals(success, true, "success weakCompareAndSetRelease boolean");
261 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
262 assertEquals(x, false, "success weakCompareAndSetRelease boolean");
263 }
264
265 {
266 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(recv, true, false);
267 assertEquals(success, false, "failing weakCompareAndSetRelease boolean");
268 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
269 assertEquals(x, false, "failing weakCompareAndSetRelease boolean value");
270 }
271
272 {
273 boolean success = false;
274 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET);
275 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
276 success = (boolean) mh.invokeExact(recv, false, true);
277 if (!success) weakDelay();
278 }
279 assertEquals(success, true, "success weakCompareAndSet boolean");
280 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
281 assertEquals(x, true, "success weakCompareAndSet boolean");
282 }
283
284 {
285 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(recv, false, false);
286 assertEquals(success, false, "failing weakCompareAndSet boolean");
287 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
288 assertEquals(x, true, "failing weakCompareAndSet boolean value");
289 }
290
291 // Compare set and get
292 {
293 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET).invokeExact(recv, false);
294 assertEquals(o, true, "getAndSet boolean");
295 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
296 assertEquals(x, false, "getAndSet boolean value");
297 }
298
299
300 // get and bitwise or
301 {
302 hs.get(TestAccessMode.SET).invokeExact(recv, true);
303
304 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR).invokeExact(recv, false);
305 assertEquals(o, true, "getAndBitwiseOr boolean");
306 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
307 assertEquals(x, (boolean)(true | false), "getAndBitwiseOr boolean value");
308 }
309
310 {
311 hs.get(TestAccessMode.SET).invokeExact(recv, true);
312
313 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR_ACQUIRE).invokeExact(recv, false);
314 assertEquals(o, true, "getAndBitwiseOrAcquire boolean");
315 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
316 assertEquals(x, (boolean)(true | false), "getAndBitwiseOrAcquire boolean value");
317 }
318
319 {
320 hs.get(TestAccessMode.SET).invokeExact(recv, true);
321
322 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR_RELEASE).invokeExact(recv, false);
323 assertEquals(o, true, "getAndBitwiseOrRelease boolean");
324 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
325 assertEquals(x, (boolean)(true | false), "getAndBitwiseOrRelease boolean value");
326 }
327
328 // get and bitwise and
329 {
330 hs.get(TestAccessMode.SET).invokeExact(recv, true);
331
332 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND).invokeExact(recv, false);
333 assertEquals(o, true, "getAndBitwiseAnd boolean");
334 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
335 assertEquals(x, (boolean)(true & false), "getAndBitwiseAnd boolean value");
336 }
337
338 {
339 hs.get(TestAccessMode.SET).invokeExact(recv, true);
340
341 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND_ACQUIRE).invokeExact(recv, false);
342 assertEquals(o, true, "getAndBitwiseAndAcquire boolean");
343 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
344 assertEquals(x, (boolean)(true & false), "getAndBitwiseAndAcquire boolean value");
345 }
346
347 {
348 hs.get(TestAccessMode.SET).invokeExact(recv, true);
349
350 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND_RELEASE).invokeExact(recv, false);
351 assertEquals(o, true, "getAndBitwiseAndRelease boolean");
352 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
353 assertEquals(x, (boolean)(true & false), "getAndBitwiseAndRelease boolean value");
354 }
355
356 // get and bitwise xor
357 {
358 hs.get(TestAccessMode.SET).invokeExact(recv, true);
359
360 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR).invokeExact(recv, false);
361 assertEquals(o, true, "getAndBitwiseXor boolean");
362 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
363 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXor boolean value");
364 }
365
366 {
367 hs.get(TestAccessMode.SET).invokeExact(recv, true);
368
369 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_ACQUIRE).invokeExact(recv, false);
370 assertEquals(o, true, "getAndBitwiseXorAcquire boolean");
371 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
372 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXorAcquire boolean value");
373 }
374
375 {
376 hs.get(TestAccessMode.SET).invokeExact(recv, true);
377
378 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_RELEASE).invokeExact(recv, false);
379 assertEquals(o, true, "getAndBitwiseXorRelease boolean");
380 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv);
381 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXorRelease boolean value");
382 }
383 }
384
385 static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessBoolean recv, Handles hs) throws Throwable {
386
387 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) {
388 checkUOE(am, () -> {
389 boolean r = (boolean) hs.get(am).invokeExact(recv, true);
390 });
391 }
392
393 }
394
395
396 static void testStaticField(Handles hs) throws Throwable {
397 // Plain
398 {
399 hs.get(TestAccessMode.SET).invokeExact(true);
400 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
401 assertEquals(x, true, "set boolean value");
402 }
403
404
405 // Volatile
406 {
407 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(false);
408 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact();
409 assertEquals(x, false, "setVolatile boolean value");
410 }
411
412 // Lazy
413 {
414 hs.get(TestAccessMode.SET_RELEASE).invokeExact(true);
415 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact();
416 assertEquals(x, true, "setRelease boolean value");
417 }
418
419 // Opaque
420 {
421 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(false);
422 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact();
423 assertEquals(x, false, "setOpaque boolean value");
424 }
425
426 hs.get(TestAccessMode.SET).invokeExact(true);
427
428 // Compare
429 {
430 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(true, false);
431 assertEquals(r, true, "success compareAndSet boolean");
432 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
433 assertEquals(x, false, "success compareAndSet boolean value");
434 }
435
436 {
437 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(true, false);
438 assertEquals(r, false, "failing compareAndSet boolean");
439 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
440 assertEquals(x, false, "failing compareAndSet boolean value");
441 }
442
443 {
444 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(false, true);
445 assertEquals(r, false, "success compareAndExchange boolean");
446 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
447 assertEquals(x, true, "success compareAndExchange boolean value");
448 }
449
450 {
451 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(false, false);
452 assertEquals(r, true, "failing compareAndExchange boolean");
453 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
454 assertEquals(x, true, "failing compareAndExchange boolean value");
455 }
456
457 {
458 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(true, false);
459 assertEquals(r, true, "success compareAndExchangeAcquire boolean");
460 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
461 assertEquals(x, false, "success compareAndExchangeAcquire boolean value");
462 }
463
464 {
465 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(true, false);
466 assertEquals(r, false, "failing compareAndExchangeAcquire boolean");
467 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
468 assertEquals(x, false, "failing compareAndExchangeAcquire boolean value");
469 }
470
471 {
472 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(false, true);
473 assertEquals(r, false, "success compareAndExchangeRelease boolean");
474 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
475 assertEquals(x, true, "success compareAndExchangeRelease boolean value");
476 }
477
478 {
479 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(false, false);
480 assertEquals(r, true, "failing compareAndExchangeRelease boolean");
481 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
482 assertEquals(x, true, "failing compareAndExchangeRelease boolean value");
483 }
484
485 {
486 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_PLAIN);
487 boolean success = false;
488 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
489 success = (boolean) mh.invokeExact(true, false);
490 if (!success) weakDelay();
491 }
492 assertEquals(success, true, "success weakCompareAndSetPlain boolean");
493 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
494 assertEquals(x, false, "success weakCompareAndSetPlain boolean value");
495 }
496
497 {
498 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_PLAIN).invokeExact(true, false);
499 assertEquals(success, false, "failing weakCompareAndSetPlain boolean");
500 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
501 assertEquals(x, false, "failing weakCompareAndSetPlain boolean value");
502 }
503
504 {
505 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE);
506 boolean success = false;
507 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
508 success = (boolean) mh.invokeExact(false, true);
509 if (!success) weakDelay();
510 }
511 assertEquals(success, true, "success weakCompareAndSetAcquire boolean");
512 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
513 assertEquals(x, true, "success weakCompareAndSetAcquire boolean");
514 }
515
516 {
517 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE);
518 boolean success = (boolean) mh.invokeExact(false, false);
519 assertEquals(success, false, "failing weakCompareAndSetAcquire boolean");
520 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
521 assertEquals(x, true, "failing weakCompareAndSetAcquire boolean value");
522 }
523
524 {
525 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE);
526 boolean success = false;
527 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
528 success = (boolean) mh.invokeExact(true, false);
529 if (!success) weakDelay();
530 }
531 assertEquals(success, true, "success weakCompareAndSetRelease boolean");
532 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
533 assertEquals(x, false, "success weakCompareAndSetRelease boolean");
534 }
535
536 {
537 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(true, false);
538 assertEquals(success, false, "failing weakCompareAndSetRelease boolean");
539 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
540 assertEquals(x, false, "failing weakCompareAndSetRelease boolean value");
541 }
542
543 {
544 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET);
545 boolean success = false;
546 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
547 success = (boolean) mh.invokeExact(false, true);
548 if (!success) weakDelay();
549 }
550 assertEquals(success, true, "success weakCompareAndSet boolean");
551 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
552 assertEquals(x, true, "success weakCompareAndSet boolean");
553 }
554
555 {
556 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(false, false);
557 assertEquals(success, false, "failing weakCompareAndSet boolean");
558 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
559 assertEquals(x, true, "failing weakCompareAndSetRe boolean value");
560 }
561
562 // Compare set and get
563 {
564 hs.get(TestAccessMode.SET).invokeExact(true);
565
566 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET).invokeExact(false);
567 assertEquals(o, true, "getAndSet boolean");
568 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
569 assertEquals(x, false, "getAndSet boolean value");
570 }
571
572 // Compare set and get
573 {
574 hs.get(TestAccessMode.SET).invokeExact(true);
575
576 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET_ACQUIRE).invokeExact(false);
577 assertEquals(o, true, "getAndSetAcquire boolean");
578 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
579 assertEquals(x, false, "getAndSetAcquire boolean value");
580 }
581
582 // Compare set and get
583 {
584 hs.get(TestAccessMode.SET).invokeExact(true);
585
586 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET_RELEASE).invokeExact(false);
587 assertEquals(o, true, "getAndSetRelease boolean");
588 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
589 assertEquals(x, false, "getAndSetRelease boolean value");
590 }
591
592
593 // get and bitwise or
594 {
595 hs.get(TestAccessMode.SET).invokeExact(true);
596
597 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR).invokeExact(false);
598 assertEquals(o, true, "getAndBitwiseOr boolean");
599 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
600 assertEquals(x, (boolean)(true | false), "getAndBitwiseOr boolean value");
601 }
602
603 {
604 hs.get(TestAccessMode.SET).invokeExact(true);
605
606 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR_ACQUIRE).invokeExact(false);
607 assertEquals(o, true, "getAndBitwiseOrAcquire boolean");
608 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
609 assertEquals(x, (boolean)(true | false), "getAndBitwiseOrAcquire boolean value");
610 }
611
612 {
613 hs.get(TestAccessMode.SET).invokeExact(true);
614
615 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR_RELEASE).invokeExact(false);
616 assertEquals(o, true, "getAndBitwiseOrRelease boolean");
617 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
618 assertEquals(x, (boolean)(true | false), "getAndBitwiseOrRelease boolean value");
619 }
620
621 // get and bitwise and
622 {
623 hs.get(TestAccessMode.SET).invokeExact(true);
624
625 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND).invokeExact(false);
626 assertEquals(o, true, "getAndBitwiseAnd boolean");
627 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
628 assertEquals(x, (boolean)(true & false), "getAndBitwiseAnd boolean value");
629 }
630
631 {
632 hs.get(TestAccessMode.SET).invokeExact(true);
633
634 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND_ACQUIRE).invokeExact(false);
635 assertEquals(o, true, "getAndBitwiseAndAcquire boolean");
636 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
637 assertEquals(x, (boolean)(true & false), "getAndBitwiseAndAcquire boolean value");
638 }
639
640 {
641 hs.get(TestAccessMode.SET).invokeExact(true);
642
643 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND_RELEASE).invokeExact(false);
644 assertEquals(o, true, "getAndBitwiseAndRelease boolean");
645 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
646 assertEquals(x, (boolean)(true & false), "getAndBitwiseAndRelease boolean value");
647 }
648
649 // get and bitwise xor
650 {
651 hs.get(TestAccessMode.SET).invokeExact(true);
652
653 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR).invokeExact(false);
654 assertEquals(o, true, "getAndBitwiseXor boolean");
655 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
656 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXor boolean value");
657 }
658
659 {
660 hs.get(TestAccessMode.SET).invokeExact(true);
661
662 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_ACQUIRE).invokeExact(false);
663 assertEquals(o, true, "getAndBitwiseXorAcquire boolean");
664 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
665 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXorAcquire boolean value");
666 }
667
668 {
669 hs.get(TestAccessMode.SET).invokeExact(true);
670
671 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_RELEASE).invokeExact(false);
672 assertEquals(o, true, "getAndBitwiseXorRelease boolean");
673 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact();
674 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXorRelease boolean value");
675 }
676 }
677
678 static void testStaticFieldUnsupported(Handles hs) throws Throwable {
679
680 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) {
681 checkUOE(am, () -> {
682 boolean r = (boolean) hs.get(am).invokeExact(true);
683 });
684 }
685
686 }
687
688
689 static void testArray(Handles hs) throws Throwable {
690 boolean[] array = new boolean[10];
691
692 for (int i = 0; i < array.length; i++) {
693 // Plain
694 {
695 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
696 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
697 assertEquals(x, true, "get boolean value");
698 }
699
700
701 // Volatile
702 {
703 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, false);
704 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i);
705 assertEquals(x, false, "setVolatile boolean value");
706 }
707
708 // Lazy
709 {
710 hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, true);
711 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i);
712 assertEquals(x, true, "setRelease boolean value");
713 }
714
715 // Opaque
716 {
717 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, false);
718 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i);
719 assertEquals(x, false, "setOpaque boolean value");
720 }
721
722 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
723
724 // Compare
725 {
726 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, true, false);
727 assertEquals(r, true, "success compareAndSet boolean");
728 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
729 assertEquals(x, false, "success compareAndSet boolean value");
730 }
731
732 {
733 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, true, false);
734 assertEquals(r, false, "failing compareAndSet boolean");
735 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
736 assertEquals(x, false, "failing compareAndSet boolean value");
737 }
738
739 {
740 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(array, i, false, true);
741 assertEquals(r, false, "success compareAndExchange boolean");
742 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
743 assertEquals(x, true, "success compareAndExchange boolean value");
744 }
745
746 {
747 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(array, i, false, false);
748 assertEquals(r, true, "failing compareAndExchange boolean");
749 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
750 assertEquals(x, true, "failing compareAndExchange boolean value");
751 }
752
753 {
754 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, true, false);
755 assertEquals(r, true, "success compareAndExchangeAcquire boolean");
756 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
757 assertEquals(x, false, "success compareAndExchangeAcquire boolean value");
758 }
759
760 {
761 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, true, false);
762 assertEquals(r, false, "failing compareAndExchangeAcquire boolean");
763 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
764 assertEquals(x, false, "failing compareAndExchangeAcquire boolean value");
765 }
766
767 {
768 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, false, true);
769 assertEquals(r, false, "success compareAndExchangeRelease boolean");
770 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
771 assertEquals(x, true, "success compareAndExchangeRelease boolean value");
772 }
773
774 {
775 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, false, false);
776 assertEquals(r, true, "failing compareAndExchangeRelease boolean");
777 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
778 assertEquals(x, true, "failing compareAndExchangeRelease boolean value");
779 }
780
781 {
782 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_PLAIN);
783 boolean success = false;
784 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
785 success = (boolean) mh.invokeExact(array, i, true, false);
786 if (!success) weakDelay();
787 }
788 assertEquals(success, true, "success weakCompareAndSetPlain boolean");
789 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
790 assertEquals(x, false, "success weakCompareAndSetPlain boolean value");
791 }
792
793 {
794 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_PLAIN).invokeExact(array, i, true, false);
795 assertEquals(success, false, "failing weakCompareAndSetPlain boolean");
796 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
797 assertEquals(x, false, "failing weakCompareAndSetPlain boolean value");
798 }
799
800 {
801 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE);
802 boolean success = false;
803 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
804 success = (boolean) mh.invokeExact(array, i, false, true);
805 if (!success) weakDelay();
806 }
807 assertEquals(success, true, "success weakCompareAndSetAcquire boolean");
808 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
809 assertEquals(x, true, "success weakCompareAndSetAcquire boolean");
810 }
811
812 {
813 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(array, i, false, false);
814 assertEquals(success, false, "failing weakCompareAndSetAcquire boolean");
815 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
816 assertEquals(x, true, "failing weakCompareAndSetAcquire boolean value");
817 }
818
819 {
820 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE);
821 boolean success = false;
822 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
823 success = (boolean) mh.invokeExact(array, i, true, false);
824 if (!success) weakDelay();
825 }
826 assertEquals(success, true, "success weakCompareAndSetRelease boolean");
827 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
828 assertEquals(x, false, "success weakCompareAndSetRelease boolean");
829 }
830
831 {
832 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(array, i, true, false);
833 assertEquals(success, false, "failing weakCompareAndSetAcquire boolean");
834 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
835 assertEquals(x, false, "failing weakCompareAndSetAcquire boolean value");
836 }
837
838 {
839 MethodHandle mh = hs.get(TestAccessMode.WEAK_COMPARE_AND_SET);
840 boolean success = false;
841 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
842 success = (boolean) mh.invokeExact(array, i, false, true);
843 if (!success) weakDelay();
844 }
845 assertEquals(success, true, "success weakCompareAndSet boolean");
846 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
847 assertEquals(x, true, "success weakCompareAndSet boolean");
848 }
849
850 {
851 boolean success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(array, i, false, false);
852 assertEquals(success, false, "failing weakCompareAndSet boolean");
853 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
854 assertEquals(x, true, "failing weakCompareAndSet boolean value");
855 }
856
857 // Compare set and get
858 {
859 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
860
861 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET).invokeExact(array, i, false);
862 assertEquals(o, true, "getAndSet boolean");
863 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
864 assertEquals(x, false, "getAndSet boolean value");
865 }
866
867 {
868 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
869
870 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET_ACQUIRE).invokeExact(array, i, false);
871 assertEquals(o, true, "getAndSetAcquire boolean");
872 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
873 assertEquals(x, false, "getAndSetAcquire boolean value");
874 }
875
876 {
877 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
878
879 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET_RELEASE).invokeExact(array, i, false);
880 assertEquals(o, true, "getAndSetRelease boolean");
881 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
882 assertEquals(x, false, "getAndSetRelease boolean value");
883 }
884
885
886 // get and bitwise or
887 {
888 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
889
890 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR).invokeExact(array, i, false);
891 assertEquals(o, true, "getAndBitwiseOr boolean");
892 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
893 assertEquals(x, (boolean)(true | false), "getAndBitwiseOr boolean value");
894 }
895
896 {
897 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
898
899 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR_ACQUIRE).invokeExact(array, i, false);
900 assertEquals(o, true, "getAndBitwiseOrAcquire boolean");
901 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
902 assertEquals(x, (boolean)(true | false), "getAndBitwiseOrAcquire boolean value");
903 }
904
905 {
906 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
907
908 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_OR_RELEASE).invokeExact(array, i, false);
909 assertEquals(o, true, "getAndBitwiseOrRelease boolean");
910 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
911 assertEquals(x, (boolean)(true | false), "getAndBitwiseOrRelease boolean value");
912 }
913
914 // get and bitwise and
915 {
916 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
917
918 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND).invokeExact(array, i, false);
919 assertEquals(o, true, "getAndBitwiseAnd boolean");
920 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
921 assertEquals(x, (boolean)(true & false), "getAndBitwiseAnd boolean value");
922 }
923
924 {
925 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
926
927 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND_ACQUIRE).invokeExact(array, i, false);
928 assertEquals(o, true, "getAndBitwiseAndAcquire boolean");
929 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
930 assertEquals(x, (boolean)(true & false), "getAndBitwiseAndAcquire boolean value");
931 }
932
933 {
934 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
935
936 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_AND_RELEASE).invokeExact(array, i, false);
937 assertEquals(o, true, "getAndBitwiseAndRelease boolean");
938 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
939 assertEquals(x, (boolean)(true & false), "getAndBitwiseAndRelease boolean value");
940 }
941
942 // get and bitwise xor
943 {
944 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
945
946 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR).invokeExact(array, i, false);
947 assertEquals(o, true, "getAndBitwiseXor boolean");
948 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
949 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXor boolean value");
950 }
951
952 {
953 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
954
955 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_ACQUIRE).invokeExact(array, i, false);
956 assertEquals(o, true, "getAndBitwiseXorAcquire boolean");
957 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
958 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXorAcquire boolean value");
959 }
960
961 {
962 hs.get(TestAccessMode.SET).invokeExact(array, i, true);
963
964 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_RELEASE).invokeExact(array, i, false);
965 assertEquals(o, true, "getAndBitwiseXorRelease boolean");
966 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i);
967 assertEquals(x, (boolean)(true ^ false), "getAndBitwiseXorRelease boolean value");
968 }
969 }
970 }
971
972 static void testArrayUnsupported(Handles hs) throws Throwable {
973 boolean[] array = new boolean[10];
974
975 final int i = 0;
976
977 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) {
978 checkUOE(am, () -> {
979 boolean o = (boolean) hs.get(am).invokeExact(array, i, true);
980 });
981 }
982
983 }
984
985 static void testArrayIndexOutOfBounds(Handles hs) throws Throwable {
986 boolean[] array = new boolean[10];
987
988 for (int i : new int[]{-1, Integer.MIN_VALUE, 10, 11, Integer.MAX_VALUE}) {
989 final int ci = i;
990
991 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) {
992 checkAIOOBE(am, () -> {
993 boolean x = (boolean) hs.get(am).invokeExact(array, ci);
994 });
995 }
996
997 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) {
998 checkAIOOBE(am, () -> {
999 hs.get(am).invokeExact(array, ci, true);
1000 });
1001 }
1002
1003 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) {
1004 checkAIOOBE(am, () -> {
1005 boolean r = (boolean) hs.get(am).invokeExact(array, ci, true, false);
1006 });
1007 }
1008
1009 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) {
1010 checkAIOOBE(am, () -> {
1011 boolean r = (boolean) hs.get(am).invokeExact(array, ci, false, true);
1012 });
1013 }
1014
1015 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) {
1016 checkAIOOBE(am, () -> {
1017 boolean o = (boolean) hs.get(am).invokeExact(array, ci, true);
1018 });
1019 }
1020
1021
1022 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_BITWISE)) {
1023 checkAIOOBE(am, () -> {
1024 boolean o = (boolean) hs.get(am).invokeExact(array, ci, false);
1025 });
1026 }
1027 }
1028 }
1029 }
1030