package org.multiverse.stms.gamma.transactionalobjects.refs;
import org.junit.Before;
import org.junit.Test;
import org.multiverse.stms.gamma.*;
import org.multiverse.stms.gamma.transactionalobjects.*;
import org.multiverse.stms.gamma.transactions.GammaTxn;
import static org.junit.Assert.*;
import static org.multiverse.stms.gamma.GammaStmUtils.doubleAsLong;
import static org.multiverse.stms.gamma.GammaTestUtils.assertRefHasNoLocks;
import static org.multiverse.stms.gamma.GammaTestUtils.assertVersionAndValue;
public class CommitTest implements GammaConstants {
private GammaStm stm;
private GammaObjectPool pool;
@Before
public void setUp() {
stm = new GammaStm();
pool = new GammaObjectPool();
}
@Test
public void intRef_whenDirty() {
int initialValue = 10;
GammaTxnInteger ref = new GammaTxnInteger(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
int newValue = 20;
tranlocal.long_value = newValue;
tranlocal.setDirty(true);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void intRef_whenNotDirty() {
int initialValue = 10;
GammaTxnInteger ref = new GammaTxnInteger(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void intRef_whenDirtyAndListener() {
int initialValue = 10;
GammaTxnInteger ref = new GammaTxnInteger(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
int newValue = 20;
tranlocal.long_value = newValue;
tranlocal.setDirty(true);
Listeners result = ref.commit(tranlocal, pool);
assertSame(result, listeners);
assertNull(ref.listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void intRef_whenNotDirtyAndListener() {
int initialValue = 10;
GammaTxnInteger ref = new GammaTxnInteger(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners result = ref.commit(tranlocal, pool);
assertNull(result);
assertSame(listeners, ref.listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void booleanRef_whenDirty() {
boolean initialValue = true;
GammaTxnBoolean ref = new GammaTxnBoolean(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
boolean newValue = false;
tranlocal.long_value = GammaStmUtils.booleanAsLong(newValue);
tranlocal.setDirty(true);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion + 1, false);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void booleanRef_whenNotDirty() {
boolean initialValue = false;
GammaTxnBoolean ref = new GammaTxnBoolean(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void booleanRef_whenDirtyAndListener() {
boolean initialValue = true;
GammaTxnBoolean ref = new GammaTxnBoolean(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
boolean newValue = false;
tranlocal.long_value = GammaStmUtils.booleanAsLong(newValue);
tranlocal.setDirty(true);
Listeners result = ref.commit(tranlocal, pool);
assertSame(result, listeners);
assertNull(ref.listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void booleanRef_whenNotDirtyAndListener() {
boolean initialValue = true;
GammaTxnBoolean ref = new GammaTxnBoolean(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners result = ref.commit(tranlocal, pool);
assertNull(result);
assertSame(listeners, ref.listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void TxnDouble_whenDirty() {
double initialValue = 10;
GammaTxnDouble ref = new GammaTxnDouble(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
double newValue = 20;
tranlocal.long_value = doubleAsLong(newValue);
tranlocal.setDirty(true);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void TxnDouble_whenNotDirty() {
double initialValue = 10;
GammaTxnDouble ref = new GammaTxnDouble(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void TxnDouble_whenDirtyAndListener() {
double initialValue = 10;
GammaTxnDouble ref = new GammaTxnDouble(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
double newValue = 20;
tranlocal.long_value = doubleAsLong(newValue);
tranlocal.setDirty(true);
Listeners result = ref.commit(tranlocal, pool);
assertSame(result, listeners);
assertNull(ref.listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void TxnDouble_whenNotDirtyAndListener() {
double initialValue = 10;
GammaTxnDouble ref = new GammaTxnDouble(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners result = ref.commit(tranlocal, pool);
assertNull(result);
assertSame(listeners, ref.listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void longRef_whenDirty() {
long initialValue = 10;
GammaTxnLong ref = new GammaTxnLong(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
long newValue = 20;
tranlocal.long_value = newValue;
tranlocal.setDirty(true);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void longRef_whenNotDirty() {
long initialValue = 10;
GammaTxnLong ref = new GammaTxnLong(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void longRef_whenDirtyAndListener() {
long initialValue = 10;
GammaTxnLong ref = new GammaTxnLong(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
long newValue = 20;
tranlocal.long_value = newValue;
tranlocal.setDirty(true);
Listeners result = ref.commit(tranlocal, pool);
assertSame(result, listeners);
assertNull(ref.listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void longRef_whenNotDirtyAndListener() {
int initialValue = 10;
GammaTxnLong ref = new GammaTxnLong(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners result = ref.commit(tranlocal, pool);
assertNull(result);
assertSame(listeners, ref.listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
}
@Test
public void ref_whenDirty() {
String initialValue = "foo";
GammaTxnRef<String> ref = new GammaTxnRef<String>(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
String newValue = "bar";
tranlocal.ref_value = newValue;
tranlocal.setDirty(true);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
assertNull(tranlocal.ref_value);
assertNull(tranlocal.ref_oldValue);
}
@Test
public void ref_whenNotDirty() {
String initialValue = "foo";
GammaTxnRef<String> ref = new GammaTxnRef<String>(stm, initialValue);
long initialVersion = ref.version;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners listeners = ref.commit(tranlocal, pool);
assertNull(listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
assertNull(tranlocal.ref_value);
assertNull(tranlocal.ref_oldValue);
}
@Test
public void ref_whenDirtyAndListener() {
String initialValue = "foo";
GammaTxnRef<String> ref = new GammaTxnRef<String>(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
String newValue = "bar";
tranlocal.ref_value = newValue;
tranlocal.setDirty(true);
Listeners result = ref.commit(tranlocal, pool);
assertSame(result, listeners);
assertNull(ref.listeners);
assertVersionAndValue(ref, initialVersion + 1, newValue);
assertRefHasNoLocks(ref);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
assertNull(tranlocal.ref_value);
assertNull(tranlocal.ref_oldValue);
}
@Test
public void ref_whenNotDirtyAndListener() {
String initialValue = "foo";
GammaTxnRef<String> ref = new GammaTxnRef<String>(stm, initialValue);
long initialVersion = ref.version;
Listeners listeners = new Listeners();
ref.listeners = listeners;
Tranlocal tranlocal = new Tranlocal();
GammaTxn tx = stm.newDefaultTxn();
ref.load(tx,tranlocal, LOCKMODE_EXCLUSIVE, 1, false);
tranlocal.setDirty(false);
Listeners result = ref.commit(tranlocal, pool);
assertNull(result);
assertSame(listeners, ref.listeners);
assertVersionAndValue(ref, initialVersion, initialValue);
assertNull(tranlocal.owner);
assertEquals(LOCKMODE_NONE, tranlocal.getLockMode());
assertNull(tranlocal.ref_value);
assertNull(tranlocal.ref_oldValue);
}
}