62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
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 次入队+出队后应为空")
|
|
}
|
|
}
|