87 lines
1.7 KiB
Go
87 lines
1.7 KiB
Go
package ds
|
|
|
|
import "testing"
|
|
|
|
func TestLinkedListPushDelete(t *testing.T) {
|
|
l := NewLinkedList[int]()
|
|
if !l.Empty() {
|
|
t.Fatal("新建应为空")
|
|
}
|
|
l.PushBack(2)
|
|
l.PushBack(3)
|
|
l.PushFront(1)
|
|
l.PushFront(0)
|
|
// 期望 [0,1,2,3]
|
|
got := l.ToSlice()
|
|
want := []int{0, 1, 2, 3}
|
|
for i := range want {
|
|
if got[i] != want[i] {
|
|
t.Fatalf("ToSlice[%d] = %d, want %d", i, got[i], want[i])
|
|
}
|
|
}
|
|
|
|
// 删中间
|
|
if !l.Delete(2) {
|
|
t.Fatal("Delete(2) 应成功")
|
|
}
|
|
if l.Delete(99) {
|
|
t.Fatal("Delete(99) 不应成功")
|
|
}
|
|
// 删头部
|
|
if !l.Delete(0) {
|
|
t.Fatal("Delete(0) 应成功")
|
|
}
|
|
// 删尾部
|
|
if !l.Delete(3) {
|
|
t.Fatal("Delete(3) 应成功")
|
|
}
|
|
got = l.ToSlice()
|
|
if len(got) != 1 || got[0] != 1 {
|
|
t.Fatalf("删完后剩 %v, want [1]", got)
|
|
}
|
|
// 删到空,验证 tail 回到 head
|
|
if !l.Delete(1) {
|
|
t.Fatal("Delete(1) 应成功")
|
|
}
|
|
if !l.Empty() {
|
|
t.Fatal("应为空")
|
|
}
|
|
}
|
|
|
|
func TestLinkedListReverse(t *testing.T) {
|
|
l := NewLinkedList[string]()
|
|
for _, s := range []string{"a", "b", "c", "d"} {
|
|
l.PushBack(s)
|
|
}
|
|
l.Reverse()
|
|
got := l.ToSlice()
|
|
want := []string{"d", "c", "b", "a"}
|
|
for i := range want {
|
|
if got[i] != want[i] {
|
|
t.Fatalf("Reverse[%d] = %q, want %q", i, got[i], want[i])
|
|
}
|
|
}
|
|
// 反转空表不应 panic
|
|
l2 := NewLinkedList[int]()
|
|
l2.Reverse()
|
|
if !l2.Empty() {
|
|
t.Fatal("空表反转后应仍为空")
|
|
}
|
|
}
|
|
|
|
func TestLinkedListSingleNode(t *testing.T) {
|
|
l := NewLinkedList[int]()
|
|
l.PushBack(42)
|
|
if l.Len() != 1 {
|
|
t.Fatalf("Len = %d, want 1", l.Len())
|
|
}
|
|
if !l.Delete(42) {
|
|
t.Fatal("Delete 单节点应成功")
|
|
}
|
|
// 删空后再次 PushBack,验证 tail 指针正确
|
|
l.PushBack(7)
|
|
if got := l.ToSlice(); len(got) != 1 || got[0] != 7 {
|
|
t.Fatalf("删空后再插 = %v, want [7]", got)
|
|
}
|
|
}
|