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

# Content
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 import java.io.*;
11
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 }
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 }
169 }
170
171 }