ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicIntegerArray9Test.java
Revision: 1.4
Committed: Fri Feb 22 19:27:47 2019 UTC (5 years, 2 months ago) by jsr166
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +4 -5 lines
Log Message:
improve assertThrows tests

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