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.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.multiverse.api.GlobalStmInstance.getGlobalStmInstance;
import static org.multiverse.api.TxnThreadLocal.clearThreadLocalTxn;
public class NaiveTxnStack_containsTest {
private Stm stm;
private NaiveTxnStack<String> stack;
@Before
public void setUp() {
stm = getGlobalStmInstance();
clearThreadLocalTxn();
stack = new NaiveTxnStack<String>(stm);
}
@Test
public void whenNullItem() {
StmUtils.atomic(new TxnVoidCallable() {
@Override
public void call(Txn tx) throws Exception {
stack.push("1");
stack.push("2");
boolean result = stack.contains(null);
assertFalse(result);
assertEquals("[2, 1]", stack.toString());
}
});
}
@Test
public void whenEmptyStack() {
StmUtils.atomic(new TxnVoidCallable() {
@Override
public void call(Txn tx) throws Exception {
boolean result = stack.contains("foo");
assertFalse(result);
assertEquals("[]", stack.toString());
}
});
}
@Test
public void whenStackDoesntContainItem() {
StmUtils.atomic(new TxnVoidCallable() {
@Override
public void call(Txn tx) throws Exception {
stack.push("1");
stack.push("2");
stack.push("3");
stack.push("4");
boolean result = stack.contains("b");
assertFalse(result);
assertEquals("[4, 3, 2, 1]", stack.toString());
}
});
}
@Test
public void whenContainsItem() {
StmUtils.atomic(new TxnVoidCallable() {
@Override
public void call(Txn tx) throws Exception {
stack.push("1");
stack.push("2");
stack.push("3");
stack.push("4");
boolean result = stack.contains("3");
assertTrue(result);
assertEquals("[4, 3, 2, 1]", stack.toString());
}
});
}
}