95 lines
2.4 KiB
Go
95 lines
2.4 KiB
Go
|
package english
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestPluralWord(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
n int
|
||
|
singular, plural string
|
||
|
want string
|
||
|
}{
|
||
|
{0, "object", "", "objects"},
|
||
|
{1, "object", "", "object"},
|
||
|
{-1, "object", "", "objects"},
|
||
|
{42, "object", "", "objects"},
|
||
|
{2, "vax", "vaxen", "vaxen"},
|
||
|
|
||
|
// special cases
|
||
|
{2, "index", "", "indices"},
|
||
|
|
||
|
// ending in a sibilant sound
|
||
|
{2, "bus", "", "buses"},
|
||
|
{2, "bush", "", "bushes"},
|
||
|
{2, "watch", "", "watches"},
|
||
|
{2, "box", "", "boxes"},
|
||
|
|
||
|
// ending with 'o' preceded by a consonant
|
||
|
{2, "hero", "", "heroes"},
|
||
|
|
||
|
// ending with 'y' preceded by a consonant
|
||
|
{2, "lady", "", "ladies"},
|
||
|
{2, "day", "", "days"},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
if got := PluralWord(tt.n, tt.singular, tt.plural); got != tt.want {
|
||
|
t.Errorf("PluralWord(%d, %q, %q)=%q; want: %q", tt.n, tt.singular, tt.plural, got, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPlural(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
n int
|
||
|
singular, plural string
|
||
|
want string
|
||
|
}{
|
||
|
{1, "object", "", "1 object"},
|
||
|
{42, "object", "", "42 objects"},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
if got := Plural(tt.n, tt.singular, tt.plural); got != tt.want {
|
||
|
t.Errorf("Plural(%d, %q, %q)=%q; want: %q", tt.n, tt.singular, tt.plural, got, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestWordSeries(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
words []string
|
||
|
conjunction string
|
||
|
want string
|
||
|
}{
|
||
|
{[]string{}, "and", ""},
|
||
|
{[]string{"foo"}, "and", "foo"},
|
||
|
{[]string{"foo", "bar"}, "and", "foo and bar"},
|
||
|
{[]string{"foo", "bar", "baz"}, "and", "foo, bar and baz"},
|
||
|
{[]string{"foo", "bar", "baz"}, "or", "foo, bar or baz"},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
if got := WordSeries(tt.words, tt.conjunction); got != tt.want {
|
||
|
t.Errorf("WordSeries(%q, %q)=%q; want: %q", tt.words, tt.conjunction, got, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestOxfordWordSeries(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
words []string
|
||
|
conjunction string
|
||
|
want string
|
||
|
}{
|
||
|
{[]string{}, "and", ""},
|
||
|
{[]string{"foo"}, "and", "foo"},
|
||
|
{[]string{"foo", "bar"}, "and", "foo and bar"},
|
||
|
{[]string{"foo", "bar", "baz"}, "and", "foo, bar, and baz"},
|
||
|
{[]string{"foo", "bar", "baz"}, "or", "foo, bar, or baz"},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
if got := OxfordWordSeries(tt.words, tt.conjunction); got != tt.want {
|
||
|
t.Errorf("OxfordWordSeries(%q, %q)=%q; want: %q", tt.words, tt.conjunction, got, tt.want)
|
||
|
}
|
||
|
}
|
||
|
}
|