package graph import "testing" func TestRWRConvergenceAndSeed(t *testing.T) { // 图: A-B-C 链 + D 孤立 adj := map[int64][]AdjEdge{ 1: {{2, 1}}, 2: {{1, 1}, {3, 1}}, 3: {{2, 1}}, 4: {{}}, } r := RWR([]int64{1}, adj, 0.25) if r[1] <= 0 { t.Fatal("种子节点质量必须 > 0") } // 与种子连通的质量应高于孤立节点 if r[4] >= r[3] { t.Errorf("孤立节点质量不应高于连通节点: r4=%f r3=%f", r[4], r[3]) } // 归一化 [0,1] for _, v := range r { if v < 0 || v > 1 { t.Errorf("质量未归一化: %f", v) } } } func TestRWRWeightedByProvenance(t *testing.T) { // A -exact-> B, A -fuzzy-> C:B 的质量应高于 C adj := map[int64][]AdjEdge{ 1: {{2, 1.0}, {3, 0.5}}, 2: {{1, 1.0}}, 3: {{1, 0.5}}, } r := RWR([]int64{1}, adj, 0.25) if r[2] <= r[3] { t.Errorf("exact 边节点质量应高于 fuzzy: r2=%f r3=%f", r[2], r[3]) } }