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

# User Rev Content
1 jsr166 1.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     }