ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicLongTest.java
Revision: 1.8
Committed: Fri Jan 9 20:07:36 2004 UTC (20 years, 4 months ago) by dl
Branch: MAIN
Changes since 1.7: +10 -0 lines
Log Message:
Tests for toString methods

File Contents

# User Rev Content
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     * http://creativecommons.org/licenses/publicdomain
5     * 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 dl 1.1 public static void main (String[] args) {
15     junit.textui.TestRunner.run (suite());
16     }
17     public static Test suite() {
18     return new TestSuite(AtomicLongTest.class);
19     }
20    
21 dl 1.4 /**
22 dl 1.5 * constructor initializes to given value
23 dl 1.4 */
24 dl 1.1 public void testConstructor(){
25     AtomicLong ai = new AtomicLong(1);
26     assertEquals(1,ai.get());
27     }
28    
29 dl 1.4 /**
30 dl 1.7 * default constructed initializes to zero
31 dl 1.4 */
32 dl 1.1 public void testConstructor2(){
33     AtomicLong ai = new AtomicLong();
34     assertEquals(0,ai.get());
35     }
36    
37 dl 1.4 /**
38 dl 1.5 * get returns the last value set
39 dl 1.4 */
40 dl 1.1 public void testGetSet(){
41     AtomicLong ai = new AtomicLong(1);
42     assertEquals(1,ai.get());
43     ai.set(2);
44     assertEquals(2,ai.get());
45     ai.set(-3);
46     assertEquals(-3,ai.get());
47    
48     }
49 dl 1.4 /**
50 dl 1.5 * compareAndSet succeeds in changing value if equal to expected else fails
51 dl 1.4 */
52 dl 1.1 public void testCompareAndSet(){
53     AtomicLong ai = new AtomicLong(1);
54     assertTrue(ai.compareAndSet(1,2));
55     assertTrue(ai.compareAndSet(2,-4));
56     assertEquals(-4,ai.get());
57     assertFalse(ai.compareAndSet(-5,7));
58     assertFalse((7 == ai.get()));
59     assertTrue(ai.compareAndSet(-4,7));
60     assertEquals(7,ai.get());
61     }
62    
63 dl 1.4 /**
64 dl 1.5 * compareAndSet in one thread enables another waiting for value
65     * to succeed
66     */
67     public void testCompareAndSetInMultipleThreads() {
68     final AtomicLong ai = new AtomicLong(1);
69     Thread t = new Thread(new Runnable() {
70     public void run() {
71     while(!ai.compareAndSet(2, 3)) Thread.yield();
72     }});
73     try {
74     t.start();
75     assertTrue(ai.compareAndSet(1, 2));
76     t.join(LONG_DELAY_MS);
77     assertFalse(t.isAlive());
78     assertEquals(ai.get(), 3);
79     }
80     catch(Exception e) {
81     unexpectedException();
82     }
83     }
84    
85     /**
86     * repeated weakCompareAndSet succeeds in changing value when equal
87     * to expected
88 dl 1.4 */
89 dl 1.1 public void testWeakCompareAndSet(){
90     AtomicLong ai = new AtomicLong(1);
91     while(!ai.weakCompareAndSet(1,2));
92     while(!ai.weakCompareAndSet(2,-4));
93     assertEquals(-4,ai.get());
94     while(!ai.weakCompareAndSet(-4,7));
95     assertEquals(7,ai.get());
96     }
97    
98 dl 1.4 /**
99 dl 1.5 * getAndSet returns previous value and sets to given value
100 dl 1.4 */
101 dl 1.1 public void testGetAndSet(){
102     AtomicLong ai = new AtomicLong(1);
103     assertEquals(1,ai.getAndSet(0));
104     assertEquals(0,ai.getAndSet(-10));
105     assertEquals(-10,ai.getAndSet(1));
106     }
107    
108 dl 1.4 /**
109 dl 1.5 * getAndAdd returns previous value and adds given value
110 dl 1.4 */
111 dl 1.1 public void testGetAndAdd(){
112     AtomicLong ai = new AtomicLong(1);
113     assertEquals(1,ai.getAndAdd(2));
114     assertEquals(3,ai.get());
115     assertEquals(3,ai.getAndAdd(-4));
116     assertEquals(-1,ai.get());
117     }
118    
119 dl 1.4 /**
120 dl 1.5 * getAndDecrement returns previous value and decrements
121 dl 1.4 */
122 dl 1.1 public void testGetAndDecrement(){
123     AtomicLong ai = new AtomicLong(1);
124     assertEquals(1,ai.getAndDecrement());
125     assertEquals(0,ai.getAndDecrement());
126     assertEquals(-1,ai.getAndDecrement());
127     }
128    
129 dl 1.4 /**
130 dl 1.5 * getAndIncrement returns previous value and increments
131 dl 1.4 */
132 dl 1.1 public void testGetAndIncrement(){
133     AtomicLong ai = new AtomicLong(1);
134     assertEquals(1,ai.getAndIncrement());
135     assertEquals(2,ai.get());
136     ai.set(-2);
137     assertEquals(-2,ai.getAndIncrement());
138     assertEquals(-1,ai.getAndIncrement());
139     assertEquals(0,ai.getAndIncrement());
140     assertEquals(1,ai.get());
141     }
142    
143 dl 1.4 /**
144 dl 1.5 * addAndGet adds given value to current, and returns current value
145 dl 1.4 */
146 dl 1.1 public void testAddAndGet(){
147     AtomicLong ai = new AtomicLong(1);
148     assertEquals(3,ai.addAndGet(2));
149     assertEquals(3,ai.get());
150     assertEquals(-1,ai.addAndGet(-4));
151     assertEquals(-1,ai.get());
152     }
153    
154 dl 1.4 /**
155 dl 1.5 * decrementAndGet decrements and returns current value
156 dl 1.4 */
157 dl 1.1 public void testDecrementAndGet(){
158     AtomicLong ai = new AtomicLong(1);
159     assertEquals(0,ai.decrementAndGet());
160     assertEquals(-1,ai.decrementAndGet());
161     assertEquals(-2,ai.decrementAndGet());
162     assertEquals(-2,ai.get());
163     }
164    
165 dl 1.4 /**
166 dl 1.5 * incrementAndGet increments and returns current value
167 dl 1.4 */
168 dl 1.1 public void testIncrementAndGet(){
169     AtomicLong ai = new AtomicLong(1);
170     assertEquals(2,ai.incrementAndGet());
171     assertEquals(2,ai.get());
172     ai.set(-2);
173     assertEquals(-1,ai.incrementAndGet());
174     assertEquals(0,ai.incrementAndGet());
175     assertEquals(1,ai.incrementAndGet());
176     assertEquals(1,ai.get());
177     }
178    
179 dl 1.4 /**
180 dl 1.5 * a deserialized serialized atomic holds same value
181 dl 1.4 */
182 dl 1.2 public void testSerialization() {
183     AtomicLong l = new AtomicLong();
184    
185     try {
186     l.set(-22);
187     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
188     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
189     out.writeObject(l);
190     out.close();
191    
192     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
193     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
194     AtomicLong r = (AtomicLong) in.readObject();
195     assertEquals(l.get(), r.get());
196     } catch(Exception e){
197 dl 1.4 unexpectedException();
198 dl 1.2 }
199     }
200 dl 1.1
201 dl 1.8 /**
202     * toString returns current value.
203     */
204     public void testToString() {
205     AtomicLong ai = new AtomicLong();
206     for (long i = -12; i < 6; ++i) {
207     ai.set(i);
208     assertEquals(ai.toString(), Long.toString(i));
209     }
210     }
211 dl 1.1 }