ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicReferenceArray9Test.java
Revision: 1.2
Committed: Wed Aug 24 22:22:39 2016 UTC (7 years, 8 months ago) by jsr166
Branch: MAIN
Changes since 1.1: +0 -1 lines
Log Message:
fix imports

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.AtomicReferenceArray;
8
9 import junit.framework.Test;
10 import junit.framework.TestSuite;
11
12 public class AtomicReferenceArray9Test extends JSR166TestCase {
13 public static void main(String[] args) {
14 main(suite(), args);
15 }
16 public static Test suite() {
17 return new TestSuite(AtomicReferenceArray9Test.class);
18 }
19
20 /**
21 * get and set for out of bound indices throw IndexOutOfBoundsException
22 */
23 public void testIndexing() {
24 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
25 for (int index : new int[] { -1, SIZE }) {
26 final int j = index;
27 final Runnable[] tasks = {
28 () -> aa.getPlain(j),
29 () -> aa.getOpaque(j),
30 () -> aa.getAcquire(j),
31 () -> aa.setPlain(j, null),
32 () -> aa.setOpaque(j, null),
33 () -> aa.setRelease(j, null),
34 () -> aa.compareAndExchange(j, null, null),
35 () -> aa.compareAndExchangeAcquire(j, null, null),
36 () -> aa.compareAndExchangeRelease(j, null, null),
37 () -> aa.weakCompareAndSetVolatile(j, null, null),
38 () -> aa.weakCompareAndSetAcquire(j, null, null),
39 () -> aa.weakCompareAndSetRelease(j, null, null),
40 };
41
42 assertThrows(IndexOutOfBoundsException.class, tasks);
43 }
44 }
45
46 /**
47 * getPlain returns the last value set
48 */
49 public void testGetPlainSet() {
50 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
51 for (int i = 0; i < SIZE; i++) {
52 aa.set(i, one);
53 assertEquals(one, aa.getPlain(i));
54 aa.set(i, two);
55 assertEquals(two, aa.getPlain(i));
56 aa.set(i, m3);
57 assertEquals(m3, aa.getPlain(i));
58 }
59 }
60
61 /**
62 * getOpaque returns the last value set
63 */
64 public void testGetOpaqueSet() {
65 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
66 for (int i = 0; i < SIZE; i++) {
67 aa.set(i, one);
68 assertEquals(one, aa.getOpaque(i));
69 aa.set(i, two);
70 assertEquals(two, aa.getOpaque(i));
71 aa.set(i, m3);
72 assertEquals(m3, aa.getOpaque(i));
73 }
74 }
75
76 /**
77 * getAcquire returns the last value set
78 */
79 public void testGetAcquireSet() {
80 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
81 for (int i = 0; i < SIZE; i++) {
82 aa.set(i, one);
83 assertEquals(one, aa.getAcquire(i));
84 aa.set(i, two);
85 assertEquals(two, aa.getAcquire(i));
86 aa.set(i, m3);
87 assertEquals(m3, aa.getAcquire(i));
88 }
89 }
90
91 /**
92 * get returns the last value setPlain
93 */
94 public void testGetSetPlain() {
95 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
96 for (int i = 0; i < SIZE; i++) {
97 aa.setPlain(i, one);
98 assertEquals(one, aa.get(i));
99 aa.setPlain(i, two);
100 assertEquals(two, aa.get(i));
101 aa.setPlain(i, m3);
102 assertEquals(m3, aa.get(i));
103 }
104 }
105
106 /**
107 * get returns the last value setOpaque
108 */
109 public void testGetSetOpaque() {
110 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
111 for (int i = 0; i < SIZE; i++) {
112 aa.setOpaque(i, one);
113 assertEquals(one, aa.get(i));
114 aa.setOpaque(i, two);
115 assertEquals(two, aa.get(i));
116 aa.setOpaque(i, m3);
117 assertEquals(m3, aa.get(i));
118 }
119 }
120
121 /**
122 * get returns the last value setRelease
123 */
124 public void testGetSetRelease() {
125 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
126 for (int i = 0; i < SIZE; i++) {
127 aa.setRelease(i, one);
128 assertEquals(one, aa.get(i));
129 aa.setRelease(i, two);
130 assertEquals(two, aa.get(i));
131 aa.setRelease(i, m3);
132 assertEquals(m3, aa.get(i));
133 }
134 }
135
136 /**
137 * compareAndExchange succeeds in changing value if equal to
138 * expected else fails
139 */
140 public void testCompareAndExchange() {
141 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
142 for (int i = 0; i < SIZE; i++) {
143 aa.set(i, one);
144 assertEquals(one, aa.compareAndExchange(i, one, two));
145 assertEquals(two, aa.compareAndExchange(i, two, m4));
146 assertEquals(m4, aa.get(i));
147 assertEquals(m4, aa.compareAndExchange(i,m5, seven));
148 assertEquals(m4, aa.get(i));
149 assertEquals(m4, aa.compareAndExchange(i, m4, seven));
150 assertEquals(seven, aa.get(i));
151 }
152 }
153
154 /**
155 * compareAndExchangeAcquire succeeds in changing value if equal to
156 * expected else fails
157 */
158 public void testCompareAndExchangeAcquire() {
159 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
160 for (int i = 0; i < SIZE; i++) {
161 aa.set(i, one);
162 assertEquals(one, aa.compareAndExchangeAcquire(i, one, two));
163 assertEquals(two, aa.compareAndExchangeAcquire(i, two, m4));
164 assertEquals(m4, aa.get(i));
165 assertEquals(m4, aa.compareAndExchangeAcquire(i,m5, seven));
166 assertEquals(m4, aa.get(i));
167 assertEquals(m4, aa.compareAndExchangeAcquire(i, m4, seven));
168 assertEquals(seven, aa.get(i));
169 }
170 }
171
172 /**
173 * compareAndExchangeRelease succeeds in changing value if equal to
174 * expected else fails
175 */
176 public void testCompareAndExchangeRelease() {
177 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
178 for (int i = 0; i < SIZE; i++) {
179 aa.set(i, one);
180 assertEquals(one, aa.compareAndExchangeRelease(i, one, two));
181 assertEquals(two, aa.compareAndExchangeRelease(i, two, m4));
182 assertEquals(m4, aa.get(i));
183 assertEquals(m4, aa.compareAndExchangeRelease(i,m5, seven));
184 assertEquals(m4, aa.get(i));
185 assertEquals(m4, aa.compareAndExchangeRelease(i, m4, seven));
186 assertEquals(seven, aa.get(i));
187 }
188 }
189
190 /**
191 * repeated weakCompareAndSetVolatile succeeds in changing value when equal
192 * to expected
193 */
194 public void testWeakCompareAndSetVolatile() {
195 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
196 for (int i = 0; i < SIZE; i++) {
197 aa.set(i, one);
198 do {} while (!aa.weakCompareAndSetVolatile(i, one, two));
199 do {} while (!aa.weakCompareAndSetVolatile(i, two, m4));
200 assertEquals(m4, aa.get(i));
201 do {} while (!aa.weakCompareAndSetVolatile(i, m4, seven));
202 assertEquals(seven, aa.get(i));
203 }
204 }
205
206 /**
207 * repeated weakCompareAndSetAcquire succeeds in changing value when equal
208 * to expected
209 */
210 public void testWeakCompareAndSetAcquire() {
211 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
212 for (int i = 0; i < SIZE; i++) {
213 aa.set(i, one);
214 do {} while (!aa.weakCompareAndSetAcquire(i, one, two));
215 do {} while (!aa.weakCompareAndSetAcquire(i, two, m4));
216 assertEquals(m4, aa.get(i));
217 do {} while (!aa.weakCompareAndSetAcquire(i, m4, seven));
218 assertEquals(seven, aa.get(i));
219 }
220 }
221
222 /**
223 * repeated weakCompareAndSetRelease succeeds in changing value when equal
224 * to expected
225 */
226 public void testWeakCompareAndSetRelease() {
227 AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<>(SIZE);
228 for (int i = 0; i < SIZE; i++) {
229 aa.set(i, one);
230 do {} while (!aa.weakCompareAndSetRelease(i, one, two));
231 do {} while (!aa.weakCompareAndSetRelease(i, two, m4));
232 assertEquals(m4, aa.get(i));
233 do {} while (!aa.weakCompareAndSetRelease(i, m4, seven));
234 assertEquals(seven, aa.get(i));
235 }
236 }
237
238 }