mirror of
https://github.com/tailscale/tailscale.git
synced 2025-01-05 14:57:49 +00:00
words: add accessors and tests for a few of our favorite words
Updates #1235 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
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
|
||||
|
57
words/words.go
Normal file
57
words/words.go
Normal file
@ -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
|
||||
}
|
39
words/words_test.go
Normal file
39
words/words_test.go
Normal file
@ -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…
x
Reference in New Issue
Block a user