//
// Copyright (C) 2007 United States Government as represented by the
// Administrator of the National Aeronautics and Space Administration
// (NASA). All Rights Reserved.
//
// This software is distributed under the NASA Open Source Agreement
// (NOSA), version 1.3. The NOSA has been approved by the Open Source
// Initiative. See the file NOSA-1.3-JPF at the top of the distribution
// directory tree for the complete NOSA document.
//
// THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
// KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
// LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
// SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
// A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
// THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
// DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
//
package gov.nasa.jpf.test.java.concurrent;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
import org.junit.Test;
import gov.nasa.jpf.util.test.TestJPF;
/**
* raw test for java.util.concurrent.atomic.AtomicReferenceFieldUpdater
*/
public class AtomicReferenceFieldUpdaterTest extends TestJPF {
static final String[] JPF_ARGS = {"+cg.enumreate_cas=true"};
//--- the test methods
String str;
byte[] buf;
@Test
public void testStringField() {
if (verifyNoPropertyViolation(JPF_ARGS)) {
AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest, String> upd =
AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, String.class, "str");
String s1 = "one";
String s2 = "two";
str = s1;
System.out.println(str);
assert upd.compareAndSet(this, s1, s2);
System.out.println(str);
assert str == s2;
assert !upd.compareAndSet(this, s1, "nogo");
assert str == s2;
assert str == upd.get(this);
assert s2 == upd.getAndSet(this, s1);
assert str == s1;
upd.set(this, s2);
assert str == s2;
upd.lazySet(this, s1);
assert str == s1;
assert upd.weakCompareAndSet(this, s1, s2);
assert str == s2;
assert !upd.weakCompareAndSet(this, s1, "nogo");
assert str == s2;
}
}
@Test
public void testByteArrayField() {
if (verifyNoPropertyViolation(JPF_ARGS)) {
AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest, byte[]> upd =
AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdaterTest.class, byte[].class, "buf");
byte[] b1 = new byte[10];
byte[] b2 = new byte[5];
buf = b1;
System.out.println(buf);
assert upd.compareAndSet(this, b1, b2);
System.out.println(buf);
assert (buf == b2);
assert !upd.compareAndSet(this, b1, new byte[3]);
assert (buf == b2);
}
}
}