ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicLongArray9Test.java
Revision: 1.1
Committed: Fri Jun 17 19:00:48 2016 UTC (7 years, 10 months ago) by jsr166
Branch: MAIN
Log Message:
split jdk9 Atomic tests into separate *9Test.java files

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.Arrays;
8 import java.util.concurrent.atomic.AtomicLongArray;
9
10 import junit.framework.Test;
11 import junit.framework.TestSuite;
12
13 public class AtomicLongArray9Test extends JSR166TestCase {
14 public static void main(String[] args) {
15 main(suite(), args);
16 }
17 public static Test suite() {
18 return new TestSuite(AtomicLongArray9Test.class);
19 }
20
21 /**
22 * get and set for out of bound indices throw IndexOutOfBoundsException
23 */
24 public void testIndexing() {
25 AtomicLongArray aa = new AtomicLongArray(SIZE);
26 for (int index : new int[] { -1, SIZE }) {
27 final int j = index;
28 final Runnable[] tasks = {
29 () -> aa.getPlain(j),
30 () -> aa.getOpaque(j),
31 () -> aa.getAcquire(j),
32 () -> aa.setPlain(j, 1),
33 () -> aa.setOpaque(j, 1),
34 () -> aa.setRelease(j, 1),
35 () -> aa.compareAndExchange(j, 1, 2),
36 () -> aa.compareAndExchangeAcquire(j, 1, 2),
37 () -> aa.compareAndExchangeRelease(j, 1, 2),
38 () -> aa.weakCompareAndSetVolatile(j, 1, 2),
39 () -> aa.weakCompareAndSetAcquire(j, 1, 2),
40 () -> aa.weakCompareAndSetRelease(j, 1, 2),
41 };
42
43 assertThrows(IndexOutOfBoundsException.class, tasks);
44 }
45 }
46
47 /**
48 * getPlain returns the last value set
49 */
50 public void testGetPlainSet() {
51 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 AtomicLongArray aa = new AtomicLongArray(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 weakCompareAndSetVolatile succeeds in changing value when equal
193 * to expected
194 */
195 public void testWeakCompareAndSetVolatile() {
196 AtomicLongArray aa = new AtomicLongArray(SIZE);
197 for (int i = 0; i < SIZE; i++) {
198 aa.set(i, 1);
199 do {} while (!aa.weakCompareAndSetVolatile(i, 1, 2));
200 do {} while (!aa.weakCompareAndSetVolatile(i, 2, -4));
201 assertEquals(-4, aa.get(i));
202 do {} while (!aa.weakCompareAndSetVolatile(i, -4, 7));
203 assertEquals(7, aa.get(i));
204 }
205 }
206
207 /**
208 * repeated weakCompareAndSetAcquire succeeds in changing value when equal
209 * to expected
210 */
211 public void testWeakCompareAndSetAcquire() {
212 AtomicLongArray aa = new AtomicLongArray(SIZE);
213 for (int i = 0; i < SIZE; i++) {
214 aa.set(i, 1);
215 do {} while (!aa.weakCompareAndSetAcquire(i, 1, 2));
216 do {} while (!aa.weakCompareAndSetAcquire(i, 2, -4));
217 assertEquals(-4, aa.get(i));
218 do {} while (!aa.weakCompareAndSetAcquire(i, -4, 7));
219 assertEquals(7, aa.get(i));
220 }
221 }
222
223 /**
224 * repeated weakCompareAndSetRelease succeeds in changing value when equal
225 * to expected
226 */
227 public void testWeakCompareAndSetRelease() {
228 AtomicLongArray aa = new AtomicLongArray(SIZE);
229 for (int i = 0; i < SIZE; i++) {
230 aa.set(i, 1);
231 do {} while (!aa.weakCompareAndSetRelease(i, 1, 2));
232 do {} while (!aa.weakCompareAndSetRelease(i, 2, -4));
233 assertEquals(-4, aa.get(i));
234 do {} while (!aa.weakCompareAndSetRelease(i, -4, 7));
235 assertEquals(7, aa.get(i));
236 }
237 }
238
239 }