package main

import "testing"

func TestNormalizeSnippet(t *testing.T) {
	cases := []struct {
		in   string
		want string
	}{
		{"sqlite3 /tmp/x.db \"SELECT 42\"", "sqlite3 /PATH \"STR\""},
		{"grep -n 'foo' line 123", "grep -n 'STR' line N"},
		{"  multi   space  ", "multi space"},
		{"sha=ab12cd34ef56", "sha=HEX"},
	}
	for _, c := range cases {
		got := normalizeSnippet(c.in)
		if got != c.want {
			t.Errorf("normalize(%q)=%q want %q", c.in, got, c.want)
		}
	}
}

func TestHashSnippetStable(t *testing.T) {
	a := hashSnippet(normalizeSnippet("ls /tmp/foo"))
	b := hashSnippet(normalizeSnippet("ls /tmp/bar"))
	if a != b {
		t.Errorf("expected same hash after normalization: %s vs %s", a, b)
	}
	c := hashSnippet(normalizeSnippet("cat /tmp/foo"))
	if a == c {
		t.Errorf("expected different hash for different commands")
	}
}

func TestSplitCSV(t *testing.T) {
	cases := []struct {
		in   string
		want int
	}{
		{"a,b,c", 3},
		{" a , b , c ", 3},
		{"", 0},
		{"a,,b", 2},
	}
	for _, c := range cases {
		got := splitCSV(c.in)
		if len(got) != c.want {
			t.Errorf("splitCSV(%q) len=%d want %d (%v)", c.in, len(got), c.want, got)
		}
	}
}
