package org.multiverse.stms.gamma.transactions.fat; import org.junit.Test; import org.multiverse.stms.gamma.transactionalobjects.GammaTxnLong; import org.multiverse.stms.gamma.transactionalobjects.Tranlocal; import org.multiverse.stms.gamma.transactions.GammaTxnConfig; import static org.junit.Assert.assertNull; import static org.multiverse.stms.gamma.GammaTestUtils.assertSurplus; public class FatFixedLengthGammaTxn_commitTest extends FatGammaTxn_commitTest<FatFixedLengthGammaTxn> { @Override protected void assertCleaned(FatFixedLengthGammaTxn tx) { Tranlocal node = tx.head; while (node != null) { assertNull(node.owner); node = node.next; } } @Override protected FatFixedLengthGammaTxn newTransaction(GammaTxnConfig config) { return new FatFixedLengthGammaTxn(config); } @Override protected FatFixedLengthGammaTxn newTransaction() { return new FatFixedLengthGammaTxn(stm); } @Test public void richmansConflict_multipleReadsOnSameRef() { GammaTxnLong ref = new GammaTxnLong(stm); GammaTxnConfig config = new GammaTxnConfig(stm) .setMaximumPoorMansConflictScanLength(0); FatVariableLengthGammaTxn tx1 = new FatVariableLengthGammaTxn(config); FatVariableLengthGammaTxn tx2 = new FatVariableLengthGammaTxn(config); FatVariableLengthGammaTxn tx3 = new FatVariableLengthGammaTxn(config); FatFixedLengthGammaTxn tx = new FatFixedLengthGammaTxn(config); ref.openForRead(tx1, LOCKMODE_NONE); ref.openForRead(tx2, LOCKMODE_NONE); ref.openForRead(tx3, LOCKMODE_NONE); ref.set(tx, 1); tx.commit(); assertSurplus(ref, 3); } }