package main import ( "strconv" "testing" ) func TestGenerateCPFLength(t *testing.T) { cpf := generateCPF() if len(cpf) != 11 { t.Fatalf("expected length 11, got %d: %s", len(cpf), cpf) } } func TestGenerateCPFCheckDigits(t *testing.T) { for range 100 { cpf := generateCPF() if !isValidCPF(cpf) { t.Fatalf("invalid CPF generated: %s", cpf) } } } func TestGenerateCPFAllDigits(t *testing.T) { seen := make(map[string]bool) for range 1000 { cpf := generateCPF() if seen[cpf] { t.Fatal("duplicate CPF generated") } seen[cpf] = true } } func isValidCPF(cpf string) bool { if len(cpf) != 11 { return false } digits := make([]int, 11) for i, ch := range cpf { d, err := strconv.Atoi(string(ch)) if err != nil { return false } digits[i] = d } allEqual := true for i := 1; i < 11; i++ { if digits[i] != digits[0] { allEqual = false break } } if allEqual { return false } sum := 0 for i := range 9 { sum += digits[i] * (10 - i) } rem := sum % 11 var d1 int if rem < 2 { d1 = 0 } else { d1 = 11 - rem } if d1 != digits[9] { return false } sum = 0 for i := range 10 { sum += digits[i] * (11 - i) } rem = sum % 11 var d2 int if rem < 2 { d2 = 0 } else { d2 = 11 - rem } return d2 == digits[10] }