2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
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
10 * http://www.apache.org/licenses/LICENSE-2.0.
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.
18 package gov.nasa.jpf.test.mc.threads;
20 import gov.nasa.jpf.util.test.TestJPF;
21 import gov.nasa.jpf.vm.Verify;
23 import org.junit.Test;
26 public class AtomicTest extends TestJPF {
30 @Test public void testNoRace () {
31 if (verifyNoPropertyViolation("+cg.enable_atomic")) {
32 Runnable r = new Runnable() {
36 System.out.println(" enter run in Thread-0");
42 System.out.println(" exit run in Thread-0");
46 Thread t = new Thread(r);
49 System.out.println("enter atomic section in main");
56 System.out.println("exit atomic section in main");
62 public void testDataCG () {
63 if (verifyNoPropertyViolation("+cg.enable_atomic")) {
64 Runnable r = new Runnable() {
72 Thread t = new Thread(r);
76 int i = Verify.getInt(1, 2);
78 assert data < 45 : "data got incremented: " + data;
79 Verify.incrementCounter(0);
80 assert i == Verify.getCounter(0);
85 @Test public void testBlockedInAtomic () {
86 if (verifyDeadlock("+cg.enable_atomic")){
87 Runnable r = new Runnable() {
90 public synchronized void run() {
91 System.out.println("T notifying..");
96 Thread t = new Thread(r);
99 System.out.println("main going atomic, holding r lock");
100 Verify.beginAtomic();
104 System.out.println("main waiting on r");
106 } catch (InterruptedException x){
107 System.out.println("main got interrupted");
109 System.out.println("main leaving atomic");