< prev index next >

test/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java

Print this page




  89     }
  90 
  91     @Test(dataProvider = "varHandlesProvider")
  92     public void testIsAccessModeSupported(VarHandle vh) {
  93         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET));
  94         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET));
  95         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_VOLATILE));
  96         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_VOLATILE));
  97         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_ACQUIRE));
  98         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_RELEASE));
  99         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_OPAQUE));
 100         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_OPAQUE));
 101 
 102         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET));
 103         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE));
 104         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
 105         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
 106         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
 107         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
 108         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
 109         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));
 110         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
 111 
 112         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
 113         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 114     }
 115 
 116 
 117     @DataProvider
 118     public Object[][] typesProvider() throws Exception {
 119         List<Object[]> types = new ArrayList<>();
 120         types.add(new Object[] {vhField, Arrays.asList(VarHandleTestAccessInt.class)});
 121         types.add(new Object[] {vhStaticField, Arrays.asList()});
 122         types.add(new Object[] {vhArray, Arrays.asList(int[].class, int.class)});
 123 
 124         return types.stream().toArray(Object[][]::new);
 125     }
 126 
 127     @Test(dataProvider = "typesProvider")
 128     public void testTypes(VarHandle vh, List<Class<?>> pts) {
 129         assertEquals(vh.varType(), int.class);


 385             assertEquals(r, 2, "failing compareAndExchangeAcquire int");
 386             int x = (int) vh.get(recv);
 387             assertEquals(x, 2, "failing compareAndExchangeAcquire int value");
 388         }
 389 
 390         {
 391             int r = (int) vh.compareAndExchangeRelease(recv, 2, 1);
 392             assertEquals(r, 2, "success compareAndExchangeRelease int");
 393             int x = (int) vh.get(recv);
 394             assertEquals(x, 1, "success compareAndExchangeRelease int value");
 395         }
 396 
 397         {
 398             int r = (int) vh.compareAndExchangeRelease(recv, 2, 3);
 399             assertEquals(r, 1, "failing compareAndExchangeRelease int");
 400             int x = (int) vh.get(recv);
 401             assertEquals(x, 1, "failing compareAndExchangeRelease int value");
 402         }
 403 
 404         {
 405             boolean r = vh.weakCompareAndSet(recv, 1, 2);
 406             assertEquals(r, true, "weakCompareAndSet int");



 407             int x = (int) vh.get(recv);
 408             assertEquals(x, 2, "weakCompareAndSet int value");
 409         }
 410 
 411         {
 412             boolean r = vh.weakCompareAndSetAcquire(recv, 2, 1);
 413             assertEquals(r, true, "weakCompareAndSetAcquire int");



 414             int x = (int) vh.get(recv);
 415             assertEquals(x, 1, "weakCompareAndSetAcquire int");
 416         }
 417 
 418         {
 419             boolean r = vh.weakCompareAndSetRelease(recv, 1, 2);
 420             assertEquals(r, true, "weakCompareAndSetRelease int");



 421             int x = (int) vh.get(recv);
 422             assertEquals(x, 2, "weakCompareAndSetRelease int");
 423         }
 424 
 425         // Compare set and get
 426         {
 427             int o = (int) vh.getAndSet(recv, 1);
 428             assertEquals(o, 2, "getAndSet int");
 429             int x = (int) vh.get(recv);
 430             assertEquals(x, 1, "getAndSet int value");
 431         }
 432 
 433         vh.set(recv, 1);
 434 
 435         // get and add, add and get
 436         {
 437             int o = (int) vh.getAndAdd(recv, 3);
 438             assertEquals(o, 1, "getAndAdd int");
 439             int c = (int) vh.addAndGet(recv, 3);
 440             assertEquals(c, 1 + 3 + 3, "getAndAdd int value");


 519             assertEquals(r, 2, "failing compareAndExchangeAcquire int");
 520             int x = (int) vh.get();
 521             assertEquals(x, 2, "failing compareAndExchangeAcquire int value");
 522         }
 523 
 524         {
 525             int r = (int) vh.compareAndExchangeRelease(2, 1);
 526             assertEquals(r, 2, "success compareAndExchangeRelease int");
 527             int x = (int) vh.get();
 528             assertEquals(x, 1, "success compareAndExchangeRelease int value");
 529         }
 530 
 531         {
 532             int r = (int) vh.compareAndExchangeRelease(2, 3);
 533             assertEquals(r, 1, "failing compareAndExchangeRelease int");
 534             int x = (int) vh.get();
 535             assertEquals(x, 1, "failing compareAndExchangeRelease int value");
 536         }
 537 
 538         {
 539             boolean r = (boolean) vh.weakCompareAndSet(1, 2);
 540             assertEquals(r, true, "weakCompareAndSet int");



 541             int x = (int) vh.get();
 542             assertEquals(x, 2, "weakCompareAndSet int value");
 543         }
 544 
 545         {
 546             boolean r = (boolean) vh.weakCompareAndSetAcquire(2, 1);
 547             assertEquals(r, true, "weakCompareAndSetAcquire int");



 548             int x = (int) vh.get();
 549             assertEquals(x, 1, "weakCompareAndSetAcquire int");
 550         }
 551 
 552         {
 553             boolean r = (boolean) vh.weakCompareAndSetRelease( 1, 2);
 554             assertEquals(r, true, "weakCompareAndSetRelease int");



 555             int x = (int) vh.get();
 556             assertEquals(x, 2, "weakCompareAndSetRelease int");
 557         }
 558 
 559         // Compare set and get
 560         {
 561             int o = (int) vh.getAndSet( 1);
 562             assertEquals(o, 2, "getAndSet int");
 563             int x = (int) vh.get();
 564             assertEquals(x, 1, "getAndSet int value");
 565         }
 566 
 567         vh.set(1);
 568 
 569         // get and add, add and get
 570         {
 571             int o = (int) vh.getAndAdd( 3);
 572             assertEquals(o, 1, "getAndAdd int");
 573             int c = (int) vh.addAndGet(3);
 574             assertEquals(c, 1 + 3 + 3, "getAndAdd int value");


 656                 assertEquals(r, 2, "failing compareAndExchangeAcquire int");
 657                 int x = (int) vh.get(array, i);
 658                 assertEquals(x, 2, "failing compareAndExchangeAcquire int value");
 659             }
 660 
 661             {
 662                 int r = (int) vh.compareAndExchangeRelease(array, i, 2, 1);
 663                 assertEquals(r, 2, "success compareAndExchangeRelease int");
 664                 int x = (int) vh.get(array, i);
 665                 assertEquals(x, 1, "success compareAndExchangeRelease int value");
 666             }
 667 
 668             {
 669                 int r = (int) vh.compareAndExchangeRelease(array, i, 2, 3);
 670                 assertEquals(r, 1, "failing compareAndExchangeRelease int");
 671                 int x = (int) vh.get(array, i);
 672                 assertEquals(x, 1, "failing compareAndExchangeRelease int value");
 673             }
 674 
 675             {
 676                 boolean r = vh.weakCompareAndSet(array, i, 1, 2);
 677                 assertEquals(r, true, "weakCompareAndSet int");



 678                 int x = (int) vh.get(array, i);
 679                 assertEquals(x, 2, "weakCompareAndSet int value");
 680             }
 681 
 682             {
 683                 boolean r = vh.weakCompareAndSetAcquire(array, i, 2, 1);
 684                 assertEquals(r, true, "weakCompareAndSetAcquire int");



 685                 int x = (int) vh.get(array, i);
 686                 assertEquals(x, 1, "weakCompareAndSetAcquire int");
 687             }
 688 
 689             {
 690                 boolean r = vh.weakCompareAndSetRelease(array, i, 1, 2);
 691                 assertEquals(r, true, "weakCompareAndSetRelease int");



 692                 int x = (int) vh.get(array, i);
 693                 assertEquals(x, 2, "weakCompareAndSetRelease int");
 694             }
 695 
 696             // Compare set and get
 697             {
 698                 int o = (int) vh.getAndSet(array, i, 1);
 699                 assertEquals(o, 2, "getAndSet int");
 700                 int x = (int) vh.get(array, i);
 701                 assertEquals(x, 1, "getAndSet int value");
 702             }
 703 
 704             vh.set(array, i, 1);
 705 
 706             // get and add, add and get
 707             {
 708                 int o = (int) vh.getAndAdd(array, i, 3);
 709                 assertEquals(o, 1, "getAndAdd int");
 710                 int c = (int) vh.addAndGet(array, i, 3);
 711                 assertEquals(c, 1 + 3 + 3, "getAndAdd int value");




  89     }
  90 
  91     @Test(dataProvider = "varHandlesProvider")
  92     public void testIsAccessModeSupported(VarHandle vh) {
  93         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET));
  94         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET));
  95         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_VOLATILE));
  96         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_VOLATILE));
  97         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_ACQUIRE));
  98         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_RELEASE));
  99         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_OPAQUE));
 100         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.SET_OPAQUE));
 101 
 102         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET));
 103         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE));
 104         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE));
 105         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE));
 106         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET));
 107         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE));
 108         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE));

 109         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET));
 110 
 111         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
 112         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 113     }
 114 
 115 
 116     @DataProvider
 117     public Object[][] typesProvider() throws Exception {
 118         List<Object[]> types = new ArrayList<>();
 119         types.add(new Object[] {vhField, Arrays.asList(VarHandleTestAccessInt.class)});
 120         types.add(new Object[] {vhStaticField, Arrays.asList()});
 121         types.add(new Object[] {vhArray, Arrays.asList(int[].class, int.class)});
 122 
 123         return types.stream().toArray(Object[][]::new);
 124     }
 125 
 126     @Test(dataProvider = "typesProvider")
 127     public void testTypes(VarHandle vh, List<Class<?>> pts) {
 128         assertEquals(vh.varType(), int.class);


 384             assertEquals(r, 2, "failing compareAndExchangeAcquire int");
 385             int x = (int) vh.get(recv);
 386             assertEquals(x, 2, "failing compareAndExchangeAcquire int value");
 387         }
 388 
 389         {
 390             int r = (int) vh.compareAndExchangeRelease(recv, 2, 1);
 391             assertEquals(r, 2, "success compareAndExchangeRelease int");
 392             int x = (int) vh.get(recv);
 393             assertEquals(x, 1, "success compareAndExchangeRelease int value");
 394         }
 395 
 396         {
 397             int r = (int) vh.compareAndExchangeRelease(recv, 2, 3);
 398             assertEquals(r, 1, "failing compareAndExchangeRelease int");
 399             int x = (int) vh.get(recv);
 400             assertEquals(x, 1, "failing compareAndExchangeRelease int value");
 401         }
 402 
 403         {
 404             boolean success = false;
 405             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 406                 success = vh.weakCompareAndSet(recv, 1, 2);
 407             }
 408             assertEquals(success, true, "weakCompareAndSet int");
 409             int x = (int) vh.get(recv);
 410             assertEquals(x, 2, "weakCompareAndSet int value");
 411         }
 412 
 413         {
 414             boolean success = false;
 415             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 416                 success = vh.weakCompareAndSetAcquire(recv, 2, 1);
 417             }
 418             assertEquals(success, true, "weakCompareAndSetAcquire int");
 419             int x = (int) vh.get(recv);
 420             assertEquals(x, 1, "weakCompareAndSetAcquire int");
 421         }
 422 
 423         {
 424             boolean success = false;
 425             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 426                 success = vh.weakCompareAndSetRelease(recv, 1, 2);
 427             }
 428             assertEquals(success, true, "weakCompareAndSetRelease int");
 429             int x = (int) vh.get(recv);
 430             assertEquals(x, 2, "weakCompareAndSetRelease int");
 431         }
 432 
 433         // Compare set and get
 434         {
 435             int o = (int) vh.getAndSet(recv, 1);
 436             assertEquals(o, 2, "getAndSet int");
 437             int x = (int) vh.get(recv);
 438             assertEquals(x, 1, "getAndSet int value");
 439         }
 440 
 441         vh.set(recv, 1);
 442 
 443         // get and add, add and get
 444         {
 445             int o = (int) vh.getAndAdd(recv, 3);
 446             assertEquals(o, 1, "getAndAdd int");
 447             int c = (int) vh.addAndGet(recv, 3);
 448             assertEquals(c, 1 + 3 + 3, "getAndAdd int value");


 527             assertEquals(r, 2, "failing compareAndExchangeAcquire int");
 528             int x = (int) vh.get();
 529             assertEquals(x, 2, "failing compareAndExchangeAcquire int value");
 530         }
 531 
 532         {
 533             int r = (int) vh.compareAndExchangeRelease(2, 1);
 534             assertEquals(r, 2, "success compareAndExchangeRelease int");
 535             int x = (int) vh.get();
 536             assertEquals(x, 1, "success compareAndExchangeRelease int value");
 537         }
 538 
 539         {
 540             int r = (int) vh.compareAndExchangeRelease(2, 3);
 541             assertEquals(r, 1, "failing compareAndExchangeRelease int");
 542             int x = (int) vh.get();
 543             assertEquals(x, 1, "failing compareAndExchangeRelease int value");
 544         }
 545 
 546         {
 547             boolean success = false;
 548             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 549                 success = vh.weakCompareAndSet(1, 2);
 550             }
 551             assertEquals(success, true, "weakCompareAndSet int");
 552             int x = (int) vh.get();
 553             assertEquals(x, 2, "weakCompareAndSet int value");
 554         }
 555 
 556         {
 557             boolean success = false;
 558             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 559                 success = vh.weakCompareAndSetAcquire(2, 1);
 560             }
 561             assertEquals(success, true, "weakCompareAndSetAcquire int");
 562             int x = (int) vh.get();
 563             assertEquals(x, 1, "weakCompareAndSetAcquire int");
 564         }
 565 
 566         {
 567             boolean success = false;
 568             for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 569                 success = vh.weakCompareAndSetRelease(1, 2);
 570             }
 571             assertEquals(success, true, "weakCompareAndSetRelease int");
 572             int x = (int) vh.get();
 573             assertEquals(x, 2, "weakCompareAndSetRelease int");
 574         }
 575 
 576         // Compare set and get
 577         {
 578             int o = (int) vh.getAndSet( 1);
 579             assertEquals(o, 2, "getAndSet int");
 580             int x = (int) vh.get();
 581             assertEquals(x, 1, "getAndSet int value");
 582         }
 583 
 584         vh.set(1);
 585 
 586         // get and add, add and get
 587         {
 588             int o = (int) vh.getAndAdd( 3);
 589             assertEquals(o, 1, "getAndAdd int");
 590             int c = (int) vh.addAndGet(3);
 591             assertEquals(c, 1 + 3 + 3, "getAndAdd int value");


 673                 assertEquals(r, 2, "failing compareAndExchangeAcquire int");
 674                 int x = (int) vh.get(array, i);
 675                 assertEquals(x, 2, "failing compareAndExchangeAcquire int value");
 676             }
 677 
 678             {
 679                 int r = (int) vh.compareAndExchangeRelease(array, i, 2, 1);
 680                 assertEquals(r, 2, "success compareAndExchangeRelease int");
 681                 int x = (int) vh.get(array, i);
 682                 assertEquals(x, 1, "success compareAndExchangeRelease int value");
 683             }
 684 
 685             {
 686                 int r = (int) vh.compareAndExchangeRelease(array, i, 2, 3);
 687                 assertEquals(r, 1, "failing compareAndExchangeRelease int");
 688                 int x = (int) vh.get(array, i);
 689                 assertEquals(x, 1, "failing compareAndExchangeRelease int value");
 690             }
 691 
 692             {
 693                 boolean success = false;
 694                 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 695                     success = vh.weakCompareAndSet(array, i, 1, 2);
 696                 }
 697                 assertEquals(success, true, "weakCompareAndSet int");
 698                 int x = (int) vh.get(array, i);
 699                 assertEquals(x, 2, "weakCompareAndSet int value");
 700             }
 701 
 702             {
 703                 boolean success = false;
 704                 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 705                     success = vh.weakCompareAndSetAcquire(array, i, 2, 1);
 706                 }
 707                 assertEquals(success, true, "weakCompareAndSetAcquire int");
 708                 int x = (int) vh.get(array, i);
 709                 assertEquals(x, 1, "weakCompareAndSetAcquire int");
 710             }
 711 
 712             {
 713                 boolean success = false;
 714                 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) {
 715                     success = vh.weakCompareAndSetRelease(array, i, 1, 2);
 716                 }
 717                 assertEquals(success, true, "weakCompareAndSetRelease int");
 718                 int x = (int) vh.get(array, i);
 719                 assertEquals(x, 2, "weakCompareAndSetRelease int");
 720             }
 721 
 722             // Compare set and get
 723             {
 724                 int o = (int) vh.getAndSet(array, i, 1);
 725                 assertEquals(o, 2, "getAndSet int");
 726                 int x = (int) vh.get(array, i);
 727                 assertEquals(x, 1, "getAndSet int value");
 728             }
 729 
 730             vh.set(array, i, 1);
 731 
 732             // get and add, add and get
 733             {
 734                 int o = (int) vh.getAndAdd(array, i, 3);
 735                 assertEquals(o, 1, "getAndAdd int");
 736                 int c = (int) vh.addAndGet(array, i, 3);
 737                 assertEquals(c, 1 + 3 + 3, "getAndAdd int value");


< prev index next >