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 VarHandleTestMethodHandleAccessByte 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 VarHandleTestMethodHandleAccessByte extends VarHandleBaseTest { 44 static final byte static_final_v = (byte)0x01; 45 46 static byte static_v; 47 48 final byte final_v = (byte)0x01; 49 50 byte 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 VarHandleTestMethodHandleAccessByte.class, "final_v", byte.class); 68 69 vhField = MethodHandles.lookup().findVarHandle( 70 VarHandleTestMethodHandleAccessByte.class, "v", byte.class); 71 72 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle( 73 VarHandleTestMethodHandleAccessByte.class, "static_final_v", byte.class); 74 75 vhStaticField = MethodHandles.lookup().findStaticVarHandle( 76 VarHandleTestMethodHandleAccessByte.class, "static_v", byte.class); 77 78 vhArray = MethodHandles.arrayElementVarHandle(byte[].class); 79 80 vhValueTypeField = MethodHandles.lookup().findVarHandle( 81 Value.class, "byte_v", byte.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, VarHandleTestMethodHandleAccessByte::testStaticField)); 98 cases.add(new MethodHandleAccessTestCase("Static field unsupported", 99 vhStaticField, f, VarHandleTestMethodHandleAccessByte::testStaticFieldUnsupported, 100 false)); 101 102 cases.add(new MethodHandleAccessTestCase("Array", 103 vhArray, f, VarHandleTestMethodHandleAccessByte::testArray)); 104 cases.add(new MethodHandleAccessTestCase("Array unsupported", 105 vhArray, f, VarHandleTestMethodHandleAccessByte::testArrayUnsupported, 106 false)); 107 cases.add(new MethodHandleAccessTestCase("Array index out of bounds", 108 vhArray, f, VarHandleTestMethodHandleAccessByte::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(VarHandleTestMethodHandleAccessByte recv, Handles hs) throws Throwable { 134 // Plain 135 { 136 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 137 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 138 assertEquals(x, (byte)0x01, "set byte value"); 139 } 140 141 142 // Volatile 143 { 144 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, (byte)0x23); 145 byte x = (byte) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv); 146 assertEquals(x, (byte)0x23, "setVolatile byte value"); 147 } 148 149 // Lazy 150 { 151 hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, (byte)0x01); 152 byte x = (byte) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv); 153 assertEquals(x, (byte)0x01, "setRelease byte value"); 154 } 155 156 // Opaque 157 { 158 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, (byte)0x23); 159 byte x = (byte) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv); 160 assertEquals(x, (byte)0x23, "setOpaque byte value"); 161 } 162 163 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 164 165 // Compare 166 { 167 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, (byte)0x01, (byte)0x23); 168 assertEquals(r, true, "success compareAndSet byte"); 169 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 170 assertEquals(x, (byte)0x23, "success compareAndSet byte value"); 171 } 172 173 { 174 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, (byte)0x01, (byte)0x45); 175 assertEquals(r, false, "failing compareAndSet byte"); 176 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 177 assertEquals(x, (byte)0x23, "failing compareAndSet byte value"); 178 } 179 180 { 181 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(recv, (byte)0x23, (byte)0x01); 182 assertEquals(r, (byte)0x23, "success compareAndExchange byte"); 183 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 184 assertEquals(x, (byte)0x01, "success compareAndExchange byte value"); 185 } 186 187 { 188 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(recv, (byte)0x23, (byte)0x45); 189 assertEquals(r, (byte)0x01, "failing compareAndExchange byte"); 190 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 191 assertEquals(x, (byte)0x01, "failing compareAndExchange byte value"); 192 } 193 194 { 195 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, (byte)0x01, (byte)0x23); 196 assertEquals(r, (byte)0x01, "success compareAndExchangeAcquire byte"); 197 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 198 assertEquals(x, (byte)0x23, "success compareAndExchangeAcquire byte value"); 199 } 200 201 { 202 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, (byte)0x01, (byte)0x45); 203 assertEquals(r, (byte)0x23, "failing compareAndExchangeAcquire byte"); 204 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 205 assertEquals(x, (byte)0x23, "failing compareAndExchangeAcquire byte value"); 206 } 207 208 { 209 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, (byte)0x23, (byte)0x01); 210 assertEquals(r, (byte)0x23, "success compareAndExchangeRelease byte"); 211 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 212 assertEquals(x, (byte)0x01, "success compareAndExchangeRelease byte value"); 213 } 214 215 { 216 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, (byte)0x23, (byte)0x45); 217 assertEquals(r, (byte)0x01, "failing compareAndExchangeRelease byte"); 218 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 219 assertEquals(x, (byte)0x01, "failing compareAndExchangeRelease byte 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, (byte)0x01, (byte)0x23); 226 } 227 assertEquals(success, true, "weakCompareAndSetPlain byte"); 228 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 229 assertEquals(x, (byte)0x23, "weakCompareAndSetPlain byte 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, (byte)0x23, (byte)0x01); 236 } 237 assertEquals(success, true, "weakCompareAndSetAcquire byte"); 238 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 239 assertEquals(x, (byte)0x01, "weakCompareAndSetAcquire byte"); 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, (byte)0x01, (byte)0x23); 246 } 247 assertEquals(success, true, "weakCompareAndSetRelease byte"); 248 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 249 assertEquals(x, (byte)0x23, "weakCompareAndSetRelease byte"); 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, (byte)0x23, (byte)0x01); 256 } 257 assertEquals(success, true, "weakCompareAndSet byte"); 258 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 259 assertEquals(x, (byte)0x01, "weakCompareAndSet byte"); 260 } 261 262 // Compare set and get 263 { 264 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET).invokeExact(recv, (byte)0x23); 265 assertEquals(o, (byte)0x01, "getAndSet byte"); 266 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 267 assertEquals(x, (byte)0x23, "getAndSet byte value"); 268 } 269 270 // get and add, add and get 271 { 272 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 273 274 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, (byte)0x23); 275 assertEquals(o, (byte)0x01, "getAndAdd byte"); 276 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 277 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value"); 278 } 279 280 { 281 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 282 283 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD_ACQUIRE).invokeExact(recv, (byte)0x23); 284 assertEquals(o, (byte)0x01, "getAndAddAcquire byte"); 285 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 286 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAddAcquire byte value"); 287 } 288 289 { 290 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 291 292 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD_RELEASE).invokeExact(recv, (byte)0x23); 293 assertEquals(o, (byte)0x01, "getAndAddRelease byte"); 294 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 295 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAddRelease byte value"); 296 } 297 298 // get and bitwise or 299 { 300 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 301 302 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR).invokeExact(recv, (byte)0x23); 303 assertEquals(o, (byte)0x01, "getAndBitwiseOr byte"); 304 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 305 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOr byte value"); 306 } 307 308 { 309 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 310 311 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR_ACQUIRE).invokeExact(recv, (byte)0x23); 312 assertEquals(o, (byte)0x01, "getAndBitwiseOrAcquire byte"); 313 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 314 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOrAcquire byte value"); 315 } 316 317 { 318 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 319 320 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR_RELEASE).invokeExact(recv, (byte)0x23); 321 assertEquals(o, (byte)0x01, "getAndBitwiseOrRelease byte"); 322 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 323 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOrRelease byte value"); 324 } 325 326 // get and bitwise and 327 { 328 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 329 330 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND).invokeExact(recv, (byte)0x23); 331 assertEquals(o, (byte)0x01, "getAndBitwiseAnd byte"); 332 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 333 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAnd byte value"); 334 } 335 336 { 337 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 338 339 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND_ACQUIRE).invokeExact(recv, (byte)0x23); 340 assertEquals(o, (byte)0x01, "getAndBitwiseAndAcquire byte"); 341 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 342 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAndAcquire byte value"); 343 } 344 345 { 346 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 347 348 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND_RELEASE).invokeExact(recv, (byte)0x23); 349 assertEquals(o, (byte)0x01, "getAndBitwiseAndRelease byte"); 350 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 351 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAndRelease byte value"); 352 } 353 354 // get and bitwise xor 355 { 356 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 357 358 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR).invokeExact(recv, (byte)0x23); 359 assertEquals(o, (byte)0x01, "getAndBitwiseXor byte"); 360 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 361 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXor byte value"); 362 } 363 364 { 365 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 366 367 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_ACQUIRE).invokeExact(recv, (byte)0x23); 368 assertEquals(o, (byte)0x01, "getAndBitwiseXorAcquire byte"); 369 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 370 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXorAcquire byte value"); 371 } 372 373 { 374 hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01); 375 376 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_RELEASE).invokeExact(recv, (byte)0x23); 377 assertEquals(o, (byte)0x01, "getAndBitwiseXorRelease byte"); 378 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 379 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXorRelease byte value"); 380 } 381 } 382 383 static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessByte recv, Handles hs) throws Throwable { 384 385 386 } 387 388 static void testValueTypeField(Value recv, Handles hs) throws Throwable { 389 // Plain 390 { 391 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv); 392 assertEquals(x, (byte)0x01, "get byte 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, (byte)0x01); 401 }); 402 } 403 404 405 } 406 407 static void testStaticField(Handles hs) throws Throwable { 408 // Plain 409 { 410 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 411 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 412 assertEquals(x, (byte)0x01, "set byte value"); 413 } 414 415 416 // Volatile 417 { 418 hs.get(TestAccessMode.SET_VOLATILE).invokeExact((byte)0x23); 419 byte x = (byte) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(); 420 assertEquals(x, (byte)0x23, "setVolatile byte value"); 421 } 422 423 // Lazy 424 { 425 hs.get(TestAccessMode.SET_RELEASE).invokeExact((byte)0x01); 426 byte x = (byte) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(); 427 assertEquals(x, (byte)0x01, "setRelease byte value"); 428 } 429 430 // Opaque 431 { 432 hs.get(TestAccessMode.SET_OPAQUE).invokeExact((byte)0x23); 433 byte x = (byte) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(); 434 assertEquals(x, (byte)0x23, "setOpaque byte value"); 435 } 436 437 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 438 439 // Compare 440 { 441 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact((byte)0x01, (byte)0x23); 442 assertEquals(r, true, "success compareAndSet byte"); 443 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 444 assertEquals(x, (byte)0x23, "success compareAndSet byte value"); 445 } 446 447 { 448 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact((byte)0x01, (byte)0x45); 449 assertEquals(r, false, "failing compareAndSet byte"); 450 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 451 assertEquals(x, (byte)0x23, "failing compareAndSet byte value"); 452 } 453 454 { 455 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact((byte)0x23, (byte)0x01); 456 assertEquals(r, (byte)0x23, "success compareAndExchange byte"); 457 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 458 assertEquals(x, (byte)0x01, "success compareAndExchange byte value"); 459 } 460 461 { 462 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact((byte)0x23, (byte)0x45); 463 assertEquals(r, (byte)0x01, "failing compareAndExchange byte"); 464 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 465 assertEquals(x, (byte)0x01, "failing compareAndExchange byte value"); 466 } 467 468 { 469 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact((byte)0x01, (byte)0x23); 470 assertEquals(r, (byte)0x01, "success compareAndExchangeAcquire byte"); 471 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 472 assertEquals(x, (byte)0x23, "success compareAndExchangeAcquire byte value"); 473 } 474 475 { 476 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact((byte)0x01, (byte)0x45); 477 assertEquals(r, (byte)0x23, "failing compareAndExchangeAcquire byte"); 478 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 479 assertEquals(x, (byte)0x23, "failing compareAndExchangeAcquire byte value"); 480 } 481 482 { 483 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact((byte)0x23, (byte)0x01); 484 assertEquals(r, (byte)0x23, "success compareAndExchangeRelease byte"); 485 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 486 assertEquals(x, (byte)0x01, "success compareAndExchangeRelease byte value"); 487 } 488 489 { 490 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact((byte)0x23, (byte)0x45); 491 assertEquals(r, (byte)0x01, "failing compareAndExchangeRelease byte"); 492 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 493 assertEquals(x, (byte)0x01, "failing compareAndExchangeRelease byte 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((byte)0x01, (byte)0x23); 500 } 501 assertEquals(success, true, "weakCompareAndSetPlain byte"); 502 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 503 assertEquals(x, (byte)0x23, "weakCompareAndSetPlain byte 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((byte)0x23, (byte)0x01); 510 } 511 assertEquals(success, true, "weakCompareAndSetAcquire byte"); 512 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 513 assertEquals(x, (byte)0x01, "weakCompareAndSetAcquire byte"); 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((byte)0x01, (byte)0x23); 520 } 521 assertEquals(success, true, "weakCompareAndSetRelease byte"); 522 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 523 assertEquals(x, (byte)0x23, "weakCompareAndSetRelease byte"); 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((byte)0x23, (byte)0x01); 530 } 531 assertEquals(success, true, "weakCompareAndSet byte"); 532 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 533 assertEquals(x, (byte)0x01, "weakCompareAndSet byte"); 534 } 535 536 // Compare set and get 537 { 538 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 539 540 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET).invokeExact((byte)0x23); 541 assertEquals(o, (byte)0x01, "getAndSet byte"); 542 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 543 assertEquals(x, (byte)0x23, "getAndSet byte value"); 544 } 545 546 // Compare set and get 547 { 548 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 549 550 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET_ACQUIRE).invokeExact((byte)0x23); 551 assertEquals(o, (byte)0x01, "getAndSetAcquire byte"); 552 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 553 assertEquals(x, (byte)0x23, "getAndSetAcquire byte value"); 554 } 555 556 // Compare set and get 557 { 558 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 559 560 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET_RELEASE).invokeExact((byte)0x23); 561 assertEquals(o, (byte)0x01, "getAndSetRelease byte"); 562 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 563 assertEquals(x, (byte)0x23, "getAndSetRelease byte value"); 564 } 565 566 // get and add, add and get 567 { 568 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 569 570 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact((byte)0x23); 571 assertEquals(o, (byte)0x01, "getAndAdd byte"); 572 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 573 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value"); 574 } 575 576 { 577 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 578 579 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD_ACQUIRE).invokeExact((byte)0x23); 580 assertEquals(o, (byte)0x01, "getAndAddAcquire byte"); 581 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 582 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAddAcquire byte value"); 583 } 584 585 { 586 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 587 588 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD_RELEASE).invokeExact((byte)0x23); 589 assertEquals(o, (byte)0x01, "getAndAddRelease byte"); 590 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 591 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAddRelease byte value"); 592 } 593 594 // get and bitwise or 595 { 596 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 597 598 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR).invokeExact((byte)0x23); 599 assertEquals(o, (byte)0x01, "getAndBitwiseOr byte"); 600 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 601 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOr byte value"); 602 } 603 604 { 605 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 606 607 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR_ACQUIRE).invokeExact((byte)0x23); 608 assertEquals(o, (byte)0x01, "getAndBitwiseOrAcquire byte"); 609 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 610 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOrAcquire byte value"); 611 } 612 613 { 614 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 615 616 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR_RELEASE).invokeExact((byte)0x23); 617 assertEquals(o, (byte)0x01, "getAndBitwiseOrRelease byte"); 618 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 619 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOrRelease byte value"); 620 } 621 622 // get and bitwise and 623 { 624 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 625 626 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND).invokeExact((byte)0x23); 627 assertEquals(o, (byte)0x01, "getAndBitwiseAnd byte"); 628 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 629 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAnd byte value"); 630 } 631 632 { 633 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 634 635 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND_ACQUIRE).invokeExact((byte)0x23); 636 assertEquals(o, (byte)0x01, "getAndBitwiseAndAcquire byte"); 637 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 638 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAndAcquire byte value"); 639 } 640 641 { 642 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 643 644 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND_RELEASE).invokeExact((byte)0x23); 645 assertEquals(o, (byte)0x01, "getAndBitwiseAndRelease byte"); 646 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 647 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAndRelease byte value"); 648 } 649 650 // get and bitwise xor 651 { 652 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 653 654 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR).invokeExact((byte)0x23); 655 assertEquals(o, (byte)0x01, "getAndBitwiseXor byte"); 656 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 657 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXor byte value"); 658 } 659 660 { 661 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 662 663 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_ACQUIRE).invokeExact((byte)0x23); 664 assertEquals(o, (byte)0x01, "getAndBitwiseXorAcquire byte"); 665 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 666 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXorAcquire byte value"); 667 } 668 669 { 670 hs.get(TestAccessMode.SET).invokeExact((byte)0x01); 671 672 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_RELEASE).invokeExact((byte)0x23); 673 assertEquals(o, (byte)0x01, "getAndBitwiseXorRelease byte"); 674 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(); 675 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXorRelease byte 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 byte[] array = new byte[10]; 687 688 for (int i = 0; i < array.length; i++) { 689 // Plain 690 { 691 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 692 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 693 assertEquals(x, (byte)0x01, "get byte value"); 694 } 695 696 697 // Volatile 698 { 699 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, (byte)0x23); 700 byte x = (byte) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i); 701 assertEquals(x, (byte)0x23, "setVolatile byte value"); 702 } 703 704 // Lazy 705 { 706 hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, (byte)0x01); 707 byte x = (byte) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i); 708 assertEquals(x, (byte)0x01, "setRelease byte value"); 709 } 710 711 // Opaque 712 { 713 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, (byte)0x23); 714 byte x = (byte) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i); 715 assertEquals(x, (byte)0x23, "setOpaque byte value"); 716 } 717 718 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 719 720 // Compare 721 { 722 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, (byte)0x01, (byte)0x23); 723 assertEquals(r, true, "success compareAndSet byte"); 724 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 725 assertEquals(x, (byte)0x23, "success compareAndSet byte value"); 726 } 727 728 { 729 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, (byte)0x01, (byte)0x45); 730 assertEquals(r, false, "failing compareAndSet byte"); 731 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 732 assertEquals(x, (byte)0x23, "failing compareAndSet byte value"); 733 } 734 735 { 736 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(array, i, (byte)0x23, (byte)0x01); 737 assertEquals(r, (byte)0x23, "success compareAndExchange byte"); 738 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 739 assertEquals(x, (byte)0x01, "success compareAndExchange byte value"); 740 } 741 742 { 743 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE).invokeExact(array, i, (byte)0x23, (byte)0x45); 744 assertEquals(r, (byte)0x01, "failing compareAndExchange byte"); 745 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 746 assertEquals(x, (byte)0x01, "failing compareAndExchange byte value"); 747 } 748 749 { 750 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, (byte)0x01, (byte)0x23); 751 assertEquals(r, (byte)0x01, "success compareAndExchangeAcquire byte"); 752 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 753 assertEquals(x, (byte)0x23, "success compareAndExchangeAcquire byte value"); 754 } 755 756 { 757 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, (byte)0x01, (byte)0x45); 758 assertEquals(r, (byte)0x23, "failing compareAndExchangeAcquire byte"); 759 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 760 assertEquals(x, (byte)0x23, "failing compareAndExchangeAcquire byte value"); 761 } 762 763 { 764 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, (byte)0x23, (byte)0x01); 765 assertEquals(r, (byte)0x23, "success compareAndExchangeRelease byte"); 766 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 767 assertEquals(x, (byte)0x01, "success compareAndExchangeRelease byte value"); 768 } 769 770 { 771 byte r = (byte) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, (byte)0x23, (byte)0x45); 772 assertEquals(r, (byte)0x01, "failing compareAndExchangeRelease byte"); 773 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 774 assertEquals(x, (byte)0x01, "failing compareAndExchangeRelease byte 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, (byte)0x01, (byte)0x23); 781 } 782 assertEquals(success, true, "weakCompareAndSetPlain byte"); 783 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 784 assertEquals(x, (byte)0x23, "weakCompareAndSetPlain byte 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, (byte)0x23, (byte)0x01); 791 } 792 assertEquals(success, true, "weakCompareAndSetAcquire byte"); 793 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 794 assertEquals(x, (byte)0x01, "weakCompareAndSetAcquire byte"); 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, (byte)0x01, (byte)0x23); 801 } 802 assertEquals(success, true, "weakCompareAndSetRelease byte"); 803 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 804 assertEquals(x, (byte)0x23, "weakCompareAndSetRelease byte"); 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, (byte)0x23, (byte)0x01); 811 } 812 assertEquals(success, true, "weakCompareAndSet byte"); 813 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 814 assertEquals(x, (byte)0x01, "weakCompareAndSet byte"); 815 } 816 817 // Compare set and get 818 { 819 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 820 821 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET).invokeExact(array, i, (byte)0x23); 822 assertEquals(o, (byte)0x01, "getAndSet byte"); 823 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 824 assertEquals(x, (byte)0x23, "getAndSet byte value"); 825 } 826 827 { 828 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 829 830 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET_ACQUIRE).invokeExact(array, i, (byte)0x23); 831 assertEquals(o, (byte)0x01, "getAndSetAcquire byte"); 832 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 833 assertEquals(x, (byte)0x23, "getAndSetAcquire byte value"); 834 } 835 836 { 837 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 838 839 byte o = (byte) hs.get(TestAccessMode.GET_AND_SET_RELEASE).invokeExact(array, i, (byte)0x23); 840 assertEquals(o, (byte)0x01, "getAndSetRelease byte"); 841 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 842 assertEquals(x, (byte)0x23, "getAndSetRelease byte value"); 843 } 844 845 // get and add, add and get 846 { 847 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 848 849 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, (byte)0x23); 850 assertEquals(o, (byte)0x01, "getAndAdd byte"); 851 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 852 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value"); 853 } 854 855 { 856 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 857 858 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD_ACQUIRE).invokeExact(array, i, (byte)0x23); 859 assertEquals(o, (byte)0x01, "getAndAddAcquire byte"); 860 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 861 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAddAcquire byte value"); 862 } 863 864 { 865 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 866 867 byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD_RELEASE).invokeExact(array, i, (byte)0x23); 868 assertEquals(o, (byte)0x01, "getAndAddRelease byte"); 869 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 870 assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAddRelease byte value"); 871 } 872 873 // get and bitwise or 874 { 875 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 876 877 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR).invokeExact(array, i, (byte)0x23); 878 assertEquals(o, (byte)0x01, "getAndBitwiseOr byte"); 879 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 880 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOr byte value"); 881 } 882 883 { 884 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 885 886 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR_ACQUIRE).invokeExact(array, i, (byte)0x23); 887 assertEquals(o, (byte)0x01, "getAndBitwiseOrAcquire byte"); 888 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 889 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOrAcquire byte value"); 890 } 891 892 { 893 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 894 895 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_OR_RELEASE).invokeExact(array, i, (byte)0x23); 896 assertEquals(o, (byte)0x01, "getAndBitwiseOrRelease byte"); 897 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 898 assertEquals(x, (byte)((byte)0x01 | (byte)0x23), "getAndBitwiseOrRelease byte value"); 899 } 900 901 // get and bitwise and 902 { 903 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 904 905 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND).invokeExact(array, i, (byte)0x23); 906 assertEquals(o, (byte)0x01, "getAndBitwiseAnd byte"); 907 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 908 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAnd byte value"); 909 } 910 911 { 912 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 913 914 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND_ACQUIRE).invokeExact(array, i, (byte)0x23); 915 assertEquals(o, (byte)0x01, "getAndBitwiseAndAcquire byte"); 916 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 917 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAndAcquire byte value"); 918 } 919 920 { 921 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 922 923 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_AND_RELEASE).invokeExact(array, i, (byte)0x23); 924 assertEquals(o, (byte)0x01, "getAndBitwiseAndRelease byte"); 925 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 926 assertEquals(x, (byte)((byte)0x01 & (byte)0x23), "getAndBitwiseAndRelease byte value"); 927 } 928 929 // get and bitwise xor 930 { 931 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 932 933 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR).invokeExact(array, i, (byte)0x23); 934 assertEquals(o, (byte)0x01, "getAndBitwiseXor byte"); 935 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 936 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXor byte value"); 937 } 938 939 { 940 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 941 942 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_ACQUIRE).invokeExact(array, i, (byte)0x23); 943 assertEquals(o, (byte)0x01, "getAndBitwiseXorAcquire byte"); 944 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 945 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXorAcquire byte value"); 946 } 947 948 { 949 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01); 950 951 byte o = (byte) hs.get(TestAccessMode.GET_AND_BITWISE_XOR_RELEASE).invokeExact(array, i, (byte)0x23); 952 assertEquals(o, (byte)0x01, "getAndBitwiseXorRelease byte"); 953 byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i); 954 assertEquals(x, (byte)((byte)0x01 ^ (byte)0x23), "getAndBitwiseXorRelease byte value"); 955 } 956 } 957 } 958 959 static void testArrayUnsupported(Handles hs) throws Throwable { 960 byte[] array = new byte[10]; 961 962 final int i = 0; 963 964 965 } 966 967 static void testArrayIndexOutOfBounds(Handles hs) throws Throwable { 968 byte[] array = new byte[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 byte x = (byte) 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, (byte)0x01); 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, (byte)0x01, (byte)0x23); 988 }); 989 } 990 991 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 992 checkIOOBE(am, () -> { 993 byte r = (byte) hs.get(am).invokeExact(array, ci, (byte)0x23, (byte)0x01); 994 }); 995 } 996 997 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 998 checkIOOBE(am, () -> { 999 byte o = (byte) hs.get(am).invokeExact(array, ci, (byte)0x01); 1000 }); 1001 } 1002 1003 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 1004 checkIOOBE(am, () -> { 1005 byte o = (byte) hs.get(am).invokeExact(array, ci, (byte)0x45); 1006 }); 1007 } 1008 1009 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_BITWISE)) { 1010 checkIOOBE(am, () -> { 1011 byte o = (byte) hs.get(am).invokeExact(array, ci, (byte)0x45); 1012 }); 1013 } 1014 } 1015 } 1016 } 1017