| 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) |
| } |
| } |
| } |