102 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); |
102 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); |
103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE)); |
103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE)); |
104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); |
104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); |
105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); |
105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); |
106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); |
106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); |
|
107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE)); |
107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); |
108 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)); |
109 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); |
110 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); |
110 |
111 |
111 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD)); |
112 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD)); |
433 assertEquals(r, true, "weakCompareAndSetRelease String"); |
434 assertEquals(r, true, "weakCompareAndSetRelease String"); |
434 String x = (String) vh.get(recv); |
435 String x = (String) vh.get(recv); |
435 assertEquals(x, "bar", "weakCompareAndSetRelease String"); |
436 assertEquals(x, "bar", "weakCompareAndSetRelease String"); |
436 } |
437 } |
437 |
438 |
|
439 { |
|
440 boolean r = vh.weakCompareAndSetVolatile(recv, "bar", "foo"); |
|
441 assertEquals(r, true, "weakCompareAndSetVolatile String"); |
|
442 String x = (String) vh.get(recv); |
|
443 assertEquals(x, "foo", "weakCompareAndSetVolatile String value"); |
|
444 } |
|
445 |
438 // Compare set and get |
446 // Compare set and get |
439 { |
447 { |
440 String o = (String) vh.getAndSet(recv, "foo"); |
448 String o = (String) vh.getAndSet(recv, "bar"); |
441 assertEquals(o, "bar", "getAndSet String"); |
449 assertEquals(o, "foo", "getAndSet String"); |
442 String x = (String) vh.get(recv); |
450 String x = (String) vh.get(recv); |
443 assertEquals(x, "foo", "getAndSet String value"); |
451 assertEquals(x, "bar", "getAndSet String value"); |
444 } |
452 } |
445 |
453 |
446 } |
454 } |
447 |
455 |
448 static void testInstanceFieldUnsupported(VarHandleTestAccessString recv, VarHandle vh) { |
456 static void testInstanceFieldUnsupported(VarHandleTestAccessString recv, VarHandle vh) { |
559 String x = (String) vh.get(); |
567 String x = (String) vh.get(); |
560 assertEquals(x, "foo", "weakCompareAndSetAcquire String"); |
568 assertEquals(x, "foo", "weakCompareAndSetAcquire String"); |
561 } |
569 } |
562 |
570 |
563 { |
571 { |
564 boolean r = (boolean) vh.weakCompareAndSetRelease( "foo", "bar"); |
572 boolean r = (boolean) vh.weakCompareAndSetRelease("foo", "bar"); |
565 assertEquals(r, true, "weakCompareAndSetRelease String"); |
573 assertEquals(r, true, "weakCompareAndSetRelease String"); |
566 String x = (String) vh.get(); |
574 String x = (String) vh.get(); |
567 assertEquals(x, "bar", "weakCompareAndSetRelease String"); |
575 assertEquals(x, "bar", "weakCompareAndSetRelease String"); |
568 } |
576 } |
569 |
577 |
|
578 { |
|
579 boolean r = (boolean) vh.weakCompareAndSetVolatile("bar", "foo"); |
|
580 assertEquals(r, true, "weakCompareAndSetVolatile String"); |
|
581 String x = (String) vh.get(); |
|
582 assertEquals(x, "foo", "weakCompareAndSetVolatile String value"); |
|
583 } |
|
584 |
570 // Compare set and get |
585 // Compare set and get |
571 { |
586 { |
572 String o = (String) vh.getAndSet( "foo"); |
587 String o = (String) vh.getAndSet( "bar"); |
573 assertEquals(o, "bar", "getAndSet String"); |
588 assertEquals(o, "foo", "getAndSet String"); |
574 String x = (String) vh.get(); |
589 String x = (String) vh.get(); |
575 assertEquals(x, "foo", "getAndSet String value"); |
590 assertEquals(x, "bar", "getAndSet String value"); |
576 } |
591 } |
577 |
592 |
578 } |
593 } |
579 |
594 |
580 static void testStaticFieldUnsupported(VarHandle vh) { |
595 static void testStaticFieldUnsupported(VarHandle vh) { |
700 assertEquals(r, true, "weakCompareAndSetRelease String"); |
715 assertEquals(r, true, "weakCompareAndSetRelease String"); |
701 String x = (String) vh.get(array, i); |
716 String x = (String) vh.get(array, i); |
702 assertEquals(x, "bar", "weakCompareAndSetRelease String"); |
717 assertEquals(x, "bar", "weakCompareAndSetRelease String"); |
703 } |
718 } |
704 |
719 |
|
720 { |
|
721 boolean r = vh.weakCompareAndSetVolatile(array, i, "bar", "foo"); |
|
722 assertEquals(r, true, "weakCompareAndSetVolatile String"); |
|
723 String x = (String) vh.get(array, i); |
|
724 assertEquals(x, "foo", "weakCompareAndSetVolatile String value"); |
|
725 } |
|
726 |
705 // Compare set and get |
727 // Compare set and get |
706 { |
728 { |
707 String o = (String) vh.getAndSet(array, i, "foo"); |
729 String o = (String) vh.getAndSet(array, i, "bar"); |
708 assertEquals(o, "bar", "getAndSet String"); |
730 assertEquals(o, "foo", "getAndSet String"); |
709 String x = (String) vh.get(array, i); |
731 String x = (String) vh.get(array, i); |
710 assertEquals(x, "foo", "getAndSet String value"); |
732 assertEquals(x, "bar", "getAndSet String value"); |
711 } |
733 } |
712 |
734 |
713 } |
735 } |
714 } |
736 } |
715 |
737 |
784 checkIOOBE(() -> { |
806 checkIOOBE(() -> { |
785 boolean r = vh.weakCompareAndSet(array, ci, "foo", "bar"); |
807 boolean r = vh.weakCompareAndSet(array, ci, "foo", "bar"); |
786 }); |
808 }); |
787 |
809 |
788 checkIOOBE(() -> { |
810 checkIOOBE(() -> { |
|
811 boolean r = vh.weakCompareAndSetVolatile(array, ci, "foo", "bar"); |
|
812 }); |
|
813 |
|
814 checkIOOBE(() -> { |
789 boolean r = vh.weakCompareAndSetAcquire(array, ci, "foo", "bar"); |
815 boolean r = vh.weakCompareAndSetAcquire(array, ci, "foo", "bar"); |
790 }); |
816 }); |
791 |
817 |
792 checkIOOBE(() -> { |
818 checkIOOBE(() -> { |
793 boolean r = vh.weakCompareAndSetRelease(array, ci, "foo", "bar"); |
819 boolean r = vh.weakCompareAndSetRelease(array, ci, "foo", "bar"); |