package org.multiverse.collections; import org.junit.Before; import org.junit.Test; import org.multiverse.api.Stm; import org.multiverse.api.StmUtils; import org.multiverse.api.Txn; import org.multiverse.api.callables.TxnVoidCallable; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import static org.multiverse.api.GlobalStmInstance.getGlobalStmInstance; import static org.multiverse.api.TxnThreadLocal.clearThreadLocalTxn; public class NaiveTxnLinkedList_set2Test { private Stm stm; private NaiveTxnLinkedList<String> list; @Before public void setUp() { stm = getGlobalStmInstance(); clearThreadLocalTxn(); list = new NaiveTxnLinkedList<String>(stm); } @Test public void whenIndexTooSmall() { StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { try { list.set(-1, "foo"); fail(); } catch (IndexOutOfBoundsException expected) { } assertEquals(0, list.size()); assertEquals("[]", list.toString()); } }); } @Test public void whenIndexTooBig() { StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { list.add("1"); list.add("2"); try { list.set(2, "foo"); fail(); } catch (IndexOutOfBoundsException expected) { } assertEquals(2, list.size()); assertEquals("[1, 2]", list.toString()); } }); } @Test public void whenSuccess() { StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { list.add("1"); list.add("2"); list.add("3"); list.add("4"); assertEquals("1", list.set(0, "a")); assertEquals("2", list.set(1, "b")); assertEquals("3", list.set(2, "c")); assertEquals("4", list.set(3, "d")); assertEquals(4, list.size()); assertEquals("[a, b, c, d]", list.toString()); } }); } }