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)
	}
}
