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");
|