[cvs] / jsr166 / src / test / tck / AtomicLongTest.java Repository:
ViewVC logotype

Annotation of /jsr166/src/test/tck/AtomicLongTest.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.21 - (view) (download)

1 : dl 1.1 /*
2 : dl 1.6 * 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 : jsr166 1.20 * http://creativecommons.org/publicdomain/zero/1.0/
5 : jsr166 1.11 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 :     * Pat Fisher, Mike Judd.
7 : dl 1.1 */
8 :    
9 :     import junit.framework.*;
10 :     import java.util.concurrent.atomic.*;
11 : dl 1.2 import java.io.*;
12 : dl 1.1
13 : dl 1.3 public class AtomicLongTest extends JSR166TestCase {
14 : jsr166 1.19 public static void main(String[] args) {
15 :     junit.textui.TestRunner.run(suite());
16 : dl 1.1 }
17 :     public static Test suite() {
18 :     return new TestSuite(AtomicLongTest.class);
19 :     }
20 :    
21 : jsr166 1.17 final long[] VALUES = {
22 :     Long.MIN_VALUE,
23 :     Integer.MIN_VALUE, -1, 0, 1, 42, Integer.MAX_VALUE,
24 :     Long.MAX_VALUE,
25 :     };
26 :    
27 : dl 1.4 /**
28 : dl 1.5 * constructor initializes to given value
29 : dl 1.4 */
30 : jsr166 1.13 public void testConstructor() {
31 : dl 1.1 AtomicLong ai = new AtomicLong(1);
32 : jsr166 1.16 assertEquals(1,ai.get());
33 : dl 1.1 }
34 :    
35 : dl 1.4 /**
36 : dl 1.7 * default constructed initializes to zero
37 : dl 1.4 */
38 : jsr166 1.13 public void testConstructor2() {
39 : dl 1.1 AtomicLong ai = new AtomicLong();
40 : jsr166 1.16 assertEquals(0,ai.get());
41 : dl 1.1 }
42 :    
43 : dl 1.4 /**
44 : dl 1.5 * get returns the last value set
45 : dl 1.4 */
46 : jsr166 1.13 public void testGetSet() {
47 : dl 1.1 AtomicLong ai = new AtomicLong(1);
48 : jsr166 1.16 assertEquals(1,ai.get());
49 :     ai.set(2);
50 :     assertEquals(2,ai.get());
51 :     ai.set(-3);
52 :     assertEquals(-3,ai.get());
53 : dl 1.1 }
54 : dl 1.10
55 :     /**
56 :     * get returns the last value lazySet in same thread
57 :     */
58 : jsr166 1.13 public void testGetLazySet() {
59 : dl 1.10 AtomicLong ai = new AtomicLong(1);
60 : jsr166 1.16 assertEquals(1,ai.get());
61 :     ai.lazySet(2);
62 :     assertEquals(2,ai.get());
63 :     ai.lazySet(-3);
64 :     assertEquals(-3,ai.get());
65 : dl 1.10 }
66 :    
67 : dl 1.4 /**
68 : dl 1.5 * compareAndSet succeeds in changing value if equal to expected else fails
69 : dl 1.4 */
70 : jsr166 1.13 public void testCompareAndSet() {
71 : dl 1.1 AtomicLong ai = new AtomicLong(1);
72 : jsr166 1.16 assertTrue(ai.compareAndSet(1,2));
73 :     assertTrue(ai.compareAndSet(2,-4));
74 :     assertEquals(-4,ai.get());
75 :     assertFalse(ai.compareAndSet(-5,7));
76 : jsr166 1.18 assertEquals(-4,ai.get());
77 : jsr166 1.16 assertTrue(ai.compareAndSet(-4,7));
78 :     assertEquals(7,ai.get());
79 : dl 1.1 }
80 :    
81 : dl 1.4 /**
82 : dl 1.5 * compareAndSet in one thread enables another waiting for value
83 :     * to succeed
84 :     */
85 : jsr166 1.14 public void testCompareAndSetInMultipleThreads() throws Exception {
86 : dl 1.5 final AtomicLong ai = new AtomicLong(1);
87 : jsr166 1.15 Thread t = new Thread(new CheckedRunnable() {
88 :     public void realRun() {
89 :     while (!ai.compareAndSet(2, 3))
90 :     Thread.yield();
91 :     }});
92 : jsr166 1.14
93 :     t.start();
94 :     assertTrue(ai.compareAndSet(1, 2));
95 :     t.join(LONG_DELAY_MS);
96 :     assertFalse(t.isAlive());
97 :     assertEquals(ai.get(), 3);
98 : dl 1.5 }
99 :    
100 :     /**
101 :     * repeated weakCompareAndSet succeeds in changing value when equal
102 : jsr166 1.11 * to expected
103 : dl 1.4 */
104 : jsr166 1.13 public void testWeakCompareAndSet() {
105 : dl 1.1 AtomicLong ai = new AtomicLong(1);
106 : jsr166 1.16 while (!ai.weakCompareAndSet(1,2));
107 :     while (!ai.weakCompareAndSet(2,-4));
108 :     assertEquals(-4,ai.get());
109 :     while (!ai.weakCompareAndSet(-4,7));
110 :     assertEquals(7,ai.get());
111 : dl 1.1 }
112 :    
113 : dl 1.4 /**
114 : dl 1.5 * getAndSet returns previous value and sets to given value
115 : dl 1.4 */
116 : jsr166 1.13 public void testGetAndSet() {
117 : dl 1.1 AtomicLong ai = new AtomicLong(1);
118 : jsr166 1.16 assertEquals(1,ai.getAndSet(0));
119 :     assertEquals(0,ai.getAndSet(-10));
120 :     assertEquals(-10,ai.getAndSet(1));
121 : dl 1.1 }
122 :    
123 : dl 1.4 /**
124 : dl 1.5 * getAndAdd returns previous value and adds given value
125 : dl 1.4 */
126 : jsr166 1.13 public void testGetAndAdd() {
127 : dl 1.1 AtomicLong ai = new AtomicLong(1);
128 : jsr166 1.16 assertEquals(1,ai.getAndAdd(2));
129 :     assertEquals(3,ai.get());
130 :     assertEquals(3,ai.getAndAdd(-4));
131 :     assertEquals(-1,ai.get());
132 : dl 1.1 }
133 :    
134 : dl 1.4 /**
135 : dl 1.5 * getAndDecrement returns previous value and decrements
136 : dl 1.4 */
137 : jsr166 1.13 public void testGetAndDecrement() {
138 : dl 1.1 AtomicLong ai = new AtomicLong(1);
139 : jsr166 1.16 assertEquals(1,ai.getAndDecrement());
140 :     assertEquals(0,ai.getAndDecrement());
141 :     assertEquals(-1,ai.getAndDecrement());
142 : dl 1.1 }
143 :    
144 : dl 1.4 /**
145 : dl 1.5 * getAndIncrement returns previous value and increments
146 : dl 1.4 */
147 : jsr166 1.13 public void testGetAndIncrement() {
148 : dl 1.1 AtomicLong ai = new AtomicLong(1);
149 : jsr166 1.16 assertEquals(1,ai.getAndIncrement());
150 :     assertEquals(2,ai.get());
151 :     ai.set(-2);
152 :     assertEquals(-2,ai.getAndIncrement());
153 :     assertEquals(-1,ai.getAndIncrement());
154 :     assertEquals(0,ai.getAndIncrement());
155 :     assertEquals(1,ai.get());
156 : dl 1.1 }
157 :    
158 : dl 1.4 /**
159 : dl 1.5 * addAndGet adds given value to current, and returns current value
160 : dl 1.4 */
161 : jsr166 1.13 public void testAddAndGet() {
162 : dl 1.1 AtomicLong ai = new AtomicLong(1);
163 : jsr166 1.16 assertEquals(3,ai.addAndGet(2));
164 :     assertEquals(3,ai.get());
165 :     assertEquals(-1,ai.addAndGet(-4));
166 :     assertEquals(-1,ai.get());
167 : dl 1.1 }
168 :    
169 : dl 1.4 /**
170 : dl 1.5 * decrementAndGet decrements and returns current value
171 : dl 1.4 */
172 : jsr166 1.13 public void testDecrementAndGet() {
173 : dl 1.1 AtomicLong ai = new AtomicLong(1);
174 : jsr166 1.16 assertEquals(0,ai.decrementAndGet());
175 :     assertEquals(-1,ai.decrementAndGet());
176 :     assertEquals(-2,ai.decrementAndGet());
177 :     assertEquals(-2,ai.get());
178 : dl 1.1 }
179 :    
180 : dl 1.4 /**
181 : dl 1.5 * incrementAndGet increments and returns current value
182 : dl 1.4 */
183 : jsr166 1.13 public void testIncrementAndGet() {
184 : dl 1.1 AtomicLong ai = new AtomicLong(1);
185 : jsr166 1.16 assertEquals(2,ai.incrementAndGet());
186 :     assertEquals(2,ai.get());
187 :     ai.set(-2);
188 :     assertEquals(-1,ai.incrementAndGet());
189 :     assertEquals(0,ai.incrementAndGet());
190 :     assertEquals(1,ai.incrementAndGet());
191 :     assertEquals(1,ai.get());
192 : dl 1.1 }
193 :    
194 : dl 1.4 /**
195 : dl 1.5 * a deserialized serialized atomic holds same value
196 : dl 1.4 */
197 : jsr166 1.14 public void testSerialization() throws Exception {
198 : dl 1.2 AtomicLong l = new AtomicLong();
199 :    
200 : jsr166 1.14 l.set(-22);
201 :     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
202 :     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
203 :     out.writeObject(l);
204 :     out.close();
205 :    
206 :     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
207 :     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
208 :     AtomicLong r = (AtomicLong) in.readObject();
209 :     assertEquals(l.get(), r.get());
210 : dl 1.2 }
211 : dl 1.1
212 : dl 1.8 /**
213 :     * toString returns current value.
214 : jsr166 1.11 */
215 : dl 1.8 public void testToString() {
216 :     AtomicLong ai = new AtomicLong();
217 : jsr166 1.17 assertEquals("0", ai.toString());
218 :     for (long i : VALUES) {
219 : dl 1.8 ai.set(i);
220 :     assertEquals(ai.toString(), Long.toString(i));
221 :     }
222 :     }
223 : dl 1.9
224 :     /**
225 : jsr166 1.17 * intValue returns current value.
226 :     */
227 :     public void testIntValue() {
228 :     AtomicLong ai = new AtomicLong();
229 :     assertEquals(0, ai.intValue());
230 :     for (long x : VALUES) {
231 :     ai.set(x);
232 :     assertEquals((int)x, ai.intValue());
233 :     }
234 :     }
235 :    
236 :     /**
237 : dl 1.9 * longValue returns current value.
238 : jsr166 1.11 */
239 : dl 1.9 public void testLongValue() {
240 :     AtomicLong ai = new AtomicLong();
241 : jsr166 1.17 assertEquals(0L, ai.longValue());
242 :     for (long x : VALUES) {
243 :     ai.set(x);
244 : jsr166 1.21 assertEquals(x, ai.longValue());
245 : dl 1.9 }
246 :     }
247 :    
248 :     /**
249 :     * floatValue returns current value.
250 : jsr166 1.11 */
251 : dl 1.9 public void testFloatValue() {
252 :     AtomicLong ai = new AtomicLong();
253 : jsr166 1.17 assertEquals(0.0f, ai.floatValue());
254 :     for (long x : VALUES) {
255 :     ai.set(x);
256 :     assertEquals((float)x, ai.floatValue());
257 : dl 1.9 }
258 :     }
259 :    
260 :     /**
261 :     * doubleValue returns current value.
262 : jsr166 1.11 */
263 : dl 1.9 public void testDoubleValue() {
264 :     AtomicLong ai = new AtomicLong();
265 : jsr166 1.17 assertEquals(0.0d, ai.doubleValue());
266 :     for (long x : VALUES) {
267 :     ai.set(x);
268 :     assertEquals((double)x, ai.doubleValue());
269 : dl 1.9 }
270 :     }
271 :    
272 : dl 1.1 }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8