103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); |
103 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); |
104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE)); |
104 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE)); |
105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); |
105 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); |
106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); |
106 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); |
107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); |
107 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); |
108 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE)); |
|
109 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); |
108 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); |
110 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)); |
109 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)); |
111 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); |
110 assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); |
112 #else[CAS] |
111 #else[CAS] |
113 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); |
112 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_SET)); |
114 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE)); |
113 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_VOLATILE)); |
115 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); |
114 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)); |
116 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); |
115 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)); |
117 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); |
116 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)); |
118 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_VOLATILE)); |
|
119 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); |
117 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)); |
120 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)); |
118 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)); |
121 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); |
119 assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_SET)); |
122 #end[CAS] |
120 #end[CAS] |
123 |
121 |
502 $type$ x = ($type$) vh.get(recv); |
492 $type$ x = ($type$) vh.get(recv); |
503 assertEquals(x, $value1$, "failing compareAndExchangeRelease $type$ value"); |
493 assertEquals(x, $value1$, "failing compareAndExchangeRelease $type$ value"); |
504 } |
494 } |
505 |
495 |
506 { |
496 { |
507 boolean r = vh.weakCompareAndSet(recv, $value1$, $value2$); |
497 boolean success = false; |
508 assertEquals(r, true, "weakCompareAndSet $type$"); |
498 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
499 success = vh.weakCompareAndSet(recv, $value1$, $value2$); |
|
500 } |
|
501 assertEquals(success, true, "weakCompareAndSet $type$"); |
509 $type$ x = ($type$) vh.get(recv); |
502 $type$ x = ($type$) vh.get(recv); |
510 assertEquals(x, $value2$, "weakCompareAndSet $type$ value"); |
503 assertEquals(x, $value2$, "weakCompareAndSet $type$ value"); |
511 } |
504 } |
512 |
505 |
513 { |
506 { |
514 boolean r = vh.weakCompareAndSetAcquire(recv, $value2$, $value1$); |
507 boolean success = false; |
515 assertEquals(r, true, "weakCompareAndSetAcquire $type$"); |
508 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
509 success = vh.weakCompareAndSetAcquire(recv, $value2$, $value1$); |
|
510 } |
|
511 assertEquals(success, true, "weakCompareAndSetAcquire $type$"); |
516 $type$ x = ($type$) vh.get(recv); |
512 $type$ x = ($type$) vh.get(recv); |
517 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
513 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
518 } |
514 } |
519 |
515 |
520 { |
516 { |
521 boolean r = vh.weakCompareAndSetRelease(recv, $value1$, $value2$); |
517 boolean success = false; |
522 assertEquals(r, true, "weakCompareAndSetRelease $type$"); |
518 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
519 success = vh.weakCompareAndSetRelease(recv, $value1$, $value2$); |
|
520 } |
|
521 assertEquals(success, true, "weakCompareAndSetRelease $type$"); |
523 $type$ x = ($type$) vh.get(recv); |
522 $type$ x = ($type$) vh.get(recv); |
524 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
523 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
525 } |
524 } |
526 |
525 |
527 { |
|
528 boolean r = vh.weakCompareAndSetVolatile(recv, $value2$, $value1$); |
|
529 assertEquals(r, true, "weakCompareAndSetVolatile $type$"); |
|
530 $type$ x = ($type$) vh.get(recv); |
|
531 assertEquals(x, $value1$, "weakCompareAndSetVolatile $type$ value"); |
|
532 } |
|
533 |
|
534 // Compare set and get |
526 // Compare set and get |
535 { |
527 { |
536 $type$ o = ($type$) vh.getAndSet(recv, $value2$); |
528 $type$ o = ($type$) vh.getAndSet(recv, $value1$); |
537 assertEquals(o, $value1$, "getAndSet $type$"); |
529 assertEquals(o, $value2$, "getAndSet $type$"); |
538 $type$ x = ($type$) vh.get(recv); |
530 $type$ x = ($type$) vh.get(recv); |
539 assertEquals(x, $value2$, "getAndSet $type$ value"); |
531 assertEquals(x, $value1$, "getAndSet $type$ value"); |
540 } |
532 } |
541 #end[CAS] |
533 #end[CAS] |
542 |
534 |
543 #if[AtomicAdd] |
535 #if[AtomicAdd] |
544 vh.set(recv, $value1$); |
536 vh.set(recv, $value1$); |
689 $type$ x = ($type$) vh.get(); |
677 $type$ x = ($type$) vh.get(); |
690 assertEquals(x, $value1$, "failing compareAndExchangeRelease $type$ value"); |
678 assertEquals(x, $value1$, "failing compareAndExchangeRelease $type$ value"); |
691 } |
679 } |
692 |
680 |
693 { |
681 { |
694 boolean r = (boolean) vh.weakCompareAndSet($value1$, $value2$); |
682 boolean success = false; |
695 assertEquals(r, true, "weakCompareAndSet $type$"); |
683 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
684 success = vh.weakCompareAndSet($value1$, $value2$); |
|
685 } |
|
686 assertEquals(success, true, "weakCompareAndSet $type$"); |
696 $type$ x = ($type$) vh.get(); |
687 $type$ x = ($type$) vh.get(); |
697 assertEquals(x, $value2$, "weakCompareAndSet $type$ value"); |
688 assertEquals(x, $value2$, "weakCompareAndSet $type$ value"); |
698 } |
689 } |
699 |
690 |
700 { |
691 { |
701 boolean r = (boolean) vh.weakCompareAndSetAcquire($value2$, $value1$); |
692 boolean success = false; |
702 assertEquals(r, true, "weakCompareAndSetAcquire $type$"); |
693 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
694 success = vh.weakCompareAndSetAcquire($value2$, $value1$); |
|
695 } |
|
696 assertEquals(success, true, "weakCompareAndSetAcquire $type$"); |
703 $type$ x = ($type$) vh.get(); |
697 $type$ x = ($type$) vh.get(); |
704 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
698 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
705 } |
699 } |
706 |
700 |
707 { |
701 { |
708 boolean r = (boolean) vh.weakCompareAndSetRelease($value1$, $value2$); |
702 boolean success = false; |
709 assertEquals(r, true, "weakCompareAndSetRelease $type$"); |
703 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
704 success = vh.weakCompareAndSetRelease($value1$, $value2$); |
|
705 } |
|
706 assertEquals(success, true, "weakCompareAndSetRelease $type$"); |
710 $type$ x = ($type$) vh.get(); |
707 $type$ x = ($type$) vh.get(); |
711 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
708 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
712 } |
709 } |
713 |
710 |
714 { |
|
715 boolean r = (boolean) vh.weakCompareAndSetVolatile($value2$, $value1$); |
|
716 assertEquals(r, true, "weakCompareAndSetVolatile $type$"); |
|
717 $type$ x = ($type$) vh.get(); |
|
718 assertEquals(x, $value1$, "weakCompareAndSetVolatile $type$ value"); |
|
719 } |
|
720 |
|
721 // Compare set and get |
711 // Compare set and get |
722 { |
712 { |
723 $type$ o = ($type$) vh.getAndSet( $value2$); |
713 $type$ o = ($type$) vh.getAndSet( $value1$); |
724 assertEquals(o, $value1$, "getAndSet $type$"); |
714 assertEquals(o, $value2$, "getAndSet $type$"); |
725 $type$ x = ($type$) vh.get(); |
715 $type$ x = ($type$) vh.get(); |
726 assertEquals(x, $value2$, "getAndSet $type$ value"); |
716 assertEquals(x, $value1$, "getAndSet $type$ value"); |
727 } |
717 } |
728 #end[CAS] |
718 #end[CAS] |
729 |
719 |
730 #if[AtomicAdd] |
720 #if[AtomicAdd] |
731 vh.set($value1$); |
721 vh.set($value1$); |
879 $type$ x = ($type$) vh.get(array, i); |
865 $type$ x = ($type$) vh.get(array, i); |
880 assertEquals(x, $value1$, "failing compareAndExchangeRelease $type$ value"); |
866 assertEquals(x, $value1$, "failing compareAndExchangeRelease $type$ value"); |
881 } |
867 } |
882 |
868 |
883 { |
869 { |
884 boolean r = vh.weakCompareAndSet(array, i, $value1$, $value2$); |
870 boolean success = false; |
885 assertEquals(r, true, "weakCompareAndSet $type$"); |
871 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
872 success = vh.weakCompareAndSet(array, i, $value1$, $value2$); |
|
873 } |
|
874 assertEquals(success, true, "weakCompareAndSet $type$"); |
886 $type$ x = ($type$) vh.get(array, i); |
875 $type$ x = ($type$) vh.get(array, i); |
887 assertEquals(x, $value2$, "weakCompareAndSet $type$ value"); |
876 assertEquals(x, $value2$, "weakCompareAndSet $type$ value"); |
888 } |
877 } |
889 |
878 |
890 { |
879 { |
891 boolean r = vh.weakCompareAndSetAcquire(array, i, $value2$, $value1$); |
880 boolean success = false; |
892 assertEquals(r, true, "weakCompareAndSetAcquire $type$"); |
881 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
882 success = vh.weakCompareAndSetAcquire(array, i, $value2$, $value1$); |
|
883 } |
|
884 assertEquals(success, true, "weakCompareAndSetAcquire $type$"); |
893 $type$ x = ($type$) vh.get(array, i); |
885 $type$ x = ($type$) vh.get(array, i); |
894 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
886 assertEquals(x, $value1$, "weakCompareAndSetAcquire $type$"); |
895 } |
887 } |
896 |
888 |
897 { |
889 { |
898 boolean r = vh.weakCompareAndSetRelease(array, i, $value1$, $value2$); |
890 boolean success = false; |
899 assertEquals(r, true, "weakCompareAndSetRelease $type$"); |
891 for (int c = 0; c < WEAK_ATTEMPTS && !success; c++) { |
|
892 success = vh.weakCompareAndSetRelease(array, i, $value1$, $value2$); |
|
893 } |
|
894 assertEquals(success, true, "weakCompareAndSetRelease $type$"); |
900 $type$ x = ($type$) vh.get(array, i); |
895 $type$ x = ($type$) vh.get(array, i); |
901 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
896 assertEquals(x, $value2$, "weakCompareAndSetRelease $type$"); |
902 } |
897 } |
903 |
898 |
904 { |
|
905 boolean r = vh.weakCompareAndSetVolatile(array, i, $value2$, $value1$); |
|
906 assertEquals(r, true, "weakCompareAndSetVolatile $type$"); |
|
907 $type$ x = ($type$) vh.get(array, i); |
|
908 assertEquals(x, $value1$, "weakCompareAndSetVolatile $type$ value"); |
|
909 } |
|
910 |
|
911 // Compare set and get |
899 // Compare set and get |
912 { |
900 { |
913 $type$ o = ($type$) vh.getAndSet(array, i, $value2$); |
901 $type$ o = ($type$) vh.getAndSet(array, i, $value1$); |
914 assertEquals(o, $value1$, "getAndSet $type$"); |
902 assertEquals(o, $value2$, "getAndSet $type$"); |
915 $type$ x = ($type$) vh.get(array, i); |
903 $type$ x = ($type$) vh.get(array, i); |
916 assertEquals(x, $value2$, "getAndSet $type$ value"); |
904 assertEquals(x, $value1$, "getAndSet $type$ value"); |
917 } |
905 } |
918 #end[CAS] |
906 #end[CAS] |
919 |
907 |
920 #if[AtomicAdd] |
908 #if[AtomicAdd] |
921 vh.set(array, i, $value1$); |
909 vh.set(array, i, $value1$); |