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