package pool import ( "math/rand" "testing" ) func TestHash_OrderIndependence(t *testing.T) { flags1 := []string{"--a", "1", "--b", "2", "--c", "3"} h1 := Hash("foo", flags1) for i := 0; i < 5; i++ { shuffled := make([]string, len(flags1)) copy(shuffled, flags1) // Shuffle pairs (each pair is 2 tokens) pairs := make([][2]string, 0) for j := 0; j < len(shuffled); j += 2 { pairs = append(pairs, [2]string{shuffled[j], shuffled[j+1]}) } rand.Shuffle(len(pairs), func(a, b int) { pairs[a], pairs[b] = pairs[b], pairs[a] }) var flat []string for _, p := range pairs { flat = append(flat, p[0], p[1]) } h := Hash("foo", flat) if h != h1 { t.Errorf("iteration %d: hash %s != %s for order %v", i, h, h1, flat) } } } func TestHash_SeparatorCollision(t *testing.T) { h1 := Hash("foo", []string{"--a\x1eb", "1"}) h2 := Hash("foo", []string{"--ab", "1"}) if h1 == h2 { t.Error("separator collision: hashes should differ") } } func TestHash_Length(t *testing.T) { h := Hash("model", []string{"--top-k", "20"}) if len(h) != 16 { t.Errorf("expected 16 hex chars, got %d: %s", len(h), h) } } func TestHash_DifferentModels(t *testing.T) { h1 := Hash("model-a", []string{"--top-k", "20"}) h2 := Hash("model-b", []string{"--top-k", "20"}) if h1 == h2 { t.Error("different models should produce different hashes") } }