ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AtomicMarkableReferenceTest.java
Revision: 1.2
Committed: Sun Sep 14 20:42:40 2003 UTC (20 years, 8 months ago) by dl
Branch: MAIN
Changes since 1.1: +1 -1 lines
Log Message:
New base class JSR166TestCase

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    
11 dl 1.2 public class AtomicMarkableReferenceTest extends JSR166TestCase{
12 dl 1.1 public static void main (String[] args) {
13     junit.textui.TestRunner.run (suite());
14     }
15     public static Test suite() {
16     return new TestSuite(AtomicMarkableReferenceTest.class);
17     }
18    
19     static final Integer zero = new Integer(0);
20     static final Integer one = new Integer(1);
21     static final Integer two = new Integer(2);
22     static final Integer m3 = new Integer(-3);
23    
24     public void testConstructor(){
25     AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
26     assertEquals(one,ai.getReference());
27     assertFalse(ai.isMarked());
28     AtomicMarkableReference a2 = new AtomicMarkableReference(null, true);
29     assertNull(a2.getReference());
30     assertTrue(a2.isMarked());
31    
32     }
33    
34     public void testGetSet(){
35     boolean[] mark = new boolean[1];
36     AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
37     assertEquals(one,ai.getReference());
38     assertFalse(ai.isMarked());
39     assertEquals(one, ai.get(mark));
40     assertFalse(mark[0]);
41     ai.set(two, false);
42     assertEquals(two,ai.getReference());
43     assertFalse(ai.isMarked());
44     assertEquals(two, ai.get(mark));
45     assertFalse(mark[0]);
46     ai.set(one, true);
47     assertEquals(one,ai.getReference());
48     assertTrue(ai.isMarked());
49     assertEquals(one, ai.get(mark));
50     assertTrue(mark[0]);
51     }
52    
53     public void testAttemptMark(){
54     boolean[] mark = new boolean[1];
55     AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
56     assertFalse(ai.isMarked());
57     assertTrue(ai.attemptMark(one, true));
58     assertTrue(ai.isMarked());
59     assertEquals(one, ai.get(mark));
60     assertTrue(mark[0]);
61     }
62    
63     public void testCompareAndSet(){
64     boolean[] mark = new boolean[1];
65     AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
66     assertEquals(one, ai.get(mark));
67     assertFalse(ai.isMarked());
68     assertFalse(mark[0]);
69    
70     assertTrue(ai.compareAndSet(one, two, false, false));
71     assertEquals(two, ai.get(mark));
72     assertFalse(mark[0]);
73    
74     assertTrue(ai.compareAndSet(two, m3, false, true));
75     assertEquals(m3, ai.get(mark));
76     assertTrue(mark[0]);
77    
78     assertFalse(ai.compareAndSet(two, m3, true, true));
79     assertEquals(m3, ai.get(mark));
80     assertTrue(mark[0]);
81     }
82    
83     public void testWeakCompareAndSet(){
84     boolean[] mark = new boolean[1];
85     AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
86     assertEquals(one, ai.get(mark));
87     assertFalse(ai.isMarked());
88     assertFalse(mark[0]);
89    
90     while(!ai.weakCompareAndSet(one, two, false, false));
91     assertEquals(two, ai.get(mark));
92     assertFalse(mark[0]);
93    
94     while(!ai.weakCompareAndSet(two, m3, false, true));
95     assertEquals(m3, ai.get(mark));
96     assertTrue(mark[0]);
97     }
98    
99     }