words: add accessors and tests for a few of our favorite words

Updates #1235

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
pull/2655/head
Brad Fitzpatrick 3 years ago
parent 9547669787
commit 00b4c2331b

@ -18,7 +18,6 @@ lion
tapir
anteater
monkey
lemur
snake
scorpion
jerboa
@ -35,7 +34,6 @@ moose
alligator
salamander
tadpole
giraffe
astrapia
pug
greyhound
@ -75,7 +73,6 @@ warbler
penguin
snowfinch
broadbill
finch
thrush
bishop
swallow
@ -91,7 +88,6 @@ vulture
rat
takaya
skunk
turtle
tuxedo
turkey
elephant
@ -109,7 +105,6 @@ bandicoot
beagle
beago
collie
beaver
tiger
liger
rhino
@ -117,14 +112,11 @@ bobcat
corgi
dachshund
giraffe
elephant
rhino
bonobo
cetacean
bear
hyena
burmese
lynx
caracal
goat
chameleon
@ -157,7 +149,6 @@ pig
prairiedog
puma
hippo
marmoset
quokka
quoll
bunny
@ -176,7 +167,6 @@ vaquita
wallaby
walrus
weasel
corgi
wolf
zebra
zonkey
@ -186,7 +176,6 @@ zebu
cuttlefish
unicorn
meerkat
lynx
jackalope
heron
fawn
@ -199,7 +188,6 @@ werewolf
tahr
fossa
xerus
raccoon
centaur
raptor
long

@ -0,0 +1,57 @@
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package words contains accessors for some nice words.
package words
import (
"bytes"
_ "embed"
"strings"
"sync"
)
//go:embed tails.txt
var tailsTxt []byte
//go:embed scales.txt
var scalesTxt []byte
var (
once sync.Once
tails, scales []string
)
// Tails returns words about tails.
func Tails() []string {
once.Do(initWords)
return tails
}
// Scales returns words about scales.
func Scales() []string {
once.Do(initWords)
return scales
}
func initWords() {
tails = parseWords(tailsTxt)
scales = parseWords(scalesTxt)
}
func parseWords(txt []byte) []string {
n := bytes.Count(txt, []byte{'\n'})
ret := make([]string, 0, n)
for len(txt) > 0 {
word := txt
i := bytes.IndexByte(txt, '\n')
if i != -1 {
word, txt = word[:i], txt[i+1:]
}
if word := strings.TrimSpace(string(word)); word != "" {
ret = append(ret, word)
}
}
return ret
}

@ -0,0 +1,39 @@
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package words
import (
"strings"
"testing"
)
func TestWords(t *testing.T) {
test := func(t *testing.T, words []string) {
t.Helper()
if len(words) == 0 {
t.Error("no words")
}
seen := map[string]bool{}
for _, w := range words {
if seen[w] {
t.Errorf("dup word %q", w)
}
seen[w] = true
if w == "" || strings.IndexFunc(w, nonASCIILower) != -1 {
t.Errorf("malformed word %q", w)
}
}
}
t.Run("tails", func(t *testing.T) { test(t, Tails()) })
t.Run("scales", func(t *testing.T) { test(t, Scales()) })
t.Logf("%v tails * %v scales = %v beautiful combinations", len(Tails()), len(Scales()), len(Tails())*len(Scales()))
}
func nonASCIILower(r rune) bool {
if 'a' <= r && r <= 'z' {
return false
}
return true
}
Loading…
Cancel
Save