package org.multiverse.stms.gamma.benchmarks; import org.benchy.BenchyUtils; import org.junit.Before; import org.junit.Test; import org.multiverse.stms.gamma.GammaConstants; import org.multiverse.stms.gamma.GammaStm; import org.multiverse.stms.gamma.transactionalobjects.GammaTxnLong; import org.multiverse.stms.gamma.transactions.GammaTxnConfig; import org.multiverse.stms.gamma.transactions.fat.FatFixedLengthGammaTxn; public class ArrayUpdateDriver implements GammaConstants { private GammaStm stm; private int refCount = 1; @Before public void setUp() { stm = new GammaStm(); } @Test public void test() { final long txCount = 1000 * 1000 * 1000; FatFixedLengthGammaTxn tx = new FatFixedLengthGammaTxn(new GammaTxnConfig(stm)); GammaTxnLong[] refs = new GammaTxnLong[refCount]; for (int k = 0; k < refs.length; k++) { refs[k] = new GammaTxnLong(stm, 0); } long startMs = System.currentTimeMillis(); for (long k = 0; k < txCount; k++) { for (int l = 0; l < refs.length; l++) { refs[l].openForWrite(tx, LOCKMODE_NONE).long_value++; } tx.commit(); tx.hardReset(); } long durationMs = System.currentTimeMillis() - startMs; String s = BenchyUtils.operationsPerSecondPerThreadAsString(txCount, durationMs, 1); System.out.printf("Performance is %s transactions/second/thread\n", s); //assertEquals(txCount, ref.volatile_value); //assertEquals(txCount+initialVersion, ref.version); } }