package test.com.coding.basic.stack;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.coding.basic.stack.Stack;
import com.coding.basic.stack.StackUtil;
public class StackUtilTest {
Stack<Object> s ;
@Before
public void setup() {
//初始化栈元素:5,4,3,2,1
s = new Stack<>();
for (int i = 1; i <= 5; i++) {
s.push(i);
}
}
@Test
public void testReverse() {
StackUtil.reverse(s);
Assert.assertEquals(s.size(), 5);
Assert.assertEquals("[1,2,3,4,5]", s.toString());
}
@Test
public void testRemove() {
StackUtil.remove(s, 5);
Assert.assertEquals("[4,3,2,1]", s.toString());
StackUtil.remove(s, 1);
Assert.assertEquals("[4,3,2]", s.toString());
StackUtil.remove(s, 4);
Assert.assertEquals("[3,2]", s.toString());
}
@Test
public void testGetTop() {
Object[] obj = StackUtil.getTop(s, 6);
Assert.assertEquals(5, obj.length);
Assert.assertEquals(s.toString(),arrayToString(obj));
Object[] obj1 = StackUtil.getTop(s, 2);
Assert.assertEquals(2, obj1.length);
Assert.assertEquals("[5,4]",arrayToString(obj1));
}
@Test
public void testIsValidPairs() {
String s0 = "([e{d}f])";
Assert.assertEquals(true,StackUtil.isValidPairs(s0));
String s1 = "(]e{d}f[)";
Assert.assertEquals(false,StackUtil.isValidPairs(s1));
String s2 = "([b{x]y})";
Assert.assertEquals(false,StackUtil.isValidPairs(s2));
String s3 = "()((()()))()";
Assert.assertEquals(true,StackUtil.isValidPairs(s3));
String s4 = "(fs{fs[fs(";
Assert.assertEquals(false,StackUtil.isValidPairs(s4));
String s5 = "gshsg54fs";
Assert.assertEquals(false,StackUtil.isValidPairs(s5));
}
private static String arrayToString(Object[] objs){
StringBuffer sBuffer = new StringBuffer();
sBuffer.append("[");
for (int i = 0; i < objs.length; i++) {
if(i == objs.length-1){
sBuffer.append(objs[i]+"]");
}else{
sBuffer.append(objs[i]+",");
}
}
return sBuffer.toString();
}
}