This file summarizes and shows the test code for the generic stack implementation.
func TestStackBasic(t *testing.T) {
stack := New[int]()
if !stack.IsEmpty() {
t.Errorf("Expected stack to be empty")
}
stack.Push(10)
stack.Push(20)
stack.Push(30)
if stack.Size() != 3 {
t.Errorf("Expected stack size 3, got %d", stack.Size())
}
val, ok := stack.PeekNthElement(0)
if !ok || val != 30 {
t.Errorf("PeekNthElement(0) = %v, %v; want 30, true", val, ok)
}
val, ok = stack.PeekNthElement(1)
if !ok || val != 20 {
t.Errorf("PeekNthElement(1) = %v, %v; want 20, true", val, ok)
}
val, ok = stack.PeekNthElement(2)
if !ok || val != 10 {
t.Errorf("PeekNthElement(2) = %v, %v; want 10, true", val, ok)
}
val, ok = stack.Pop()
if !ok || val != 30 {
t.Errorf("Pop() = %v, %v; want 30, true", val, ok)
}
val, ok = stack.Pop()
if !ok || val != 20 {
t.Errorf("Pop() = %v, %v; want 20, true", val, ok)
}
val, ok = stack.Pop()
if !ok || val != 10 {
t.Errorf("Pop() = %v, %v; want 10, true", val, ok)
}
if !stack.IsEmpty() {
t.Errorf("Expected stack to be empty after popping all elements")
}
_, ok = stack.Pop()
if ok {
t.Errorf("Pop() on empty stack should return ok=false")
}
}