//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.uima.grammar;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import uk.gov.dstl.baleen.uima.grammar.ImmutableStack;
public class ImmutableStackTest {
@Test
public void test() {
final ImmutableStack<String> stack = new ImmutableStack<>();
assertNull(stack.getHead());
assertNull(stack.getTail());
assertTrue(stack.isEmpty());
assertNull(stack.pop());
assertEquals(0, stack.size());
assertEquals(0, stack.stream().count());
final ImmutableStack<String> push = stack.push("test");
assertSame(stack, push.getTail());
}
@Test
public void testConstructor() {
final ImmutableStack<String> stack = new ImmutableStack<>("test");
assertEquals("test", stack.getHead());
assertNull(stack.getTail());
assertFalse(stack.isEmpty());
assertEquals(1, stack.size());
assertEquals(1, stack.stream().count());
final ImmutableStack<String> push = stack.push("test");
assertSame(stack, push.getTail());
}
@Test
public void testPush() {
final ImmutableStack<String> initial = new ImmutableStack<>("one");
final ImmutableStack<String> stack = initial.push("two");
assertEquals("two", stack.getHead());
assertSame(initial, stack.getTail());
assertFalse(stack.isEmpty());
assertSame(initial, stack.pop());
assertEquals(2, stack.size());
}
}