ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicIntegerArrayTest.java
Revision: 1.2
Committed: Sun Sep 7 20:39:11 2003 UTC (20 years, 8 months ago) by dl
Branch: MAIN
Changes since 1.1: +24 -0 lines
Log Message:
Added serialization and lock tests

File Contents

# User Rev Content
1 dl 1.1 /*
2     * Written by members of JCP JSR-166 Expert Group and released to the
3     * public domain. Use, modify, and redistribute this code in any way
4     * without acknowledgement. Other contributors include Andrew Wright,
5     * Jeffrey Hayes, Pat Fischer, Mike Judd.
6     */
7    
8     import junit.framework.*;
9     import java.util.concurrent.atomic.*;
10 dl 1.2 import java.io.*;
11 dl 1.1
12     public class AtomicIntegerArrayTest extends TestCase
13     {
14     static final int N = 10;
15    
16     public static void main (String[] args) {
17     junit.textui.TestRunner.run (suite());
18     }
19     public static Test suite() {
20     return new TestSuite(AtomicIntegerArrayTest.class);
21     }
22    
23     public void testConstructor(){
24     AtomicIntegerArray ai = new AtomicIntegerArray(N);
25     for (int i = 0; i < N; ++i)
26     assertEquals(0,ai.get(i));
27     }
28    
29     public void testGetSet(){
30     AtomicIntegerArray ai = new AtomicIntegerArray(N);
31     for (int i = 0; i < N; ++i) {
32     ai.set(i, 1);
33     assertEquals(1,ai.get(i));
34     ai.set(i, 2);
35     assertEquals(2,ai.get(i));
36     ai.set(i, -3);
37     assertEquals(-3,ai.get(i));
38     }
39     }
40    
41     public void testCompareAndSet(){
42     AtomicIntegerArray ai = new AtomicIntegerArray(N);
43     for (int i = 0; i < N; ++i) {
44     ai.set(i, 1);
45     assertTrue(ai.compareAndSet(i, 1,2));
46     assertTrue(ai.compareAndSet(i, 2,-4));
47     assertEquals(-4,ai.get(i));
48     assertFalse(ai.compareAndSet(i, -5,7));
49     assertFalse((7 == ai.get(i)));
50     assertTrue(ai.compareAndSet(i, -4,7));
51     assertEquals(7,ai.get(i));
52     }
53     }
54    
55     public void testWeakCompareAndSet(){
56     AtomicIntegerArray ai = new AtomicIntegerArray(N);
57     for (int i = 0; i < N; ++i) {
58     ai.set(i, 1);
59     while(!ai.weakCompareAndSet(i, 1,2));
60     while(!ai.weakCompareAndSet(i, 2,-4));
61     assertEquals(-4,ai.get(i));
62     while(!ai.weakCompareAndSet(i, -4,7));
63     assertEquals(7,ai.get(i));
64     }
65     }
66    
67     public void testGetAndSet(){
68     AtomicIntegerArray ai = new AtomicIntegerArray(N);
69     for (int i = 0; i < N; ++i) {
70     ai.set(i, 1);
71     assertEquals(1,ai.getAndSet(i,0));
72     assertEquals(0,ai.getAndSet(i,-10));
73     assertEquals(-10,ai.getAndSet(i,1));
74     }
75     }
76    
77     public void testGetAndAdd(){
78     AtomicIntegerArray ai = new AtomicIntegerArray(N);
79     for (int i = 0; i < N; ++i) {
80     ai.set(i, 1);
81     assertEquals(1,ai.getAndAdd(i,2));
82     assertEquals(3,ai.get(i));
83     assertEquals(3,ai.getAndAdd(i,-4));
84     assertEquals(-1,ai.get(i));
85     }
86     }
87    
88     public void testGetAndDecrement(){
89     AtomicIntegerArray ai = new AtomicIntegerArray(N);
90     for (int i = 0; i < N; ++i) {
91     ai.set(i, 1);
92     assertEquals(1,ai.getAndDecrement(i));
93     assertEquals(0,ai.getAndDecrement(i));
94     assertEquals(-1,ai.getAndDecrement(i));
95     }
96     }
97    
98     public void testGetAndIncrement(){
99     AtomicIntegerArray ai = new AtomicIntegerArray(N);
100     for (int i = 0; i < N; ++i) {
101     ai.set(i, 1);
102     assertEquals(1,ai.getAndIncrement(i));
103     assertEquals(2,ai.get(i));
104     ai.set(i,-2);
105     assertEquals(-2,ai.getAndIncrement(i));
106     assertEquals(-1,ai.getAndIncrement(i));
107     assertEquals(0,ai.getAndIncrement(i));
108     assertEquals(1,ai.get(i));
109     }
110     }
111    
112     public void testAddAndGet() {
113     AtomicIntegerArray ai = new AtomicIntegerArray(N);
114     for (int i = 0; i < N; ++i) {
115     ai.set(i, 1);
116     assertEquals(3,ai.addAndGet(i,2));
117     assertEquals(3,ai.get(i));
118     assertEquals(-1,ai.addAndGet(i,-4));
119     assertEquals(-1,ai.get(i));
120     }
121     }
122    
123     public void testDecrementAndGet(){
124     AtomicIntegerArray ai = new AtomicIntegerArray(N);
125     for (int i = 0; i < N; ++i) {
126     ai.set(i, 1);
127     assertEquals(0,ai.decrementAndGet(i));
128     assertEquals(-1,ai.decrementAndGet(i));
129     assertEquals(-2,ai.decrementAndGet(i));
130     assertEquals(-2,ai.get(i));
131     }
132     }
133    
134     public void testIncrementAndGet() {
135     AtomicIntegerArray ai = new AtomicIntegerArray(N);
136     for (int i = 0; i < N; ++i) {
137     ai.set(i, 1);
138     assertEquals(2,ai.incrementAndGet(i));
139     assertEquals(2,ai.get(i));
140     ai.set(i, -2);
141     assertEquals(-1,ai.incrementAndGet(i));
142     assertEquals(0,ai.incrementAndGet(i));
143     assertEquals(1,ai.incrementAndGet(i));
144     assertEquals(1,ai.get(i));
145 dl 1.2 }
146     }
147    
148     public void testSerialization() {
149     AtomicIntegerArray l = new AtomicIntegerArray(N);
150     for (int i = 0; i < N; ++i)
151     l.set(i, -i);
152    
153     try {
154     ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
155     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
156     out.writeObject(l);
157     out.close();
158    
159     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
160     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
161     AtomicIntegerArray r = (AtomicIntegerArray) in.readObject();
162     for (int i = 0; i < N; ++i) {
163     assertEquals(l.get(i), r.get(i));
164     }
165     } catch(Exception e){
166     e.printStackTrace();
167     fail("unexpected exception");
168 dl 1.1 }
169     }
170    
171     }