[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.6 - (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 :     * 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.5 * default constructed intializes 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 :     }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8