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

79 lines
1.6 KiB
Go

package ds
import "testing"
func TestDequeBothEnds(t *testing.T) {
var d Deque[int]
d.PushBack(2)
d.PushBack(3)
d.PushFront(1)
d.PushFront(0)
// 队列内容应为 [0,1,2,3]
if got, _ := d.Front(); got != 0 {
t.Fatalf("Front = %d, want 0", got)
}
if got, _ := d.Back(); got != 3 {
t.Fatalf("Back = %d, want 3", got)
}
if d.Len() != 4 {
t.Fatalf("Len = %d, want 4", d.Len())
}
// 交替弹出,验证两端 O(1)
if v, _ := d.PopFront(); v != 0 {
t.Fatalf("PopFront = %d, want 0", v)
}
if v, _ := d.PopBack(); v != 3 {
t.Fatalf("PopBack = %d, want 3", v)
}
if v, _ := d.PopFront(); v != 1 {
t.Fatalf("PopFront = %d, want 1", v)
}
if v, _ := d.PopBack(); v != 2 {
t.Fatalf("PopBack = %d, want 2", v)
}
if !d.Empty() {
t.Fatal("应为空")
}
}
func TestDequeGrowAcrossBoundary(t *testing.T) {
// 跨越 head 边界触发扩容,验证数据顺序不乱。
var d Deque[int]
for i := 0; i < 20; i++ {
d.PushBack(i)
}
// 先弹出几个,让 head 前移,再继续插入触发扩容。
for i := 0; i < 5; i++ {
_, _ = d.PopFront()
}
for i := 20; i < 40; i++ {
d.PushBack(i)
}
// 期望顺序 5..39
for want := 5; want < 40; want++ {
got, ok := d.PopFront()
if !ok || got != want {
t.Fatalf("PopFront = %d,%v, want %d", got, ok, want)
}
}
}
func TestDequeString(t *testing.T) {
var d Deque[string]
d.PushFront("b")
d.PushFront("a")
d.PushBack("c")
var got []string
for !d.Empty() {
v, _ := d.PopFront()
got = append(got, v)
}
want := []string{"a", "b", "c"}
for i := range want {
if got[i] != want[i] {
t.Fatalf("结果[%d] = %q, want %q", i, got[i], want[i])
}
}
}