131 { 132 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, false); 133 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv); 134 assertEquals(x, false, "setVolatile boolean value"); 135 } 136 137 // Lazy 138 { 139 hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, true); 140 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv); 141 assertEquals(x, true, "setRelease boolean value"); 142 } 143 144 // Opaque 145 { 146 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, false); 147 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv); 148 assertEquals(x, false, "setOpaque boolean value"); 149 } 150 151 152 } 153 154 static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessBoolean recv, Handles hs) throws Throwable { 155 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 156 checkUOE(am, () -> { 157 boolean r = (boolean) hs.get(am).invokeExact(recv, true, false); 158 }); 159 } 160 161 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 162 checkUOE(am, () -> { 163 boolean r = (boolean) hs.get(am).invokeExact(recv, true, false); 164 }); 165 } 166 167 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 168 checkUOE(am, () -> { 169 boolean r = (boolean) hs.get(am).invokeExact(recv, true); 170 }); 171 } 172 173 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 174 checkUOE(am, () -> { 175 boolean r = (boolean) hs.get(am).invokeExact(recv, true); 176 }); 177 } 178 } 179 180 181 static void testStaticField(Handles hs) throws Throwable { 182 // Plain 183 { 184 hs.get(TestAccessMode.SET).invokeExact(true); 185 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 186 assertEquals(x, true, "set boolean value"); 187 } 188 189 190 // Volatile 191 { 192 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(false); 193 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(); 194 assertEquals(x, false, "setVolatile boolean value"); 195 } 196 197 // Lazy 198 { 199 hs.get(TestAccessMode.SET_RELEASE).invokeExact(true); 200 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(); 201 assertEquals(x, true, "setRelease boolean value"); 202 } 203 204 // Opaque 205 { 206 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(false); 207 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(); 208 assertEquals(x, false, "setOpaque boolean value"); 209 } 210 211 212 } 213 214 static void testStaticFieldUnsupported(Handles hs) throws Throwable { 215 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 216 checkUOE(am, () -> { 217 boolean r = (boolean) hs.get(am).invokeExact(true, false); 218 }); 219 } 220 221 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 222 checkUOE(am, () -> { 223 boolean r = (boolean) hs.get(am).invokeExact(true, false); 224 }); 225 } 226 227 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 228 checkUOE(am, () -> { 229 boolean r = (boolean) hs.get(am).invokeExact(true); 230 }); 231 } 232 233 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 234 checkUOE(am, () -> { 235 boolean r = (boolean) hs.get(am).invokeExact(true); 236 }); 237 } 238 } 239 240 241 static void testArray(Handles hs) throws Throwable { 242 boolean[] array = new boolean[10]; 243 244 for (int i = 0; i < array.length; i++) { 245 // Plain 246 { 247 hs.get(TestAccessMode.SET).invokeExact(array, i, true); 248 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 249 assertEquals(x, true, "get boolean value"); 250 } 251 252 254 { 255 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, false); 256 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i); 257 assertEquals(x, false, "setVolatile boolean value"); 258 } 259 260 // Lazy 261 { 262 hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, true); 263 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i); 264 assertEquals(x, true, "setRelease boolean value"); 265 } 266 267 // Opaque 268 { 269 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, false); 270 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i); 271 assertEquals(x, false, "setOpaque boolean value"); 272 } 273 274 275 } 276 } 277 278 static void testArrayUnsupported(Handles hs) throws Throwable { 279 boolean[] array = new boolean[10]; 280 281 final int i = 0; 282 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 283 checkUOE(am, () -> { 284 boolean r = (boolean) hs.get(am).invokeExact(array, i, true, false); 285 }); 286 } 287 288 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 289 checkUOE(am, () -> { 290 boolean r = (boolean) hs.get(am).invokeExact(array, i, true, false); 291 }); 292 } 293 294 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 295 checkUOE(am, () -> { 296 boolean r = (boolean) hs.get(am).invokeExact(array, i, true); 297 }); 298 } 299 300 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 301 checkUOE(am, () -> { 302 boolean o = (boolean) hs.get(am).invokeExact(array, i, true); 303 }); 304 } 305 } 306 307 static void testArrayIndexOutOfBounds(Handles hs) throws Throwable { 308 boolean[] array = new boolean[10]; 309 310 for (int i : new int[]{-1, Integer.MIN_VALUE, 10, 11, Integer.MAX_VALUE}) { 311 final int ci = i; 312 313 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 314 checkIOOBE(am, () -> { 315 boolean x = (boolean) hs.get(am).invokeExact(array, ci); 316 }); 317 } 318 319 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 320 checkIOOBE(am, () -> { 321 hs.get(am).invokeExact(array, ci, true); 322 }); 323 } 324 325 326 } 327 } 328 } 329 | 131 { 132 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(recv, false); 133 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(recv); 134 assertEquals(x, false, "setVolatile boolean value"); 135 } 136 137 // Lazy 138 { 139 hs.get(TestAccessMode.SET_RELEASE).invokeExact(recv, true); 140 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(recv); 141 assertEquals(x, true, "setRelease boolean value"); 142 } 143 144 // Opaque 145 { 146 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(recv, false); 147 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(recv); 148 assertEquals(x, false, "setOpaque boolean value"); 149 } 150 151 hs.get(TestAccessMode.SET).invokeExact(recv, true); 152 153 // Compare 154 { 155 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, true, false); 156 assertEquals(r, true, "success compareAndSet boolean"); 157 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 158 assertEquals(x, false, "success compareAndSet boolean value"); 159 } 160 161 { 162 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(recv, true, false); 163 assertEquals(r, false, "failing compareAndSet boolean"); 164 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 165 assertEquals(x, false, "failing compareAndSet boolean value"); 166 } 167 168 { 169 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, false, true); 170 assertEquals(r, false, "success compareAndExchangeVolatile boolean"); 171 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 172 assertEquals(x, true, "success compareAndExchangeVolatile boolean value"); 173 } 174 175 { 176 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(recv, false, false); 177 assertEquals(r, true, "failing compareAndExchangeVolatile boolean"); 178 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 179 assertEquals(x, true, "failing compareAndExchangeVolatile boolean value"); 180 } 181 182 { 183 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, true, false); 184 assertEquals(r, true, "success compareAndExchangeAcquire boolean"); 185 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 186 assertEquals(x, false, "success compareAndExchangeAcquire boolean value"); 187 } 188 189 { 190 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(recv, true, false); 191 assertEquals(r, false, "failing compareAndExchangeAcquire boolean"); 192 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 193 assertEquals(x, false, "failing compareAndExchangeAcquire boolean value"); 194 } 195 196 { 197 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, false, true); 198 assertEquals(r, false, "success compareAndExchangeRelease boolean"); 199 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 200 assertEquals(x, true, "success compareAndExchangeRelease boolean value"); 201 } 202 203 { 204 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(recv, false, false); 205 assertEquals(r, true, "failing compareAndExchangeRelease boolean"); 206 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 207 assertEquals(x, true, "failing compareAndExchangeRelease boolean value"); 208 } 209 210 { 211 boolean success = false; 212 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 213 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(recv, true, false); 214 } 215 assertEquals(success, true, "weakCompareAndSet boolean"); 216 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 217 assertEquals(x, false, "weakCompareAndSet boolean value"); 218 } 219 220 { 221 boolean success = false; 222 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 223 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(recv, false, true); 224 } 225 assertEquals(success, true, "weakCompareAndSetAcquire boolean"); 226 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 227 assertEquals(x, true, "weakCompareAndSetAcquire boolean"); 228 } 229 230 { 231 boolean success = false; 232 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 233 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(recv, true, false); 234 } 235 assertEquals(success, true, "weakCompareAndSetRelease boolean"); 236 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 237 assertEquals(x, false, "weakCompareAndSetRelease boolean"); 238 } 239 240 // Compare set and get 241 { 242 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET).invokeExact(recv, true); 243 assertEquals(o, false, "getAndSet boolean"); 244 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(recv); 245 assertEquals(x, true, "getAndSet boolean value"); 246 } 247 248 } 249 250 static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessBoolean recv, Handles hs) throws Throwable { 251 252 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 253 checkUOE(am, () -> { 254 boolean r = (boolean) hs.get(am).invokeExact(recv, true); 255 }); 256 } 257 } 258 259 260 static void testStaticField(Handles hs) throws Throwable { 261 // Plain 262 { 263 hs.get(TestAccessMode.SET).invokeExact(true); 264 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 265 assertEquals(x, true, "set boolean value"); 266 } 267 268 269 // Volatile 270 { 271 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(false); 272 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(); 273 assertEquals(x, false, "setVolatile boolean value"); 274 } 275 276 // Lazy 277 { 278 hs.get(TestAccessMode.SET_RELEASE).invokeExact(true); 279 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(); 280 assertEquals(x, true, "setRelease boolean value"); 281 } 282 283 // Opaque 284 { 285 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(false); 286 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(); 287 assertEquals(x, false, "setOpaque boolean value"); 288 } 289 290 hs.get(TestAccessMode.SET).invokeExact(true); 291 292 // Compare 293 { 294 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(true, false); 295 assertEquals(r, true, "success compareAndSet boolean"); 296 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 297 assertEquals(x, false, "success compareAndSet boolean value"); 298 } 299 300 { 301 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(true, false); 302 assertEquals(r, false, "failing compareAndSet boolean"); 303 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 304 assertEquals(x, false, "failing compareAndSet boolean value"); 305 } 306 307 { 308 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(false, true); 309 assertEquals(r, false, "success compareAndExchangeVolatile boolean"); 310 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 311 assertEquals(x, true, "success compareAndExchangeVolatile boolean value"); 312 } 313 314 { 315 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(false, false); 316 assertEquals(r, true, "failing compareAndExchangeVolatile boolean"); 317 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 318 assertEquals(x, true, "failing compareAndExchangeVolatile boolean value"); 319 } 320 321 { 322 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(true, false); 323 assertEquals(r, true, "success compareAndExchangeAcquire boolean"); 324 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 325 assertEquals(x, false, "success compareAndExchangeAcquire boolean value"); 326 } 327 328 { 329 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(true, false); 330 assertEquals(r, false, "failing compareAndExchangeAcquire boolean"); 331 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 332 assertEquals(x, false, "failing compareAndExchangeAcquire boolean value"); 333 } 334 335 { 336 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(false, true); 337 assertEquals(r, false, "success compareAndExchangeRelease boolean"); 338 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 339 assertEquals(x, true, "success compareAndExchangeRelease boolean value"); 340 } 341 342 { 343 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(false, false); 344 assertEquals(r, true, "failing compareAndExchangeRelease boolean"); 345 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 346 assertEquals(x, true, "failing compareAndExchangeRelease boolean value"); 347 } 348 349 { 350 boolean success = false; 351 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 352 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(true, false); 353 } 354 assertEquals(success, true, "weakCompareAndSet boolean"); 355 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 356 assertEquals(x, false, "weakCompareAndSet boolean value"); 357 } 358 359 { 360 boolean success = false; 361 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 362 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(false, true); 363 } 364 assertEquals(success, true, "weakCompareAndSetAcquire boolean"); 365 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 366 assertEquals(x, true, "weakCompareAndSetAcquire boolean"); 367 } 368 369 { 370 boolean success = false; 371 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 372 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(true, false); 373 } 374 assertEquals(success, true, "weakCompareAndSetRelease boolean"); 375 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 376 assertEquals(x, false, "weakCompareAndSetRelease boolean"); 377 } 378 379 // Compare set and get 380 { 381 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET).invokeExact( true); 382 assertEquals(o, false, "getAndSet boolean"); 383 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(); 384 assertEquals(x, true, "getAndSet boolean value"); 385 } 386 387 } 388 389 static void testStaticFieldUnsupported(Handles hs) throws Throwable { 390 391 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 392 checkUOE(am, () -> { 393 boolean r = (boolean) hs.get(am).invokeExact(true); 394 }); 395 } 396 } 397 398 399 static void testArray(Handles hs) throws Throwable { 400 boolean[] array = new boolean[10]; 401 402 for (int i = 0; i < array.length; i++) { 403 // Plain 404 { 405 hs.get(TestAccessMode.SET).invokeExact(array, i, true); 406 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 407 assertEquals(x, true, "get boolean value"); 408 } 409 410 412 { 413 hs.get(TestAccessMode.SET_VOLATILE).invokeExact(array, i, false); 414 boolean x = (boolean) hs.get(TestAccessMode.GET_VOLATILE).invokeExact(array, i); 415 assertEquals(x, false, "setVolatile boolean value"); 416 } 417 418 // Lazy 419 { 420 hs.get(TestAccessMode.SET_RELEASE).invokeExact(array, i, true); 421 boolean x = (boolean) hs.get(TestAccessMode.GET_ACQUIRE).invokeExact(array, i); 422 assertEquals(x, true, "setRelease boolean value"); 423 } 424 425 // Opaque 426 { 427 hs.get(TestAccessMode.SET_OPAQUE).invokeExact(array, i, false); 428 boolean x = (boolean) hs.get(TestAccessMode.GET_OPAQUE).invokeExact(array, i); 429 assertEquals(x, false, "setOpaque boolean value"); 430 } 431 432 hs.get(TestAccessMode.SET).invokeExact(array, i, true); 433 434 // Compare 435 { 436 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, true, false); 437 assertEquals(r, true, "success compareAndSet boolean"); 438 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 439 assertEquals(x, false, "success compareAndSet boolean value"); 440 } 441 442 { 443 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_SET).invokeExact(array, i, true, false); 444 assertEquals(r, false, "failing compareAndSet boolean"); 445 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 446 assertEquals(x, false, "failing compareAndSet boolean value"); 447 } 448 449 { 450 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, false, true); 451 assertEquals(r, false, "success compareAndExchangeVolatile boolean"); 452 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 453 assertEquals(x, true, "success compareAndExchangeVolatile boolean value"); 454 } 455 456 { 457 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_VOLATILE).invokeExact(array, i, false, false); 458 assertEquals(r, true, "failing compareAndExchangeVolatile boolean"); 459 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 460 assertEquals(x, true, "failing compareAndExchangeVolatile boolean value"); 461 } 462 463 { 464 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, true, false); 465 assertEquals(r, true, "success compareAndExchangeAcquire boolean"); 466 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 467 assertEquals(x, false, "success compareAndExchangeAcquire boolean value"); 468 } 469 470 { 471 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_ACQUIRE).invokeExact(array, i, true, false); 472 assertEquals(r, false, "failing compareAndExchangeAcquire boolean"); 473 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 474 assertEquals(x, false, "failing compareAndExchangeAcquire boolean value"); 475 } 476 477 { 478 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, false, true); 479 assertEquals(r, false, "success compareAndExchangeRelease boolean"); 480 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 481 assertEquals(x, true, "success compareAndExchangeRelease boolean value"); 482 } 483 484 { 485 boolean r = (boolean) hs.get(TestAccessMode.COMPARE_AND_EXCHANGE_RELEASE).invokeExact(array, i, false, false); 486 assertEquals(r, true, "failing compareAndExchangeRelease boolean"); 487 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 488 assertEquals(x, true, "failing compareAndExchangeRelease boolean value"); 489 } 490 491 { 492 boolean success = false; 493 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 494 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET).invokeExact(array, i, true, false); 495 } 496 assertEquals(success, true, "weakCompareAndSet boolean"); 497 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 498 assertEquals(x, false, "weakCompareAndSet boolean value"); 499 } 500 501 { 502 boolean success = false; 503 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 504 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_ACQUIRE).invokeExact(array, i, false, true); 505 } 506 assertEquals(success, true, "weakCompareAndSetAcquire boolean"); 507 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 508 assertEquals(x, true, "weakCompareAndSetAcquire boolean"); 509 } 510 511 { 512 boolean success = false; 513 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { 514 success = (boolean) hs.get(TestAccessMode.WEAK_COMPARE_AND_SET_RELEASE).invokeExact(array, i, true, false); 515 } 516 assertEquals(success, true, "weakCompareAndSetRelease boolean"); 517 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 518 assertEquals(x, false, "weakCompareAndSetRelease boolean"); 519 } 520 521 // Compare set and get 522 { 523 boolean o = (boolean) hs.get(TestAccessMode.GET_AND_SET).invokeExact(array, i, true); 524 assertEquals(o, false, "getAndSet boolean"); 525 boolean x = (boolean) hs.get(TestAccessMode.GET).invokeExact(array, i); 526 assertEquals(x, true, "getAndSet boolean value"); 527 } 528 529 } 530 } 531 532 static void testArrayUnsupported(Handles hs) throws Throwable { 533 boolean[] array = new boolean[10]; 534 535 final int i = 0; 536 537 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 538 checkUOE(am, () -> { 539 boolean o = (boolean) hs.get(am).invokeExact(array, i, true); 540 }); 541 } 542 } 543 544 static void testArrayIndexOutOfBounds(Handles hs) throws Throwable { 545 boolean[] array = new boolean[10]; 546 547 for (int i : new int[]{-1, Integer.MIN_VALUE, 10, 11, Integer.MAX_VALUE}) { 548 final int ci = i; 549 550 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 551 checkIOOBE(am, () -> { 552 boolean x = (boolean) hs.get(am).invokeExact(array, ci); 553 }); 554 } 555 556 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 557 checkIOOBE(am, () -> { 558 hs.get(am).invokeExact(array, ci, true); 559 }); 560 } 561 562 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 563 checkIOOBE(am, () -> { 564 boolean r = (boolean) hs.get(am).invokeExact(array, ci, true, false); 565 }); 566 } 567 568 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 569 checkIOOBE(am, () -> { 570 boolean r = (boolean) hs.get(am).invokeExact(array, ci, false, true); 571 }); 572 } 573 574 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 575 checkIOOBE(am, () -> { 576 boolean o = (boolean) hs.get(am).invokeExact(array, ci, true); 577 }); 578 } 579 580 } 581 } 582 } 583 |