package internal import ( "fmt" "testing" ) func TestSide_String(t *testing.T) { const unknown = "unknown" seen := make(map[string]Kind, sentinelKind) for k := Kind(1); k < sentinelKind; k++ { t.Run(fmt.Sprintf("Kind %d", k), func(t *testing.T) { str := k.String() if other, ok := seen[str]; ok { t.Errorf("want Kind(%d).String to be unique but was a duplicate of Kind(%d)", k, other) } else { seen[str] = k } if len(str) == 0 { t.Errorf("want Kind(%d).String to be non-empty", k) } if str == unknown { t.Errorf("want Kind(%d).String to be a known value", k) } }) } if KindUnknown.String() != unknown { t.Errorf("want Kind(0) to be unknown") } if Kind(sentinelKind).String() != unknown { t.Errorf("want Kind(%d) to be unknown", sentinelKind) } } func TestSide_Valid(t *testing.T) { for k := Kind(1); k < sentinelKind; k++ { if !k.Valid() { t.Errorf("want %s(%d) to be valid", k, k) } } if KindUnknown.Valid() { t.Errorf("want Kind(0) to be invalid") } if Kind(sentinelKind).Valid() { t.Errorf("want Kind(%d) to be invalid", sentinelKind) } } func TestSide_Is(t *testing.T) { t.Run("valid is self", func(t *testing.T) { for k := Kind(1); k < sentinelKind; k++ { if !k.Is(k) { t.Errorf("want Kind(%d).Is(%d) to be true", k, k) } } }) t.Run("valid is unknown", func(t *testing.T) { for k := Kind(1); k < sentinelKind; k++ { if k.Is(KindUnknown) { t.Errorf("want Kind(%d).Is(0) to be false", k) } if k.Is(sentinelKind) { t.Errorf("want Kind(%d).Is(%d) to be false", k, sentinelKind) } if k.Is(struct{}{}) { t.Errorf("want Kind(%d).Is(other type) to be false", k) } } }) t.Run("unknown is unknown", func(t *testing.T) { if KindUnknown.Is(KindUnknown) { t.Errorf("want Kind(0).Is(0) to be false") } if KindUnknown.Is(sentinelKind) { t.Errorf("want Kind(0).Is(%d) to be false", sentinelKind) } if sentinelKind.Is(sentinelKind) { t.Errorf("want Kind(%d).Is(%d) to be false", sentinelKind, sentinelKind) } }) }