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 java.util.Arrays; import java.util.LinkedList; import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; import static org.multiverse.api.GlobalStmInstance.getGlobalStmInstance; import static org.multiverse.api.TxnThreadLocal.clearThreadLocalTxn; public class NaiveTxnStack_containsAllTest { private Stm stm; @Before public void setUp() { stm = getGlobalStmInstance(); clearThreadLocalTxn(); } @Test public void whenNullCollection_thenNullPointerException() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { try { stack.containsAll(null); fail(); } catch (NullPointerException expected) { } assertEquals("[]", stack.toString()); assertEquals(0, stack.size()); } }); } @Test public void whenBothEmpty() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { boolean result = stack.containsAll(new LinkedList()); assertTrue(result); assertEquals("[]", stack.toString()); assertEquals(0, stack.size()); } }); } @Test public void whenStackEmpty_andCollectionNonEmpty() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { boolean result = stack.containsAll(Arrays.asList("1", "2")); assertFalse(result); assertEquals("[]", stack.toString()); assertEquals(0, stack.size()); } }); } @Test public void whenStackNonEmpty_andCollectionEmpty() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { stack.push("1"); stack.push("2"); boolean result = stack.containsAll(new LinkedList<String>()); assertTrue(result); assertEquals("[2, 1]", stack.toString()); assertEquals(2, stack.size()); } }); } @Test public void whenExactMatch() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { stack.add("1"); stack.add("2"); boolean result = stack.containsAll(Arrays.asList("1", "2")); assertTrue(result); assertEquals("[2, 1]", stack.toString()); assertEquals(2, stack.size()); } }); } @Test public void whenOrderDifferentThanStillMatch() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { stack.add("1"); stack.add("2"); stack.add("1"); boolean result = stack.containsAll(Arrays.asList("1", "2")); assertTrue(result); assertEquals("[1, 2, 1]", stack.toString()); assertEquals(3, stack.size()); } }); } @Test public void whenNoneMatch() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { stack.add("1"); stack.add("2"); stack.add("3"); boolean result = stack.containsAll(Arrays.asList("a", "b")); assertFalse(result); assertEquals("[3, 2, 1]", stack.toString()); assertEquals(3, stack.size()); } }); } @Test public void whenSomeMatch() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { stack.add("1"); stack.add("2"); stack.add("3"); boolean result = stack.containsAll(Arrays.asList("1", "b")); assertFalse(result); assertEquals("[3, 2, 1]", stack.toString()); assertEquals(3, stack.size()); } }); } @Test public void whenSomeElementsNull() { final NaiveTxnStack<String> stack = new NaiveTxnStack<String>(stm); StmUtils.atomic(new TxnVoidCallable() { @Override public void call(Txn tx) throws Exception { stack.add("1"); stack.add("2"); stack.add("3"); boolean result = stack.containsAll(Arrays.asList("1", null)); assertFalse(result); assertEquals("[3, 2, 1]", stack.toString()); assertEquals(3, stack.size()); } }); } }