Fixing a few bugs in the statistics printout.
[jpf-core.git] / src / tests / gov / nasa / jpf / test / java / concurrent / AtomicReferenceFieldUpdaterTest.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18 package gov.nasa.jpf.test.java.concurrent;
19
20 import gov.nasa.jpf.util.test.TestJPF;
21
22 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
23
24 import org.junit.Test;
25
26 /**
27  * raw test for java.util.concurrent.atomic.AtomicReferenceFieldUpdater
28  */
29 public class AtomicReferenceFieldUpdaterTest extends TestJPF {
30
31   static final String[] JPF_ARGS = {"+cg.enumreate_cas=true"};
32
33   //--- the test methods
34   String str;
35   byte[] buf;
36
37   @Test
38   public void testStringField() {
39     if (verifyNoPropertyViolation(JPF_ARGS)) {
40       AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest, String> upd =
41               AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, String.class, "str");
42
43       String s1 = "one";
44       String s2 = "two";
45       str = s1;
46
47       System.out.println(str);
48       assert upd.compareAndSet(this, s1, s2);
49       System.out.println(str);
50       assert str == s2;
51
52       assert !upd.compareAndSet(this, s1, "nogo");
53       assert str == s2;
54       assert str == upd.get(this);
55
56       assert s2 == upd.getAndSet(this, s1);
57       assert str == s1;
58
59       upd.set(this, s2);
60       assert str == s2;
61
62       upd.lazySet(this, s1);
63       assert str == s1;
64
65       assert upd.weakCompareAndSet(this, s1, s2);
66       assert str == s2;
67
68       assert !upd.weakCompareAndSet(this, s1, "nogo");
69       assert str == s2;
70     }
71   }
72
73   @Test
74   public void testByteArrayField() {
75     if (verifyNoPropertyViolation(JPF_ARGS)) {
76       AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest, byte[]> upd =
77               AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, byte[].class, "buf");
78
79       byte[] b1 = new byte[10];
80       byte[] b2 = new byte[5];
81
82       buf = b1;
83       System.out.println(buf);
84       assert upd.compareAndSet(this, b1, b2);
85       System.out.println(buf);
86       assert (buf == b2);
87
88       assert !upd.compareAndSet(this, b1, new byte[3]);
89       assert (buf == b2);
90     }
91   }
92 }