package mcp import ( "math" "strings" "testing" ) func TestEvalArith(t *testing.T) { cases := map[string]float64{ "1+2*3": 7, "(1+2)*3": 9, "2^3^2": 512, // 右结合 "-3+5": 2, "10/4": 2.5, "10%3": 1, "2*(3+4)-5": 9, "-(2+3)*2": -10, "3.5e1+0.5": 35.5, } for in, want := range cases { got, err := evalArith(in) if err != nil { t.Errorf("evalArith(%q) 报错: %v", in, err) continue } if math.Abs(got-want) > 1e-9 { t.Errorf("evalArith(%q)=%v want %v", in, got, want) } } } func TestEvalArithErrors(t *testing.T) { for _, in := range []string{"1/0", "1+", "(1+2", "1+2)", "rm -rf /", "import os", ""} { if _, err := evalArith(in); err == nil { t.Errorf("evalArith(%q) 应报错但没有", in) } } } func TestHTMLToText(t *testing.T) { in := `x

标题

第一段&符号

第二段
` got := htmlToText(in) if strings.Contains(got, "alert") || strings.Contains(got, ".a{}") { t.Fatalf("脚本/样式未剔除: %q", got) } if !strings.Contains(got, "标题") || !strings.Contains(got, "第一段&符号") || !strings.Contains(got, "第二段") { t.Fatalf("正文/实体提取不正确: %q", got) } } func TestDDGUnwrap(t *testing.T) { got := ddgUnwrap("//duckduckgo.com/l/?uddg=https%3A%2F%2Fexample.com%2Fa&rut=x") if got != "https://example.com/a" { t.Fatalf("ddgUnwrap 解码错误: %q", got) } }