package metricparse import "testing" func TestParseString(t *testing.T) { cases := []struct { in string want float64 }{ {"GPC/N1 63.2", 63.2}, // the "1" in N1 must NOT win {"PTC/N2 61.8", 61.8}, // the "2" in N2 must NOT win {"GPC/NG/N1 105.3", 105.3}, {"63.2", 63.2}, {" 63.2 ", 63.2}, {"63", 63}, {"63,2", 63.2}, // decimal comma {"GPC/N1: 63.2 %", 63.2}, // colon + trailing unit {"GPC/N1 63.2 / N2 61.5", 63.2}, // first standalone decimal {"-5", -5}, {"+7.5", 7.5}, {".5", 0.5}, {"N1", 0}, // label only, no value {"N2", 0}, // label only {"", 0}, {" ", 0}, {"no numbers here", 0}, } for _, c := range cases { if got := ParseString(c.in); got != c.want { t.Errorf("ParseString(%q) = %v, want %v", c.in, got, c.want) } } } func TestParseNilAndPtr(t *testing.T) { if got := Parse(nil); got != 0 { t.Fatalf("Parse(nil) = %v, want 0", got) } s := "GPC/N1 63.2" if got := Parse(&s); got != 63.2 { t.Fatalf("Parse(&%q) = %v, want 63.2", s, got) } }