Files
leetcode/data-structure/ds-stack_test.go
T
2026-07-20 19:57:25 +08:00

75 lines
1.3 KiB
Go

package ds
import "testing"
func TestStackBasic(t *testing.T) {
var s Stack[int]
if !s.Empty() {
t.Fatal("新建栈应为空")
}
if _, ok := s.Pop(); ok {
t.Fatal("空栈 Pop 应返回 false")
}
if _, ok := s.Peek(); ok {
t.Fatal("空栈 Peek 应返回 false")
}
s.Push(1)
s.Push(2)
s.Push(3)
if s.Len() != 3 {
t.Fatalf("Len = %d, want 3", s.Len())
}
// LIFO 顺序
for _, want := range []int{3, 2, 1} {
got, ok := s.Pop()
if !ok {
t.Fatalf("Pop 失败,期望 %d", want)
}
if got != want {
t.Fatalf("Pop = %d, want %d", got, want)
}
}
if !s.Empty() {
t.Fatal("全部弹出后应为空")
}
}
func TestStackStringType(t *testing.T) {
var s Stack[string]
s.Push("a")
s.Push("b")
top, ok := s.Peek()
if !ok || top != "b" {
t.Fatalf("Peek = %q,%v, want \"b\",true", top, ok)
}
v, _ := s.Pop()
if v != "b" {
t.Fatalf("Pop = %q, want \"b\"", v)
}
}
func TestStackLeakFunctional(t *testing.T) {
// 功能性验证:大量 push/pop 交替后仍正确,间接验证无状态泄漏。
var s Stack[int]
s.Push(1)
s.Push(2)
v, _ := s.Pop()
if v != 2 {
t.Fatalf("Pop = %d, want 2", v)
}
s.Push(3)
v, _ = s.Pop()
if v != 3 {
t.Fatalf("Pop = %d, want 3", v)
}
v, _ = s.Pop()
if v != 1 {
t.Fatalf("Pop = %d, want 1", v)
}
if !s.Empty() {
t.Fatal("应为空")
}
}