clone

fifteen puzzle games for the terminal, with daily puzzles, weekly ladders and xp, built on bubble tea

feat/app-decomposition
puzzletea / namegen / namegen_test.go
namegen_test.go 2.1K
1package namegen23import (4 "strings"5 "testing"6)78func TestGenerate_Format(t *testing.T) {9 for range 50 {10 name := Generate()1112 if strings.Count(name, "-") < 1 {13 t.Errorf("expected at least one hyphen in %q", name)14 }1516 parts := strings.SplitN(name, "-", 2)17 if len(parts) != 2 {18 t.Fatalf("expected 2 parts, got %d for %q", len(parts), name)19 }20 if parts[0] == "" {21 t.Errorf("adjective part is empty in %q", name)22 }23 if parts[1] == "" {24 t.Errorf("noun part is empty in %q", name)25 }26 if name != strings.ToLower(name) {27 t.Errorf("expected all lowercase, got %q", name)28 }29 if strings.Contains(name, " ") {30 t.Errorf("expected no spaces in %q", name)31 }32 }33}3435func TestGenerate_ValidWords(t *testing.T) {36 adjSet := make(map[string]bool, len(adjectives))37 for _, a := range adjectives {38 adjSet[a] = true39 }40 nounSet := make(map[string]bool, len(nouns))41 for _, n := range nouns {42 nounSet[n] = true43 }4445 for range 50 {46 name := Generate()47 parts := strings.SplitN(name, "-", 2)4849 if !adjSet[parts[0]] {50 t.Errorf("adjective %q not in adjectives list", parts[0])51 }52 if !nounSet[parts[1]] {53 t.Errorf("noun %q not in nouns list", parts[1])54 }55 }56}5758func TestGenerate_Variety(t *testing.T) {59 seen := make(map[string]bool)60 for range 20 {61 seen[Generate()] = true62 }63 if len(seen) < 2 {64 t.Errorf("expected at least 2 distinct names from 20 generations, got %d", len(seen))65 }66}6768func TestWordLists(t *testing.T) {69 t.Run("adjectives not empty", func(t *testing.T) {70 if len(adjectives) == 0 {71 t.Fatal("adjectives list is empty")72 }73 })7475 t.Run("nouns not empty", func(t *testing.T) {76 if len(nouns) == 0 {77 t.Fatal("nouns list is empty")78 }79 })8081 t.Run("no duplicate adjectives", func(t *testing.T) {82 seen := make(map[string]bool)83 for _, a := range adjectives {84 if seen[a] {85 t.Errorf("duplicate adjective: %q", a)86 }87 seen[a] = true88 }89 })9091 t.Run("no duplicate nouns", func(t *testing.T) {92 seen := make(map[string]bool)93 for _, n := range nouns {94 if seen[n] {95 t.Errorf("duplicate noun: %q", n)96 }97 seen[n] = true98 }99 })100}