1 /* 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 VarHandleTestAccessShort 27 * @run testng/othervm -Diters=20000 -XX:TieredStopAtLevel=1 VarHandleTestAccessShort 28 * @run testng/othervm -Diters=20000 VarHandleTestAccessShort 29 * @run testng/othervm -Diters=20000 -XX:-TieredCompilation VarHandleTestAccessShort 30 */ 31 32 import org.testng.annotations.BeforeClass; 33 import org.testng.annotations.DataProvider; 34 import org.testng.annotations.Test; 35 36 import java.lang.invoke.MethodHandles; 37 import java.lang.invoke.VarHandle; 38 import java.util.ArrayList; 39 import java.util.Arrays; 40 import java.util.List; 41 42 import static org.testng.Assert.*; 43 44 public class VarHandleTestAccessShort extends VarHandleBaseTest { 45 static final short static_final_v = (short)0x0123; 46 47 static short static_v; 48 49 final short final_v = (short)0x0123; 50 51 short 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 VarHandleTestAccessShort.class, "final_v", short.class); 67 68 vhField = MethodHandles.lookup().findVarHandle( 69 VarHandleTestAccessShort.class, "v", short.class); 70 71 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle( 72 VarHandleTestAccessShort.class, "static_final_v", short.class); 73 74 vhStaticField = MethodHandles.lookup().findStaticVarHandle( 75 VarHandleTestAccessShort.class, "static_v", short.class); 76 77 vhArray = MethodHandles.arrayElementVarHandle(short[].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) { 93 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)); 101 102 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); 103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE)); 104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); 105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); 106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_PLAIN)); 107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); 108 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); 109 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)); 110 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); 111 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET_ACQUIRE)); 112 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET_RELEASE)); 113 114 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD)); 115 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE)); 116 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE)); 117 118 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR)); 119 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE)); 120 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_RELEASE)); 121 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_AND)); 122 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_AND_ACQUIRE)); 123 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_AND_RELEASE)); 124 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_XOR)); 125 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_XOR_ACQUIRE)); 126 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_XOR_RELEASE)); 127 } 128 129 130 @DataProvider 131 public Object[][] typesProvider() throws Exception { 132 List<Object[]> types = new ArrayList<>(); 133 types.add(new Object[] {vhField, Arrays.asList(VarHandleTestAccessShort.class)}); 134 types.add(new Object[] {vhStaticField, Arrays.asList()}); 135 types.add(new Object[] {vhArray, Arrays.asList(short[].class, int.class)}); 136 137 return types.stream().toArray(Object[][]::new); 138 } 139 140 @Test(dataProvider = "typesProvider") 141 public void testTypes(VarHandle vh, List<Class<?>> pts) { 142 assertEquals(vh.varType(), short.class); 143 144 assertEquals(vh.coordinateTypes(), pts); 145 146 testTypes(vh); 147 } 148 149 150 @Test 151 public void testLookupInstanceToStatic() { 152 checkIAE("Lookup of static final field to instance final field", () -> { 153 MethodHandles.lookup().findStaticVarHandle( 154 VarHandleTestAccessShort.class, "final_v", short.class); 155 }); 156 157 checkIAE("Lookup of static field to instance field", () -> { 158 MethodHandles.lookup().findStaticVarHandle( 159 VarHandleTestAccessShort.class, "v", short.class); 160 }); 161 } 162 163 @Test 164 public void testLookupStaticToInstance() { 165 checkIAE("Lookup of instance final field to static final field", () -> { 166 MethodHandles.lookup().findVarHandle( 167 VarHandleTestAccessShort.class, "static_final_v", short.class); 168 }); 169 170 checkIAE("Lookup of instance field to static field", () -> { 171 vhStaticField = MethodHandles.lookup().findVarHandle( 172 VarHandleTestAccessShort.class, "static_v", short.class); 173 }); 174 } 175 176 177 @DataProvider 178 public Object[][] accessTestCaseProvider() throws Exception { 179 List<AccessTestCase<?>> cases = new ArrayList<>(); 180 181 cases.add(new VarHandleAccessTestCase("Instance final field", 182 vhFinalField, vh -> testInstanceFinalField(this, vh))); 183 cases.add(new VarHandleAccessTestCase("Instance final field unsupported", 184 vhFinalField, vh -> testInstanceFinalFieldUnsupported(this, vh), 185 false)); 186 187 cases.add(new VarHandleAccessTestCase("Static final field", 188 vhStaticFinalField, VarHandleTestAccessShort::testStaticFinalField)); 189 cases.add(new VarHandleAccessTestCase("Static final field unsupported", 190 vhStaticFinalField, VarHandleTestAccessShort::testStaticFinalFieldUnsupported, 191 false)); 192 193 cases.add(new VarHandleAccessTestCase("Instance field", 194 vhField, vh -> testInstanceField(this, vh))); 195 cases.add(new VarHandleAccessTestCase("Instance field unsupported", 196 vhField, vh -> testInstanceFieldUnsupported(this, vh), 197 false)); 198 199 cases.add(new VarHandleAccessTestCase("Static field", 200 vhStaticField, VarHandleTestAccessShort::testStaticField)); 201 cases.add(new VarHandleAccessTestCase("Static field unsupported", 202 vhStaticField, VarHandleTestAccessShort::testStaticFieldUnsupported, 203 false)); 204 205 cases.add(new VarHandleAccessTestCase("Array", 206 vhArray, VarHandleTestAccessShort::testArray)); 207 cases.add(new VarHandleAccessTestCase("Array unsupported", 208 vhArray, VarHandleTestAccessShort::testArrayUnsupported, 209 false)); 210 cases.add(new VarHandleAccessTestCase("Array index out of bounds", 211 vhArray, VarHandleTestAccessShort::testArrayIndexOutOfBounds, 212 false)); 213 214 // Work around issue with jtreg summary reporting which truncates 215 // the String result of Object.toString to 30 characters, hence 216 // the first dummy argument 217 return cases.stream().map(tc -> new Object[]{tc.toString(), tc}).toArray(Object[][]::new); 218 } 219 220 @Test(dataProvider = "accessTestCaseProvider") 221 public <T> void testAccess(String desc, AccessTestCase<T> atc) throws Throwable { 222 T t = atc.get(); 223 int iters = atc.requiresLoop() ? ITERS : 1; 224 for (int c = 0; c < iters; c++) { 225 atc.testAccess(t); 226 } 227 } 228 229 230 231 232 static void testInstanceFinalField(VarHandleTestAccessShort recv, VarHandle vh) { 233 // Plain 234 { 235 short x = (short) vh.get(recv); 236 assertEquals(x, (short)0x0123, "get short value"); 237 } 238 239 240 // Volatile 241 { 242 short x = (short) vh.getVolatile(recv); 243 assertEquals(x, (short)0x0123, "getVolatile short value"); 244 } 245 246 // Lazy 247 { 248 short x = (short) vh.getAcquire(recv); 249 assertEquals(x, (short)0x0123, "getRelease short value"); 250 } 251 252 // Opaque 253 { 254 short x = (short) vh.getOpaque(recv); 255 assertEquals(x, (short)0x0123, "getOpaque short value"); 256 } 257 } 258 259 static void testInstanceFinalFieldUnsupported(VarHandleTestAccessShort recv, VarHandle vh) { 260 checkUOE(() -> { 261 vh.set(recv, (short)0x4567); 262 }); 263 264 checkUOE(() -> { 265 vh.setVolatile(recv, (short)0x4567); 266 }); 267 268 checkUOE(() -> { 269 vh.setRelease(recv, (short)0x4567); 270 }); 271 272 checkUOE(() -> { 273 vh.setOpaque(recv, (short)0x4567); 274 }); 275 276 277 278 } 279 280 281 static void testStaticFinalField(VarHandle vh) { 282 // Plain 283 { 284 short x = (short) vh.get(); 285 assertEquals(x, (short)0x0123, "get short value"); 286 } 287 288 289 // Volatile 290 { 291 short x = (short) vh.getVolatile(); 292 assertEquals(x, (short)0x0123, "getVolatile short value"); 293 } 294 295 // Lazy 296 { 297 short x = (short) vh.getAcquire(); 298 assertEquals(x, (short)0x0123, "getRelease short value"); 299 } 300 301 // Opaque 302 { 303 short x = (short) vh.getOpaque(); 304 assertEquals(x, (short)0x0123, "getOpaque short value"); 305 } 306 } 307 308 static void testStaticFinalFieldUnsupported(VarHandle vh) { 309 checkUOE(() -> { 310 vh.set((short)0x4567); 311 }); 312 313 checkUOE(() -> { 314 vh.setVolatile((short)0x4567); 315 }); 316 317 checkUOE(() -> { 318 vh.setRelease((short)0x4567); 319 }); 320 321 checkUOE(() -> { 322 vh.setOpaque((short)0x4567); 323 }); 324 325 326 327 } 328 329 330 static void testInstanceField(VarHandleTestAccessShort recv, VarHandle vh) { 331 // Plain 332 { 333 vh.set(recv, (short)0x0123); 334 short x = (short) vh.get(recv); 335 assertEquals(x, (short)0x0123, "set short value"); 336 } 337 338 339 // Volatile 340 { 341 vh.setVolatile(recv, (short)0x4567); 342 short x = (short) vh.getVolatile(recv); 343 assertEquals(x, (short)0x4567, "setVolatile short value"); 344 } 345 346 // Lazy 347 { 348 vh.setRelease(recv, (short)0x0123); 349 short x = (short) vh.getAcquire(recv); 350 assertEquals(x, (short)0x0123, "setRelease short value"); 351 } 352 353 // Opaque 354 { 355 vh.setOpaque(recv, (short)0x4567); 356 short x = (short) vh.getOpaque(recv); 357 assertEquals(x, (short)0x4567, "setOpaque short value"); 358 } 359 360 vh.set(recv, (short)0x0123); 361 362 // Compare 363 { 364 boolean r = vh.compareAndSet(recv, (short)0x0123, (short)0x4567); 365 assertEquals(r, true, "success compareAndSet short"); 366 short x = (short) vh.get(recv); 367 assertEquals(x, (short)0x4567, "success compareAndSet short value"); 368 } 369 370 { 371 boolean r = vh.compareAndSet(recv, (short)0x0123, (short)0x89AB); 372 assertEquals(r, false, "failing compareAndSet short"); 373 short x = (short) vh.get(recv); 374 assertEquals(x, (short)0x4567, "failing compareAndSet short value"); 375 } 376 377 { 378 short r = (short) vh.compareAndExchange(recv, (short)0x4567, (short)0x0123); 379 assertEquals(r, (short)0x4567, "success compareAndExchange short"); 380 short x = (short) vh.get(recv); 381 assertEquals(x, (short)0x0123, "success compareAndExchange short value"); 382 } 383 384 { 385 short r = (short) vh.compareAndExchange(recv, (short)0x4567, (short)0x89AB); 386 assertEquals(r, (short)0x0123, "failing compareAndExchange short"); 387 short x = (short) vh.get(recv); 388 assertEquals(x, (short)0x0123, "failing compareAndExchange short value"); 389 } 390 391 { 392 short r = (short) vh.compareAndExchangeAcquire(recv, (short)0x0123, (short)0x4567); 393 assertEquals(r, (short)0x0123, "success compareAndExchangeAcquire short"); 394 short x = (short) vh.get(recv); 395 assertEquals(x, (short)0x4567, "success compareAndExchangeAcquire short value"); 396 } 397 398 { 399 short r = (short) vh.compareAndExchangeAcquire(recv, (short)0x0123, (short)0x89AB); 400 assertEquals(r, (short)0x4567, "failing compareAndExchangeAcquire short"); 401 short x = (short) vh.get(recv); 402 assertEquals(x, (short)0x4567, "failing compareAndExchangeAcquire short value"); 403 } 404 405 { 406 short r = (short) vh.compareAndExchangeRelease(recv, (short)0x4567, (short)0x0123); 407 assertEquals(r, (short)0x4567, "success compareAndExchangeRelease short"); 408 short x = (short) vh.get(recv); 409 assertEquals(x, (short)0x0123, "success compareAndExchangeRelease short value"); 410 } 411 412 { 413 short r = (short) vh.compareAndExchangeRelease(recv, (short)0x4567, (short)0x89AB); 414 assertEquals(r, (short)0x0123, "failing compareAndExchangeRelease short"); 415 short x = (short) vh.get(recv); 416 assertEquals(x, (short)0x0123, "failing compareAndExchangeRelease short value"); 417 } 418 419 { 420 boolean success = false; 421 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 422 success = vh.weakCompareAndSetPlain(recv, (short)0x0123, (short)0x4567); 423 } 424 assertEquals(success, true, "weakCompareAndSetPlain short"); 425 short x = (short) vh.get(recv); 426 assertEquals(x, (short)0x4567, "weakCompareAndSetPlain short value"); 427 } 428 429 { 430 boolean success = false; 431 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 432 success = vh.weakCompareAndSetAcquire(recv, (short)0x4567, (short)0x0123); 433 } 434 assertEquals(success, true, "weakCompareAndSetAcquire short"); 435 short x = (short) vh.get(recv); 436 assertEquals(x, (short)0x0123, "weakCompareAndSetAcquire short"); 437 } 438 439 { 440 boolean success = false; 441 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 442 success = vh.weakCompareAndSetRelease(recv, (short)0x0123, (short)0x4567); 443 } 444 assertEquals(success, true, "weakCompareAndSetRelease short"); 445 short x = (short) vh.get(recv); 446 assertEquals(x, (short)0x4567, "weakCompareAndSetRelease short"); 447 } 448 449 { 450 boolean success = false; 451 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 452 success = vh.weakCompareAndSet(recv, (short)0x4567, (short)0x0123); 453 } 454 assertEquals(success, true, "weakCompareAndSet short"); 455 short x = (short) vh.get(recv); 456 assertEquals(x, (short)0x0123, "weakCompareAndSet short value"); 457 } 458 459 // Compare set and get 460 { 461 vh.set(recv, (short)0x0123); 462 463 short o = (short) vh.getAndSet(recv, (short)0x4567); 464 assertEquals(o, (short)0x0123, "getAndSet short"); 465 short x = (short) vh.get(recv); 466 assertEquals(x, (short)0x4567, "getAndSet short value"); 467 } 468 469 { 470 vh.set(recv, (short)0x0123); 471 472 short o = (short) vh.getAndSetAcquire(recv, (short)0x4567); 473 assertEquals(o, (short)0x0123, "getAndSetAcquire short"); 474 short x = (short) vh.get(recv); 475 assertEquals(x, (short)0x4567, "getAndSetAcquire short value"); 476 } 477 478 { 479 vh.set(recv, (short)0x0123); 480 481 short o = (short) vh.getAndSetRelease(recv, (short)0x4567); 482 assertEquals(o, (short)0x0123, "getAndSetRelease short"); 483 short x = (short) vh.get(recv); 484 assertEquals(x, (short)0x4567, "getAndSetRelease short value"); 485 } 486 487 // get and add, add and get 488 { 489 vh.set(recv, (short)0x0123); 490 491 short o = (short) vh.getAndAdd(recv, (short)0x4567); 492 assertEquals(o, (short)0x0123, "getAndAdd short"); 493 short x = (short) vh.get(recv); 494 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value"); 495 } 496 497 { 498 vh.set(recv, (short)0x0123); 499 500 short o = (short) vh.getAndAddAcquire(recv, (short)0x4567); 501 assertEquals(o, (short)0x0123, "getAndAddAcquire short"); 502 short x = (short) vh.get(recv); 503 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAddAcquire short value"); 504 } 505 506 { 507 vh.set(recv, (short)0x0123); 508 509 short o = (short) vh.getAndAddRelease(recv, (short)0x4567); 510 assertEquals(o, (short)0x0123, "getAndAddReleaseshort"); 511 short x = (short) vh.get(recv); 512 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAddRelease short value"); 513 } 514 515 // get and bitwise or 516 { 517 vh.set(recv, (short)0x0123); 518 519 short o = (short) vh.getAndBitwiseOr(recv, (short)0x4567); 520 assertEquals(o, (short)0x0123, "getAndBitwiseOr short"); 521 short x = (short) vh.get(recv); 522 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOr short value"); 523 } 524 525 { 526 vh.set(recv, (short)0x0123); 527 528 short o = (short) vh.getAndBitwiseOrAcquire(recv, (short)0x4567); 529 assertEquals(o, (short)0x0123, "getAndBitwiseOrAcquire short"); 530 short x = (short) vh.get(recv); 531 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOrAcquire short value"); 532 } 533 534 { 535 vh.set(recv, (short)0x0123); 536 537 short o = (short) vh.getAndBitwiseOrRelease(recv, (short)0x4567); 538 assertEquals(o, (short)0x0123, "getAndBitwiseOrRelease short"); 539 short x = (short) vh.get(recv); 540 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOrRelease short value"); 541 } 542 543 // get and bitwise and 544 { 545 vh.set(recv, (short)0x0123); 546 547 short o = (short) vh.getAndBitwiseAnd(recv, (short)0x4567); 548 assertEquals(o, (short)0x0123, "getAndBitwiseAnd short"); 549 short x = (short) vh.get(recv); 550 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAnd short value"); 551 } 552 553 { 554 vh.set(recv, (short)0x0123); 555 556 short o = (short) vh.getAndBitwiseAndAcquire(recv, (short)0x4567); 557 assertEquals(o, (short)0x0123, "getAndBitwiseAndAcquire short"); 558 short x = (short) vh.get(recv); 559 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAndAcquire short value"); 560 } 561 562 { 563 vh.set(recv, (short)0x0123); 564 565 short o = (short) vh.getAndBitwiseAndRelease(recv, (short)0x4567); 566 assertEquals(o, (short)0x0123, "getAndBitwiseAndRelease short"); 567 short x = (short) vh.get(recv); 568 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAndRelease short value"); 569 } 570 571 // get and bitwise xor 572 { 573 vh.set(recv, (short)0x0123); 574 575 short o = (short) vh.getAndBitwiseXor(recv, (short)0x4567); 576 assertEquals(o, (short)0x0123, "getAndBitwiseXor short"); 577 short x = (short) vh.get(recv); 578 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXor short value"); 579 } 580 581 { 582 vh.set(recv, (short)0x0123); 583 584 short o = (short) vh.getAndBitwiseXorAcquire(recv, (short)0x4567); 585 assertEquals(o, (short)0x0123, "getAndBitwiseXorAcquire short"); 586 short x = (short) vh.get(recv); 587 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXorAcquire short value"); 588 } 589 590 { 591 vh.set(recv, (short)0x0123); 592 593 short o = (short) vh.getAndBitwiseXorRelease(recv, (short)0x4567); 594 assertEquals(o, (short)0x0123, "getAndBitwiseXorRelease short"); 595 short x = (short) vh.get(recv); 596 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXorRelease short value"); 597 } 598 } 599 600 static void testInstanceFieldUnsupported(VarHandleTestAccessShort recv, VarHandle vh) { 601 602 603 } 604 605 606 static void testStaticField(VarHandle vh) { 607 // Plain 608 { 609 vh.set((short)0x0123); 610 short x = (short) vh.get(); 611 assertEquals(x, (short)0x0123, "set short value"); 612 } 613 614 615 // Volatile 616 { 617 vh.setVolatile((short)0x4567); 618 short x = (short) vh.getVolatile(); 619 assertEquals(x, (short)0x4567, "setVolatile short value"); 620 } 621 622 // Lazy 623 { 624 vh.setRelease((short)0x0123); 625 short x = (short) vh.getAcquire(); 626 assertEquals(x, (short)0x0123, "setRelease short value"); 627 } 628 629 // Opaque 630 { 631 vh.setOpaque((short)0x4567); 632 short x = (short) vh.getOpaque(); 633 assertEquals(x, (short)0x4567, "setOpaque short value"); 634 } 635 636 vh.set((short)0x0123); 637 638 // Compare 639 { 640 boolean r = vh.compareAndSet((short)0x0123, (short)0x4567); 641 assertEquals(r, true, "success compareAndSet short"); 642 short x = (short) vh.get(); 643 assertEquals(x, (short)0x4567, "success compareAndSet short value"); 644 } 645 646 { 647 boolean r = vh.compareAndSet((short)0x0123, (short)0x89AB); 648 assertEquals(r, false, "failing compareAndSet short"); 649 short x = (short) vh.get(); 650 assertEquals(x, (short)0x4567, "failing compareAndSet short value"); 651 } 652 653 { 654 short r = (short) vh.compareAndExchange((short)0x4567, (short)0x0123); 655 assertEquals(r, (short)0x4567, "success compareAndExchange short"); 656 short x = (short) vh.get(); 657 assertEquals(x, (short)0x0123, "success compareAndExchange short value"); 658 } 659 660 { 661 short r = (short) vh.compareAndExchange((short)0x4567, (short)0x89AB); 662 assertEquals(r, (short)0x0123, "failing compareAndExchange short"); 663 short x = (short) vh.get(); 664 assertEquals(x, (short)0x0123, "failing compareAndExchange short value"); 665 } 666 667 { 668 short r = (short) vh.compareAndExchangeAcquire((short)0x0123, (short)0x4567); 669 assertEquals(r, (short)0x0123, "success compareAndExchangeAcquire short"); 670 short x = (short) vh.get(); 671 assertEquals(x, (short)0x4567, "success compareAndExchangeAcquire short value"); 672 } 673 674 { 675 short r = (short) vh.compareAndExchangeAcquire((short)0x0123, (short)0x89AB); 676 assertEquals(r, (short)0x4567, "failing compareAndExchangeAcquire short"); 677 short x = (short) vh.get(); 678 assertEquals(x, (short)0x4567, "failing compareAndExchangeAcquire short value"); 679 } 680 681 { 682 short r = (short) vh.compareAndExchangeRelease((short)0x4567, (short)0x0123); 683 assertEquals(r, (short)0x4567, "success compareAndExchangeRelease short"); 684 short x = (short) vh.get(); 685 assertEquals(x, (short)0x0123, "success compareAndExchangeRelease short value"); 686 } 687 688 { 689 short r = (short) vh.compareAndExchangeRelease((short)0x4567, (short)0x89AB); 690 assertEquals(r, (short)0x0123, "failing compareAndExchangeRelease short"); 691 short x = (short) vh.get(); 692 assertEquals(x, (short)0x0123, "failing compareAndExchangeRelease short value"); 693 } 694 695 { 696 boolean success = false; 697 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 698 success = vh.weakCompareAndSetPlain((short)0x0123, (short)0x4567); 699 } 700 assertEquals(success, true, "weakCompareAndSetPlain short"); 701 short x = (short) vh.get(); 702 assertEquals(x, (short)0x4567, "weakCompareAndSetPlain short value"); 703 } 704 705 { 706 boolean success = false; 707 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 708 success = vh.weakCompareAndSetAcquire((short)0x4567, (short)0x0123); 709 } 710 assertEquals(success, true, "weakCompareAndSetAcquire short"); 711 short x = (short) vh.get(); 712 assertEquals(x, (short)0x0123, "weakCompareAndSetAcquire short"); 713 } 714 715 { 716 boolean success = false; 717 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 718 success = vh.weakCompareAndSetRelease((short)0x0123, (short)0x4567); 719 } 720 assertEquals(success, true, "weakCompareAndSetRelease short"); 721 short x = (short) vh.get(); 722 assertEquals(x, (short)0x4567, "weakCompareAndSetRelease short"); 723 } 724 725 { 726 boolean success = false; 727 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 728 success = vh.weakCompareAndSet((short)0x4567, (short)0x0123); 729 } 730 assertEquals(success, true, "weakCompareAndSet short"); 731 short x = (short) vh.get(); 732 assertEquals(x, (short)0x0123, "weakCompareAndSet short"); 733 } 734 735 // Compare set and get 736 { 737 vh.set((short)0x0123); 738 739 short o = (short) vh.getAndSet((short)0x4567); 740 assertEquals(o, (short)0x0123, "getAndSet short"); 741 short x = (short) vh.get(); 742 assertEquals(x, (short)0x4567, "getAndSet short value"); 743 } 744 745 { 746 vh.set((short)0x0123); 747 748 short o = (short) vh.getAndSetAcquire((short)0x4567); 749 assertEquals(o, (short)0x0123, "getAndSetAcquire short"); 750 short x = (short) vh.get(); 751 assertEquals(x, (short)0x4567, "getAndSetAcquire short value"); 752 } 753 754 { 755 vh.set((short)0x0123); 756 757 short o = (short) vh.getAndSetRelease((short)0x4567); 758 assertEquals(o, (short)0x0123, "getAndSetRelease short"); 759 short x = (short) vh.get(); 760 assertEquals(x, (short)0x4567, "getAndSetRelease short value"); 761 } 762 763 // get and add, add and get 764 { 765 vh.set((short)0x0123); 766 767 short o = (short) vh.getAndAdd((short)0x4567); 768 assertEquals(o, (short)0x0123, "getAndAdd short"); 769 short x = (short) vh.get(); 770 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value"); 771 } 772 773 { 774 vh.set((short)0x0123); 775 776 short o = (short) vh.getAndAddAcquire((short)0x4567); 777 assertEquals(o, (short)0x0123, "getAndAddAcquire short"); 778 short x = (short) vh.get(); 779 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAddAcquire short value"); 780 } 781 782 { 783 vh.set((short)0x0123); 784 785 short o = (short) vh.getAndAddRelease((short)0x4567); 786 assertEquals(o, (short)0x0123, "getAndAddReleaseshort"); 787 short x = (short) vh.get(); 788 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAddRelease short value"); 789 } 790 791 // get and bitwise or 792 { 793 vh.set((short)0x0123); 794 795 short o = (short) vh.getAndBitwiseOr((short)0x4567); 796 assertEquals(o, (short)0x0123, "getAndBitwiseOr short"); 797 short x = (short) vh.get(); 798 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOr short value"); 799 } 800 801 { 802 vh.set((short)0x0123); 803 804 short o = (short) vh.getAndBitwiseOrAcquire((short)0x4567); 805 assertEquals(o, (short)0x0123, "getAndBitwiseOrAcquire short"); 806 short x = (short) vh.get(); 807 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOrAcquire short value"); 808 } 809 810 { 811 vh.set((short)0x0123); 812 813 short o = (short) vh.getAndBitwiseOrRelease((short)0x4567); 814 assertEquals(o, (short)0x0123, "getAndBitwiseOrRelease short"); 815 short x = (short) vh.get(); 816 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOrRelease short value"); 817 } 818 819 // get and bitwise and 820 { 821 vh.set((short)0x0123); 822 823 short o = (short) vh.getAndBitwiseAnd((short)0x4567); 824 assertEquals(o, (short)0x0123, "getAndBitwiseAnd short"); 825 short x = (short) vh.get(); 826 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAnd short value"); 827 } 828 829 { 830 vh.set((short)0x0123); 831 832 short o = (short) vh.getAndBitwiseAndAcquire((short)0x4567); 833 assertEquals(o, (short)0x0123, "getAndBitwiseAndAcquire short"); 834 short x = (short) vh.get(); 835 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAndAcquire short value"); 836 } 837 838 { 839 vh.set((short)0x0123); 840 841 short o = (short) vh.getAndBitwiseAndRelease((short)0x4567); 842 assertEquals(o, (short)0x0123, "getAndBitwiseAndRelease short"); 843 short x = (short) vh.get(); 844 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAndRelease short value"); 845 } 846 847 // get and bitwise xor 848 { 849 vh.set((short)0x0123); 850 851 short o = (short) vh.getAndBitwiseXor((short)0x4567); 852 assertEquals(o, (short)0x0123, "getAndBitwiseXor short"); 853 short x = (short) vh.get(); 854 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXor short value"); 855 } 856 857 { 858 vh.set((short)0x0123); 859 860 short o = (short) vh.getAndBitwiseXorAcquire((short)0x4567); 861 assertEquals(o, (short)0x0123, "getAndBitwiseXorAcquire short"); 862 short x = (short) vh.get(); 863 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXorAcquire short value"); 864 } 865 866 { 867 vh.set((short)0x0123); 868 869 short o = (short) vh.getAndBitwiseXorRelease((short)0x4567); 870 assertEquals(o, (short)0x0123, "getAndBitwiseXorRelease short"); 871 short x = (short) vh.get(); 872 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXorRelease short value"); 873 } 874 } 875 876 static void testStaticFieldUnsupported(VarHandle vh) { 877 878 879 } 880 881 882 static void testArray(VarHandle vh) { 883 short[] array = new short[10]; 884 885 for (int i = 0; i < array.length; i++) { 886 // Plain 887 { 888 vh.set(array, i, (short)0x0123); 889 short x = (short) vh.get(array, i); 890 assertEquals(x, (short)0x0123, "get short value"); 891 } 892 893 894 // Volatile 895 { 896 vh.setVolatile(array, i, (short)0x4567); 897 short x = (short) vh.getVolatile(array, i); 898 assertEquals(x, (short)0x4567, "setVolatile short value"); 899 } 900 901 // Lazy 902 { 903 vh.setRelease(array, i, (short)0x0123); 904 short x = (short) vh.getAcquire(array, i); 905 assertEquals(x, (short)0x0123, "setRelease short value"); 906 } 907 908 // Opaque 909 { 910 vh.setOpaque(array, i, (short)0x4567); 911 short x = (short) vh.getOpaque(array, i); 912 assertEquals(x, (short)0x4567, "setOpaque short value"); 913 } 914 915 vh.set(array, i, (short)0x0123); 916 917 // Compare 918 { 919 boolean r = vh.compareAndSet(array, i, (short)0x0123, (short)0x4567); 920 assertEquals(r, true, "success compareAndSet short"); 921 short x = (short) vh.get(array, i); 922 assertEquals(x, (short)0x4567, "success compareAndSet short value"); 923 } 924 925 { 926 boolean r = vh.compareAndSet(array, i, (short)0x0123, (short)0x89AB); 927 assertEquals(r, false, "failing compareAndSet short"); 928 short x = (short) vh.get(array, i); 929 assertEquals(x, (short)0x4567, "failing compareAndSet short value"); 930 } 931 932 { 933 short r = (short) vh.compareAndExchange(array, i, (short)0x4567, (short)0x0123); 934 assertEquals(r, (short)0x4567, "success compareAndExchange short"); 935 short x = (short) vh.get(array, i); 936 assertEquals(x, (short)0x0123, "success compareAndExchange short value"); 937 } 938 939 { 940 short r = (short) vh.compareAndExchange(array, i, (short)0x4567, (short)0x89AB); 941 assertEquals(r, (short)0x0123, "failing compareAndExchange short"); 942 short x = (short) vh.get(array, i); 943 assertEquals(x, (short)0x0123, "failing compareAndExchange short value"); 944 } 945 946 { 947 short r = (short) vh.compareAndExchangeAcquire(array, i, (short)0x0123, (short)0x4567); 948 assertEquals(r, (short)0x0123, "success compareAndExchangeAcquire short"); 949 short x = (short) vh.get(array, i); 950 assertEquals(x, (short)0x4567, "success compareAndExchangeAcquire short value"); 951 } 952 953 { 954 short r = (short) vh.compareAndExchangeAcquire(array, i, (short)0x0123, (short)0x89AB); 955 assertEquals(r, (short)0x4567, "failing compareAndExchangeAcquire short"); 956 short x = (short) vh.get(array, i); 957 assertEquals(x, (short)0x4567, "failing compareAndExchangeAcquire short value"); 958 } 959 960 { 961 short r = (short) vh.compareAndExchangeRelease(array, i, (short)0x4567, (short)0x0123); 962 assertEquals(r, (short)0x4567, "success compareAndExchangeRelease short"); 963 short x = (short) vh.get(array, i); 964 assertEquals(x, (short)0x0123, "success compareAndExchangeRelease short value"); 965 } 966 967 { 968 short r = (short) vh.compareAndExchangeRelease(array, i, (short)0x4567, (short)0x89AB); 969 assertEquals(r, (short)0x0123, "failing compareAndExchangeRelease short"); 970 short x = (short) vh.get(array, i); 971 assertEquals(x, (short)0x0123, "failing compareAndExchangeRelease short value"); 972 } 973 974 { 975 boolean success = false; 976 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 977 success = vh.weakCompareAndSetPlain(array, i, (short)0x0123, (short)0x4567); 978 } 979 assertEquals(success, true, "weakCompareAndSetPlain short"); 980 short x = (short) vh.get(array, i); 981 assertEquals(x, (short)0x4567, "weakCompareAndSetPlain short value"); 982 } 983 984 { 985 boolean success = false; 986 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 987 success = vh.weakCompareAndSetAcquire(array, i, (short)0x4567, (short)0x0123); 988 } 989 assertEquals(success, true, "weakCompareAndSetAcquire short"); 990 short x = (short) vh.get(array, i); 991 assertEquals(x, (short)0x0123, "weakCompareAndSetAcquire short"); 992 } 993 994 { 995 boolean success = false; 996 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 997 success = vh.weakCompareAndSetRelease(array, i, (short)0x0123, (short)0x4567); 998 } 999 assertEquals(success, true, "weakCompareAndSetRelease short"); 1000 short x = (short) vh.get(array, i); 1001 assertEquals(x, (short)0x4567, "weakCompareAndSetRelease short"); 1002 } 1003 1004 { 1005 boolean success = false; 1006 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 1007 success = vh.weakCompareAndSet(array, i, (short)0x4567, (short)0x0123); 1008 } 1009 assertEquals(success, true, "weakCompareAndSet short"); 1010 short x = (short) vh.get(array, i); 1011 assertEquals(x, (short)0x0123, "weakCompareAndSet short"); 1012 } 1013 1014 // Compare set and get 1015 { 1016 vh.set(array, i, (short)0x0123); 1017 1018 short o = (short) vh.getAndSet(array, i, (short)0x4567); 1019 assertEquals(o, (short)0x0123, "getAndSet short"); 1020 short x = (short) vh.get(array, i); 1021 assertEquals(x, (short)0x4567, "getAndSet short value"); 1022 } 1023 1024 { 1025 vh.set(array, i, (short)0x0123); 1026 1027 short o = (short) vh.getAndSetAcquire(array, i, (short)0x4567); 1028 assertEquals(o, (short)0x0123, "getAndSetAcquire short"); 1029 short x = (short) vh.get(array, i); 1030 assertEquals(x, (short)0x4567, "getAndSetAcquire short value"); 1031 } 1032 1033 { 1034 vh.set(array, i, (short)0x0123); 1035 1036 short o = (short) vh.getAndSetRelease(array, i, (short)0x4567); 1037 assertEquals(o, (short)0x0123, "getAndSetRelease short"); 1038 short x = (short) vh.get(array, i); 1039 assertEquals(x, (short)0x4567, "getAndSetRelease short value"); 1040 } 1041 1042 // get and add, add and get 1043 { 1044 vh.set(array, i, (short)0x0123); 1045 1046 short o = (short) vh.getAndAdd(array, i, (short)0x4567); 1047 assertEquals(o, (short)0x0123, "getAndAdd short"); 1048 short x = (short) vh.get(array, i); 1049 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value"); 1050 } 1051 1052 { 1053 vh.set(array, i, (short)0x0123); 1054 1055 short o = (short) vh.getAndAddAcquire(array, i, (short)0x4567); 1056 assertEquals(o, (short)0x0123, "getAndAddAcquire short"); 1057 short x = (short) vh.get(array, i); 1058 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAddAcquire short value"); 1059 } 1060 1061 { 1062 vh.set(array, i, (short)0x0123); 1063 1064 short o = (short) vh.getAndAddRelease(array, i, (short)0x4567); 1065 assertEquals(o, (short)0x0123, "getAndAddReleaseshort"); 1066 short x = (short) vh.get(array, i); 1067 assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAddRelease short value"); 1068 } 1069 1070 // get and bitwise or 1071 { 1072 vh.set(array, i, (short)0x0123); 1073 1074 short o = (short) vh.getAndBitwiseOr(array, i, (short)0x4567); 1075 assertEquals(o, (short)0x0123, "getAndBitwiseOr short"); 1076 short x = (short) vh.get(array, i); 1077 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOr short value"); 1078 } 1079 1080 { 1081 vh.set(array, i, (short)0x0123); 1082 1083 short o = (short) vh.getAndBitwiseOrAcquire(array, i, (short)0x4567); 1084 assertEquals(o, (short)0x0123, "getAndBitwiseOrAcquire short"); 1085 short x = (short) vh.get(array, i); 1086 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOrAcquire short value"); 1087 } 1088 1089 { 1090 vh.set(array, i, (short)0x0123); 1091 1092 short o = (short) vh.getAndBitwiseOrRelease(array, i, (short)0x4567); 1093 assertEquals(o, (short)0x0123, "getAndBitwiseOrRelease short"); 1094 short x = (short) vh.get(array, i); 1095 assertEquals(x, (short)((short)0x0123 | (short)0x4567), "getAndBitwiseOrRelease short value"); 1096 } 1097 1098 // get and bitwise and 1099 { 1100 vh.set(array, i, (short)0x0123); 1101 1102 short o = (short) vh.getAndBitwiseAnd(array, i, (short)0x4567); 1103 assertEquals(o, (short)0x0123, "getAndBitwiseAnd short"); 1104 short x = (short) vh.get(array, i); 1105 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAnd short value"); 1106 } 1107 1108 { 1109 vh.set(array, i, (short)0x0123); 1110 1111 short o = (short) vh.getAndBitwiseAndAcquire(array, i, (short)0x4567); 1112 assertEquals(o, (short)0x0123, "getAndBitwiseAndAcquire short"); 1113 short x = (short) vh.get(array, i); 1114 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAndAcquire short value"); 1115 } 1116 1117 { 1118 vh.set(array, i, (short)0x0123); 1119 1120 short o = (short) vh.getAndBitwiseAndRelease(array, i, (short)0x4567); 1121 assertEquals(o, (short)0x0123, "getAndBitwiseAndRelease short"); 1122 short x = (short) vh.get(array, i); 1123 assertEquals(x, (short)((short)0x0123 & (short)0x4567), "getAndBitwiseAndRelease short value"); 1124 } 1125 1126 // get and bitwise xor 1127 { 1128 vh.set(array, i, (short)0x0123); 1129 1130 short o = (short) vh.getAndBitwiseXor(array, i, (short)0x4567); 1131 assertEquals(o, (short)0x0123, "getAndBitwiseXor short"); 1132 short x = (short) vh.get(array, i); 1133 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXor short value"); 1134 } 1135 1136 { 1137 vh.set(array, i, (short)0x0123); 1138 1139 short o = (short) vh.getAndBitwiseXorAcquire(array, i, (short)0x4567); 1140 assertEquals(o, (short)0x0123, "getAndBitwiseXorAcquire short"); 1141 short x = (short) vh.get(array, i); 1142 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXorAcquire short value"); 1143 } 1144 1145 { 1146 vh.set(array, i, (short)0x0123); 1147 1148 short o = (short) vh.getAndBitwiseXorRelease(array, i, (short)0x4567); 1149 assertEquals(o, (short)0x0123, "getAndBitwiseXorRelease short"); 1150 short x = (short) vh.get(array, i); 1151 assertEquals(x, (short)((short)0x0123 ^ (short)0x4567), "getAndBitwiseXorRelease short value"); 1152 } 1153 } 1154 } 1155 1156 static void testArrayUnsupported(VarHandle vh) { 1157 short[] array = new short[10]; 1158 1159 int i = 0; 1160 1161 1162 } 1163 1164 static void testArrayIndexOutOfBounds(VarHandle vh) throws Throwable { 1165 short[] array = new short[10]; 1166 1167 for (int i : new int[]{-1, Integer.MIN_VALUE, 10, 11, Integer.MAX_VALUE}) { 1168 final int ci = i; 1169 1170 checkIOOBE(() -> { 1171 short x = (short) vh.get(array, ci); 1172 }); 1173 1174 checkIOOBE(() -> { 1175 vh.set(array, ci, (short)0x0123); 1176 }); 1177 1178 checkIOOBE(() -> { 1179 short x = (short) vh.getVolatile(array, ci); 1180 }); 1181 1182 checkIOOBE(() -> { 1183 vh.setVolatile(array, ci, (short)0x0123); 1184 }); 1185 1186 checkIOOBE(() -> { 1187 short x = (short) vh.getAcquire(array, ci); 1188 }); 1189 1190 checkIOOBE(() -> { 1191 vh.setRelease(array, ci, (short)0x0123); 1192 }); 1193 1194 checkIOOBE(() -> { 1195 short x = (short) vh.getOpaque(array, ci); 1196 }); 1197 1198 checkIOOBE(() -> { 1199 vh.setOpaque(array, ci, (short)0x0123); 1200 }); 1201 1202 checkIOOBE(() -> { 1203 boolean r = vh.compareAndSet(array, ci, (short)0x0123, (short)0x4567); 1204 }); 1205 1206 checkIOOBE(() -> { 1207 short r = (short) vh.compareAndExchange(array, ci, (short)0x4567, (short)0x0123); 1208 }); 1209 1210 checkIOOBE(() -> { 1211 short r = (short) vh.compareAndExchangeAcquire(array, ci, (short)0x4567, (short)0x0123); 1212 }); 1213 1214 checkIOOBE(() -> { 1215 short r = (short) vh.compareAndExchangeRelease(array, ci, (short)0x4567, (short)0x0123); 1216 }); 1217 1218 checkIOOBE(() -> { 1219 boolean r = vh.weakCompareAndSetPlain(array, ci, (short)0x0123, (short)0x4567); 1220 }); 1221 1222 checkIOOBE(() -> { 1223 boolean r = vh.weakCompareAndSet(array, ci, (short)0x0123, (short)0x4567); 1224 }); 1225 1226 checkIOOBE(() -> { 1227 boolean r = vh.weakCompareAndSetAcquire(array, ci, (short)0x0123, (short)0x4567); 1228 }); 1229 1230 checkIOOBE(() -> { 1231 boolean r = vh.weakCompareAndSetRelease(array, ci, (short)0x0123, (short)0x4567); 1232 }); 1233 1234 checkIOOBE(() -> { 1235 short o = (short) vh.getAndSet(array, ci, (short)0x0123); 1236 }); 1237 1238 checkIOOBE(() -> { 1239 short o = (short) vh.getAndSetAcquire(array, ci, (short)0x0123); 1240 }); 1241 1242 checkIOOBE(() -> { 1243 short o = (short) vh.getAndSetRelease(array, ci, (short)0x0123); 1244 }); 1245 1246 checkIOOBE(() -> { 1247 short o = (short) vh.getAndAdd(array, ci, (short)0x0123); 1248 }); 1249 1250 checkIOOBE(() -> { 1251 short o = (short) vh.getAndAddAcquire(array, ci, (short)0x0123); 1252 }); 1253 1254 checkIOOBE(() -> { 1255 short o = (short) vh.getAndAddRelease(array, ci, (short)0x0123); 1256 }); 1257 1258 checkIOOBE(() -> { 1259 short o = (short) vh.getAndBitwiseOr(array, ci, (short)0x0123); 1260 }); 1261 1262 checkIOOBE(() -> { 1263 short o = (short) vh.getAndBitwiseOrAcquire(array, ci, (short)0x0123); 1264 }); 1265 1266 checkIOOBE(() -> { 1267 short o = (short) vh.getAndBitwiseOrRelease(array, ci, (short)0x0123); 1268 }); 1269 1270 checkIOOBE(() -> { 1271 short o = (short) vh.getAndBitwiseAnd(array, ci, (short)0x0123); 1272 }); 1273 1274 checkIOOBE(() -> { 1275 short o = (short) vh.getAndBitwiseAndAcquire(array, ci, (short)0x0123); 1276 }); 1277 1278 checkIOOBE(() -> { 1279 short o = (short) vh.getAndBitwiseAndRelease(array, ci, (short)0x0123); 1280 }); 1281 1282 checkIOOBE(() -> { 1283 short o = (short) vh.getAndBitwiseXor(array, ci, (short)0x0123); 1284 }); 1285 1286 checkIOOBE(() -> { 1287 short o = (short) vh.getAndBitwiseXorAcquire(array, ci, (short)0x0123); 1288 }); 1289 1290 checkIOOBE(() -> { 1291 short o = (short) vh.getAndBitwiseXorRelease(array, ci, (short)0x0123); 1292 }); 1293 } 1294 } 1295 } 1296