blob: 1861e5919dc458fdad9b327d00caac16e4bc1955 [file] [log] [blame]
Paul Sandoz9fb30a32016-03-24 11:21:21 +01001/*
2 * Copyright (c) 2015, 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/*
25 * @test
26 * @run testng/othervm -Diters=10 -Xint VarHandleTestAccessDouble
27 * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 VarHandleTestAccessDouble
28 * @run testng/othervm -Diters=20000 VarHandleTestAccessDouble
29 * @run testng/othervm -Diters=20000 -XX:-TieredCompilation VarHandleTestAccessDouble
30 */
31
32import org.testng.annotations.BeforeClass;
33import org.testng.annotations.DataProvider;
34import org.testng.annotations.Test;
35
36import java.lang.invoke.MethodHandles;
37import java.lang.invoke.VarHandle;
38import java.util.ArrayList;
39import java.util.Arrays;
40import java.util.List;
41
42import static org.testng.Assert.*;
43
44public class VarHandleTestAccessDouble extends VarHandleBaseTest {
45 static final double static_final_v = 1.0d;
46
47 static double static_v;
48
49 final double final_v = 1.0d;
50
51 double v;
52
53 VarHandle vhFinalField;
54
55 VarHandle vhField;
56
57 VarHandle vhStaticField;
58
59 VarHandle vhStaticFinalField;
60
61 VarHandle vhArray;
62
63 @BeforeClass
64 public void setup() throws Exception {
65 vhFinalField = MethodHandles.lookup().findVarHandle(
66 VarHandleTestAccessDouble.class, "final_v", double.class);
67
68 vhField = MethodHandles.lookup().findVarHandle(
69 VarHandleTestAccessDouble.class, "v", double.class);
70
71 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle(
72 VarHandleTestAccessDouble.class, "static_final_v", double.class);
73
74 vhStaticField = MethodHandles.lookup().findStaticVarHandle(
75 VarHandleTestAccessDouble.class, "static_v", double.class);
76
77 vhArray = MethodHandles.arrayElementVarHandle(double[].class);
78 }
79
80
81 @DataProvider
82 public Object[][] varHandlesProvider() throws Exception {
83 List<VarHandle> vhs = new ArrayList<>();
84 vhs.add(vhField);
85 vhs.add(vhStaticField);
86 vhs.add(vhArray);
87
88 return vhs.stream().map(tc -> new Object[]{tc}).toArray(Object[][]::new);
89 }
90
91 @Test(dataProvider = "varHandlesProvider")
92 public void testIsAccessModeSupported(VarHandle vh) {
Paul Sandoza7aff442016-04-13 15:05:48 +020093 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET));
94 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET));
95 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_VOLATILE));
96 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_VOLATILE));
97 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_ACQUIRE));
98 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_RELEASE));
99 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_OPAQUE));
100 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_OPAQUE));
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100101
Paul Sandoza7aff442016-04-13 15:05:48 +0200102 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET));
103 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE));
104 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
105 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
106 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
Paul Sandoze9556602016-04-29 13:46:19 -0700107 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE));
Paul Sandoza7aff442016-04-13 15:05:48 +0200108 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
109 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
Paul Sandoza7aff442016-04-13 15:05:48 +0200110 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100111
Paul Sandoza7aff442016-04-13 15:05:48 +0200112 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
113 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100114 }
115
116
117 @DataProvider
118 public Object[][] typesProvider() throws Exception {
119 List<Object[]> types = new ArrayList<>();
120 types.add(new Object[] {vhField, Arrays.asList(VarHandleTestAccessDouble.class)});
121 types.add(new Object[] {vhStaticField, Arrays.asList()});
122 types.add(new Object[] {vhArray, Arrays.asList(double[].class, int.class)});
123
124 return types.stream().toArray(Object[][]::new);
125 }
126
127 @Test(dataProvider = "typesProvider")
128 public void testTypes(VarHandle vh, List<Class<?>> pts) {
129 assertEquals(vh.varType(), double.class);
130
131 assertEquals(vh.coordinateTypes(), pts);
132
133 testTypes(vh);
134 }
135
136
137 @Test
138 public void testLookupInstanceToStatic() {
139 checkIAE("Lookup of static final field to instance final field", () -> {
140 MethodHandles.lookup().findStaticVarHandle(
141 VarHandleTestAccessDouble.class, "final_v", double.class);
142 });
143
144 checkIAE("Lookup of static field to instance field", () -> {
145 MethodHandles.lookup().findStaticVarHandle(
146 VarHandleTestAccessDouble.class, "v", double.class);
147 });
148 }
149
150 @Test
151 public void testLookupStaticToInstance() {
152 checkIAE("Lookup of instance final field to static final field", () -> {
153 MethodHandles.lookup().findVarHandle(
154 VarHandleTestAccessDouble.class, "static_final_v", double.class);
155 });
156
157 checkIAE("Lookup of instance field to static field", () -> {
158 vhStaticField = MethodHandles.lookup().findVarHandle(
159 VarHandleTestAccessDouble.class, "static_v", double.class);
160 });
161 }
162
163
164 @DataProvider
165 public Object[][] accessTestCaseProvider() throws Exception {
166 List<AccessTestCase<?>> cases = new ArrayList<>();
167
168 cases.add(new VarHandleAccessTestCase("Instance final field",
169 vhFinalField, vh -> testInstanceFinalField(this, vh)));
170 cases.add(new VarHandleAccessTestCase("Instance final field unsupported",
171 vhFinalField, vh -> testInstanceFinalFieldUnsupported(this, vh),
172 false));
173
174 cases.add(new VarHandleAccessTestCase("Static final field",
175 vhStaticFinalField, VarHandleTestAccessDouble::testStaticFinalField));
176 cases.add(new VarHandleAccessTestCase("Static final field unsupported",
177 vhStaticFinalField, VarHandleTestAccessDouble::testStaticFinalFieldUnsupported,
178 false));
179
180 cases.add(new VarHandleAccessTestCase("Instance field",
181 vhField, vh -> testInstanceField(this, vh)));
182 cases.add(new VarHandleAccessTestCase("Instance field unsupported",
183 vhField, vh -> testInstanceFieldUnsupported(this, vh),
184 false));
185
186 cases.add(new VarHandleAccessTestCase("Static field",
187 vhStaticField, VarHandleTestAccessDouble::testStaticField));
188 cases.add(new VarHandleAccessTestCase("Static field unsupported",
189 vhStaticField, VarHandleTestAccessDouble::testStaticFieldUnsupported,
190 false));
191
192 cases.add(new VarHandleAccessTestCase("Array",
193 vhArray, VarHandleTestAccessDouble::testArray));
194 cases.add(new VarHandleAccessTestCase("Array unsupported",
195 vhArray, VarHandleTestAccessDouble::testArrayUnsupported,
196 false));
197 cases.add(new VarHandleAccessTestCase("Array index out of bounds",
198 vhArray, VarHandleTestAccessDouble::testArrayIndexOutOfBounds,
199 false));
200
201 // Work around issue with jtreg summary reporting which truncates
202 // the String result of Object.toString to 30 characters, hence
203 // the first dummy argument
204 return cases.stream().map(tc -> new Object[]{tc.toString(), tc}).toArray(Object[][]::new);
205 }
206
207 @Test(dataProvider = "accessTestCaseProvider")
208 public <T> void testAccess(String desc, AccessTestCase<T> atc) throws Throwable {
209 T t = atc.get();
210 int iters = atc.requiresLoop() ? ITERS : 1;
211 for (int c = 0; c < iters; c++) {
212 atc.testAccess(t);
213 }
214 }
215
216
217
218
219 static void testInstanceFinalField(VarHandleTestAccessDouble recv, VarHandle vh) {
220 // Plain
221 {
222 double x = (double) vh.get(recv);
223 assertEquals(x, 1.0d, "get double value");
224 }
225
226
227 // Volatile
228 {
229 double x = (double) vh.getVolatile(recv);
230 assertEquals(x, 1.0d, "getVolatile double value");
231 }
232
233 // Lazy
234 {
235 double x = (double) vh.getAcquire(recv);
236 assertEquals(x, 1.0d, "getRelease double value");
237 }
238
239 // Opaque
240 {
241 double x = (double) vh.getOpaque(recv);
242 assertEquals(x, 1.0d, "getOpaque double value");
243 }
244 }
245
246 static void testInstanceFinalFieldUnsupported(VarHandleTestAccessDouble recv, VarHandle vh) {
247 checkUOE(() -> {
248 vh.set(recv, 2.0d);
249 });
250
251 checkUOE(() -> {
252 vh.setVolatile(recv, 2.0d);
253 });
254
255 checkUOE(() -> {
256 vh.setRelease(recv, 2.0d);
257 });
258
259 checkUOE(() -> {
260 vh.setOpaque(recv, 2.0d);
261 });
262
263 checkUOE(() -> {
264 boolean r = vh.compareAndSet(recv, 1.0d, 2.0d);
265 });
266
267 checkUOE(() -> {
268 double r = (double) vh.compareAndExchangeVolatile(recv, 1.0d, 2.0d);
269 });
270
271 checkUOE(() -> {
272 double r = (double) vh.compareAndExchangeAcquire(recv, 1.0d, 2.0d);
273 });
274
275 checkUOE(() -> {
276 double r = (double) vh.compareAndExchangeRelease(recv, 1.0d, 2.0d);
277 });
278
279 checkUOE(() -> {
280 boolean r = vh.weakCompareAndSet(recv, 1.0d, 2.0d);
281 });
282
283 checkUOE(() -> {
Paul Sandoze9556602016-04-29 13:46:19 -0700284 boolean r = vh.weakCompareAndSetVolatile(recv, 1.0d, 2.0d);
285 });
286
287 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100288 boolean r = vh.weakCompareAndSetAcquire(recv, 1.0d, 2.0d);
289 });
290
291 checkUOE(() -> {
292 boolean r = vh.weakCompareAndSetRelease(recv, 1.0d, 2.0d);
293 });
294
295 checkUOE(() -> {
Paul Sandoz44afe202016-05-17 12:06:41 +0200296 double r = (double) vh.getAndSet(recv, 1.0d);
297 });
298
299 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100300 double o = (double) vh.getAndAdd(recv, 1.0d);
301 });
302
303 checkUOE(() -> {
304 double o = (double) vh.addAndGet(recv, 1.0d);
305 });
306 }
307
308
309 static void testStaticFinalField(VarHandle vh) {
310 // Plain
311 {
312 double x = (double) vh.get();
313 assertEquals(x, 1.0d, "get double value");
314 }
315
316
317 // Volatile
318 {
319 double x = (double) vh.getVolatile();
320 assertEquals(x, 1.0d, "getVolatile double value");
321 }
322
323 // Lazy
324 {
325 double x = (double) vh.getAcquire();
326 assertEquals(x, 1.0d, "getRelease double value");
327 }
328
329 // Opaque
330 {
331 double x = (double) vh.getOpaque();
332 assertEquals(x, 1.0d, "getOpaque double value");
333 }
334 }
335
336 static void testStaticFinalFieldUnsupported(VarHandle vh) {
337 checkUOE(() -> {
338 vh.set(2.0d);
339 });
340
341 checkUOE(() -> {
342 vh.setVolatile(2.0d);
343 });
344
345 checkUOE(() -> {
346 vh.setRelease(2.0d);
347 });
348
349 checkUOE(() -> {
350 vh.setOpaque(2.0d);
351 });
352
353 checkUOE(() -> {
354 boolean r = vh.compareAndSet(1.0d, 2.0d);
355 });
356
357 checkUOE(() -> {
358 double r = (double) vh.compareAndExchangeVolatile(1.0d, 2.0d);
359 });
360
361 checkUOE(() -> {
362 double r = (double) vh.compareAndExchangeAcquire(1.0d, 2.0d);
363 });
364
365 checkUOE(() -> {
366 double r = (double) vh.compareAndExchangeRelease(1.0d, 2.0d);
367 });
368
369 checkUOE(() -> {
370 boolean r = vh.weakCompareAndSet(1.0d, 2.0d);
371 });
372
373 checkUOE(() -> {
Paul Sandoze9556602016-04-29 13:46:19 -0700374 boolean r = vh.weakCompareAndSetVolatile(1.0d, 2.0d);
375 });
376
377 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100378 boolean r = vh.weakCompareAndSetAcquire(1.0d, 2.0d);
379 });
380
381 checkUOE(() -> {
382 boolean r = vh.weakCompareAndSetRelease(1.0d, 2.0d);
383 });
384
385 checkUOE(() -> {
Paul Sandoz44afe202016-05-17 12:06:41 +0200386 double r = (double) vh.getAndSet(1.0d);
387 });
388
389 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100390 double o = (double) vh.getAndAdd(1.0d);
391 });
392
393 checkUOE(() -> {
394 double o = (double) vh.addAndGet(1.0d);
395 });
396 }
397
398
399 static void testInstanceField(VarHandleTestAccessDouble recv, VarHandle vh) {
400 // Plain
401 {
402 vh.set(recv, 1.0d);
403 double x = (double) vh.get(recv);
404 assertEquals(x, 1.0d, "set double value");
405 }
406
407
408 // Volatile
409 {
410 vh.setVolatile(recv, 2.0d);
411 double x = (double) vh.getVolatile(recv);
412 assertEquals(x, 2.0d, "setVolatile double value");
413 }
414
415 // Lazy
416 {
417 vh.setRelease(recv, 1.0d);
418 double x = (double) vh.getAcquire(recv);
419 assertEquals(x, 1.0d, "setRelease double value");
420 }
421
422 // Opaque
423 {
424 vh.setOpaque(recv, 2.0d);
425 double x = (double) vh.getOpaque(recv);
426 assertEquals(x, 2.0d, "setOpaque double value");
427 }
428
429
430 }
431
432 static void testInstanceFieldUnsupported(VarHandleTestAccessDouble recv, VarHandle vh) {
433 checkUOE(() -> {
434 boolean r = vh.compareAndSet(recv, 1.0d, 2.0d);
435 });
436
437 checkUOE(() -> {
438 double r = (double) vh.compareAndExchangeVolatile(recv, 1.0d, 2.0d);
439 });
440
441 checkUOE(() -> {
442 double r = (double) vh.compareAndExchangeAcquire(recv, 1.0d, 2.0d);
443 });
444
445 checkUOE(() -> {
446 double r = (double) vh.compareAndExchangeRelease(recv, 1.0d, 2.0d);
447 });
448
449 checkUOE(() -> {
450 boolean r = vh.weakCompareAndSet(recv, 1.0d, 2.0d);
451 });
452
453 checkUOE(() -> {
Paul Sandoze9556602016-04-29 13:46:19 -0700454 boolean r = vh.weakCompareAndSetVolatile(recv, 1.0d, 2.0d);
455 });
456
457 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100458 boolean r = vh.weakCompareAndSetAcquire(recv, 1.0d, 2.0d);
459 });
460
461 checkUOE(() -> {
462 boolean r = vh.weakCompareAndSetRelease(recv, 1.0d, 2.0d);
463 });
464
465 checkUOE(() -> {
Paul Sandoz44afe202016-05-17 12:06:41 +0200466 double r = (double) vh.getAndSet(recv, 1.0d);
467 });
468
469 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100470 double o = (double) vh.getAndAdd(recv, 1.0d);
471 });
472
473 checkUOE(() -> {
474 double o = (double) vh.addAndGet(recv, 1.0d);
475 });
476 }
477
478
479 static void testStaticField(VarHandle vh) {
480 // Plain
481 {
482 vh.set(1.0d);
483 double x = (double) vh.get();
484 assertEquals(x, 1.0d, "set double value");
485 }
486
487
488 // Volatile
489 {
490 vh.setVolatile(2.0d);
491 double x = (double) vh.getVolatile();
492 assertEquals(x, 2.0d, "setVolatile double value");
493 }
494
495 // Lazy
496 {
497 vh.setRelease(1.0d);
498 double x = (double) vh.getAcquire();
499 assertEquals(x, 1.0d, "setRelease double value");
500 }
501
502 // Opaque
503 {
504 vh.setOpaque(2.0d);
505 double x = (double) vh.getOpaque();
506 assertEquals(x, 2.0d, "setOpaque double value");
507 }
508
509
510 }
511
512 static void testStaticFieldUnsupported(VarHandle vh) {
513 checkUOE(() -> {
514 boolean r = vh.compareAndSet(1.0d, 2.0d);
515 });
516
517 checkUOE(() -> {
518 double r = (double) vh.compareAndExchangeVolatile(1.0d, 2.0d);
519 });
520
521 checkUOE(() -> {
522 double r = (double) vh.compareAndExchangeAcquire(1.0d, 2.0d);
523 });
524
525 checkUOE(() -> {
526 double r = (double) vh.compareAndExchangeRelease(1.0d, 2.0d);
527 });
528
529 checkUOE(() -> {
530 boolean r = vh.weakCompareAndSet(1.0d, 2.0d);
531 });
532
533 checkUOE(() -> {
Paul Sandoze9556602016-04-29 13:46:19 -0700534 boolean r = vh.weakCompareAndSetVolatile(1.0d, 2.0d);
535 });
536
537 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100538 boolean r = vh.weakCompareAndSetAcquire(1.0d, 2.0d);
539 });
540
541 checkUOE(() -> {
542 boolean r = vh.weakCompareAndSetRelease(1.0d, 2.0d);
543 });
544
545 checkUOE(() -> {
Paul Sandoz44afe202016-05-17 12:06:41 +0200546 double r = (double) vh.getAndSet(1.0d);
547 });
548
549 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100550 double o = (double) vh.getAndAdd(1.0d);
551 });
552
553 checkUOE(() -> {
554 double o = (double) vh.addAndGet(1.0d);
555 });
556 }
557
558
559 static void testArray(VarHandle vh) {
560 double[] array = new double[10];
561
562 for (int i = 0; i < array.length; i++) {
563 // Plain
564 {
565 vh.set(array, i, 1.0d);
566 double x = (double) vh.get(array, i);
567 assertEquals(x, 1.0d, "get double value");
568 }
569
570
571 // Volatile
572 {
573 vh.setVolatile(array, i, 2.0d);
574 double x = (double) vh.getVolatile(array, i);
575 assertEquals(x, 2.0d, "setVolatile double value");
576 }
577
578 // Lazy
579 {
580 vh.setRelease(array, i, 1.0d);
581 double x = (double) vh.getAcquire(array, i);
582 assertEquals(x, 1.0d, "setRelease double value");
583 }
584
585 // Opaque
586 {
587 vh.setOpaque(array, i, 2.0d);
588 double x = (double) vh.getOpaque(array, i);
589 assertEquals(x, 2.0d, "setOpaque double value");
590 }
591
592
593 }
594 }
595
596 static void testArrayUnsupported(VarHandle vh) {
597 double[] array = new double[10];
598
599 int i = 0;
600 checkUOE(() -> {
601 boolean r = vh.compareAndSet(array, i, 1.0d, 2.0d);
602 });
603
604 checkUOE(() -> {
605 double r = (double) vh.compareAndExchangeVolatile(array, i, 1.0d, 2.0d);
606 });
607
608 checkUOE(() -> {
609 double r = (double) vh.compareAndExchangeAcquire(array, i, 1.0d, 2.0d);
610 });
611
612 checkUOE(() -> {
613 double r = (double) vh.compareAndExchangeRelease(array, i, 1.0d, 2.0d);
614 });
615
616 checkUOE(() -> {
617 boolean r = vh.weakCompareAndSet(array, i, 1.0d, 2.0d);
618 });
619
620 checkUOE(() -> {
Paul Sandoze9556602016-04-29 13:46:19 -0700621 boolean r = vh.weakCompareAndSetVolatile(array, i, 1.0d, 2.0d);
622 });
623
624 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100625 boolean r = vh.weakCompareAndSetAcquire(array, i, 1.0d, 2.0d);
626 });
627
628 checkUOE(() -> {
629 boolean r = vh.weakCompareAndSetRelease(array, i, 1.0d, 2.0d);
630 });
631
632 checkUOE(() -> {
Paul Sandoz44afe202016-05-17 12:06:41 +0200633 double r = (double) vh.getAndSet(array, i, 1.0d);
634 });
635
636 checkUOE(() -> {
Paul Sandoz9fb30a32016-03-24 11:21:21 +0100637 double o = (double) vh.getAndAdd(array, i, 1.0d);
638 });
639
640 checkUOE(() -> {
641 double o = (double) vh.addAndGet(array, i, 1.0d);
642 });
643 }
644
645 static void testArrayIndexOutOfBounds(VarHandle vh) throws Throwable {
646 double[] array = new double[10];
647
648 for (int i : new int[]{-1, Integer.MIN_VALUE, 10, 11, Integer.MAX_VALUE}) {
649 final int ci = i;
650
651 checkIOOBE(() -> {
652 double x = (double) vh.get(array, ci);
653 });
654
655 checkIOOBE(() -> {
656 vh.set(array, ci, 1.0d);
657 });
658
659 checkIOOBE(() -> {
660 double x = (double) vh.getVolatile(array, ci);
661 });
662
663 checkIOOBE(() -> {
664 vh.setVolatile(array, ci, 1.0d);
665 });
666
667 checkIOOBE(() -> {
668 double x = (double) vh.getAcquire(array, ci);
669 });
670
671 checkIOOBE(() -> {
672 vh.setRelease(array, ci, 1.0d);
673 });
674
675 checkIOOBE(() -> {
676 double x = (double) vh.getOpaque(array, ci);
677 });
678
679 checkIOOBE(() -> {
680 vh.setOpaque(array, ci, 1.0d);
681 });
682
683
684 }
685 }
686}
687