ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicReference9Test.java
Revision: 1.3
Committed: Tue Jan 26 13:33:05 2021 UTC (3 years, 3 months ago) by dl
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +74 -74 lines
Log Message:
Replace Integer with Item class

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 */
6
7 import java.util.concurrent.atomic.AtomicReference;
8
9 import junit.framework.Test;
10 import junit.framework.TestSuite;
11
12 public class AtomicReference9Test extends JSR166TestCase {
13 public static void main(String[] args) {
14 main(suite(), args);
15 }
16 public static Test suite() {
17 return new TestSuite(AtomicReference9Test.class);
18 }
19
20 /**
21 * getPlain returns the last value set
22 */
23 public void testGetPlainSet() {
24 AtomicReference<Item> ai = new AtomicReference<>(one);
25 mustEqual(one, ai.getPlain());
26 ai.set(two);
27 mustEqual(two, ai.getPlain());
28 ai.set(minusThree);
29 mustEqual(minusThree, ai.getPlain());
30 }
31
32 /**
33 * getOpaque returns the last value set
34 */
35 public void testGetOpaqueSet() {
36 AtomicReference<Item> ai = new AtomicReference<>(one);
37 mustEqual(one, ai.getOpaque());
38 ai.set(two);
39 mustEqual(two, ai.getOpaque());
40 ai.set(minusThree);
41 mustEqual(minusThree, ai.getOpaque());
42 }
43
44 /**
45 * getAcquire returns the last value set
46 */
47 public void testGetAcquireSet() {
48 AtomicReference<Item> ai = new AtomicReference<>(one);
49 mustEqual(one, ai.getAcquire());
50 ai.set(two);
51 mustEqual(two, ai.getAcquire());
52 ai.set(minusThree);
53 mustEqual(minusThree, ai.getAcquire());
54 }
55
56 /**
57 * get returns the last value setPlain
58 */
59 public void testGetSetPlain() {
60 AtomicReference<Item> ai = new AtomicReference<>(one);
61 mustEqual(one, ai.get());
62 ai.setPlain(two);
63 mustEqual(two, ai.get());
64 ai.setPlain(minusThree);
65 mustEqual(minusThree, ai.get());
66 }
67
68 /**
69 * get returns the last value setOpaque
70 */
71 public void testGetSetOpaque() {
72 AtomicReference<Item> ai = new AtomicReference<>(one);
73 mustEqual(one, ai.get());
74 ai.setOpaque(two);
75 mustEqual(two, ai.get());
76 ai.setOpaque(minusThree);
77 mustEqual(minusThree, ai.get());
78 }
79
80 /**
81 * get returns the last value setRelease
82 */
83 public void testGetSetRelease() {
84 AtomicReference<Item> ai = new AtomicReference<>(one);
85 mustEqual(one, ai.get());
86 ai.setRelease(two);
87 mustEqual(two, ai.get());
88 ai.setRelease(minusThree);
89 mustEqual(minusThree, ai.get());
90 }
91
92 /**
93 * compareAndExchange succeeds in changing value if equal to
94 * expected else fails
95 */
96 public void testCompareAndExchange() {
97 AtomicReference<Item> ai = new AtomicReference<>(one);
98 mustEqual(one, ai.compareAndExchange(one, two));
99 mustEqual(two, ai.compareAndExchange(two, minusFour));
100 mustEqual(minusFour, ai.get());
101 mustEqual(minusFour, ai.compareAndExchange(minusFive, seven));
102 mustEqual(minusFour, ai.get());
103 mustEqual(minusFour, ai.compareAndExchange(minusFour, seven));
104 mustEqual(seven, ai.get());
105 }
106
107 /**
108 * compareAndExchangeAcquire succeeds in changing value if equal to
109 * expected else fails
110 */
111 public void testCompareAndExchangeAcquire() {
112 AtomicReference<Item> ai = new AtomicReference<>(one);
113 mustEqual(one, ai.compareAndExchangeAcquire(one, two));
114 mustEqual(two, ai.compareAndExchangeAcquire(two, minusFour));
115 mustEqual(minusFour, ai.get());
116 mustEqual(minusFour, ai.compareAndExchangeAcquire(minusFive, seven));
117 mustEqual(minusFour, ai.get());
118 mustEqual(minusFour, ai.compareAndExchangeAcquire(minusFour, seven));
119 mustEqual(seven, ai.get());
120 }
121
122 /**
123 * compareAndExchangeRelease succeeds in changing value if equal to
124 * expected else fails
125 */
126 public void testCompareAndExchangeRelease() {
127 AtomicReference<Item> ai = new AtomicReference<>(one);
128 mustEqual(one, ai.compareAndExchangeRelease(one, two));
129 mustEqual(two, ai.compareAndExchangeRelease(two, minusFour));
130 mustEqual(minusFour, ai.get());
131 mustEqual(minusFour, ai.compareAndExchangeRelease(minusFive, seven));
132 mustEqual(minusFour, ai.get());
133 mustEqual(minusFour, ai.compareAndExchangeRelease(minusFour, seven));
134 mustEqual(seven, ai.get());
135 }
136
137 /**
138 * repeated weakCompareAndSetPlain succeeds in changing value when equal
139 * to expected
140 */
141 public void testWeakCompareAndSetPlain() {
142 AtomicReference<Item> ai = new AtomicReference<>(one);
143 do {} while (!ai.weakCompareAndSetPlain(one, two));
144 do {} while (!ai.weakCompareAndSetPlain(two, minusFour));
145 mustEqual(minusFour, ai.get());
146 do {} while (!ai.weakCompareAndSetPlain(minusFour, seven));
147 mustEqual(seven, ai.get());
148 }
149
150 /**
151 * repeated weakCompareAndSetVolatile succeeds in changing value when equal
152 * to expected
153 */
154 public void testWeakCompareAndSetVolatile() {
155 AtomicReference<Item> ai = new AtomicReference<>(one);
156 do {} while (!ai.weakCompareAndSetVolatile(one, two));
157 do {} while (!ai.weakCompareAndSetVolatile(two, minusFour));
158 mustEqual(minusFour, ai.get());
159 do {} while (!ai.weakCompareAndSetVolatile(minusFour, seven));
160 mustEqual(seven, ai.get());
161 }
162
163 /**
164 * repeated weakCompareAndSetAcquire succeeds in changing value when equal
165 * to expected
166 */
167 public void testWeakCompareAndSetAcquire() {
168 AtomicReference<Item> ai = new AtomicReference<>(one);
169 do {} while (!ai.weakCompareAndSetAcquire(one, two));
170 do {} while (!ai.weakCompareAndSetAcquire(two, minusFour));
171 mustEqual(minusFour, ai.get());
172 do {} while (!ai.weakCompareAndSetAcquire(minusFour, seven));
173 mustEqual(seven, ai.get());
174 }
175
176 /**
177 * repeated weakCompareAndSetRelease succeeds in changing value when equal
178 * to expected
179 */
180 public void testWeakCompareAndSetRelease() {
181 AtomicReference<Item> ai = new AtomicReference<>(one);
182 do {} while (!ai.weakCompareAndSetRelease(one, two));
183 do {} while (!ai.weakCompareAndSetRelease(two, minusFour));
184 mustEqual(minusFour, ai.get());
185 do {} while (!ai.weakCompareAndSetRelease(minusFour, seven));
186 mustEqual(seven, ai.get());
187 }
188
189 }