package ds import "testing" func TestQueueFIFO(t *testing.T) { var q Queue[int] if !q.Empty() { t.Fatal("新建队列应为空") } if _, ok := q.Dequeue(); ok { t.Fatal("空队列 Dequeue 应返回 false") } q.Enqueue(1) q.Enqueue(2) q.Enqueue(3) if q.Len() != 3 { t.Fatalf("Len = %d, want 3", q.Len()) } // FIFO 顺序 for _, want := range []int{1, 2, 3} { got, ok := q.Dequeue() if !ok { t.Fatalf("Dequeue 失败,期望 %d", want) } if got != want { t.Fatalf("Dequeue = %d, want %d", got, want) } } if !q.Empty() { t.Fatal("全部出队后应为空") } } func TestQueueFront(t *testing.T) { var q Queue[string] q.Enqueue("x") q.Enqueue("y") f, ok := q.Front() if !ok || f != "x" { t.Fatalf("Front = %q,%v, want \"x\",true", f, ok) } _, _ = q.Dequeue() f, _ = q.Front() if f != "y" { t.Fatalf("第二次 Front = %q, want \"y\"", f) } } func TestQueueCompactNoGrowth(t *testing.T) { // 大量入队/出队后,逻辑长度正确且不泄漏内存。 var q Queue[int] for i := 0; i < 1000; i++ { q.Enqueue(i) _, _ = q.Dequeue() } if !q.Empty() { t.Fatal("1000 次入队+出队后应为空") } }