package semver import "testing" func TestCompare(t *testing.T) { cases := []struct { a, b string want int }{ {"0.81.0", "0.82.0", -1}, {"0.82.0", "0.81.0", 1}, {"0.81.0", "0.81.0", 0}, {"v0.81.0", "0.81.0", 0}, // v-prefix tolerated {"0.100.0", "0.81.0", 1}, // numeric, not lexicographic {"1.0.0", "0.99.9", 1}, // major {"1.2.10", "1.2.3", 1}, // patch numeric {"garbage", "0.81.0", 0}, // parse error → 0 (callers guard with Valid) {"0.81", "0.81.0", 0}, // too few parts → 0 } for _, c := range cases { if got := Compare(c.a, c.b); got != c.want { t.Errorf("Compare(%q,%q) = %d, want %d", c.a, c.b, got, c.want) } } } func TestValid(t *testing.T) { for _, ok := range []string{"0.81.0", "v0.82.0", "10.20.30"} { if !Valid(ok) { t.Errorf("Valid(%q) = false, want true", ok) } } for _, bad := range []string{"", "0.81", "0.81.0-rc1", "a.b.c", "dev"} { if Valid(bad) { t.Errorf("Valid(%q) = true, want false", bad) } } }