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]) } } }