123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- <?php
- namespace morphos\test\Russian;
- use morphos\Russian\NounPluralization;
- use PHPUnit\Framework\TestCase;
- class NounPluralizationTest extends TestCase
- {
- /**
- * @dataProvider pluralizationWordsProvider
- *
- * @param string $word
- * @param $pluralized2
- * @param $pluralized5
- *
- * @throws \Exception
- */
- public function testPluralization($word, $pluralized2, $pluralized5)
- {
- // One
- $this->assertEquals($word, NounPluralization::pluralize($word, 1));
- $this->assertEquals($word, NounPluralization::pluralize($word, 101));
- $this->assertEquals($word, NounPluralization::pluralize($word, 201));
- $this->assertEquals($word, NounPluralization::pluralize($word, 1501));
- // Two-Four
- $this->assertEquals($pluralized2, NounPluralization::pluralize($word, 2));
- $this->assertEquals($pluralized2, NounPluralization::pluralize($word, 23));
- $this->assertEquals($pluralized2, NounPluralization::pluralize($word, 104));
- $this->assertEquals($pluralized2, NounPluralization::pluralize($word, 1503));
- // Five
- $this->assertEquals($pluralized5, NounPluralization::pluralize($word, 5));
- $this->assertEquals($pluralized5, NounPluralization::pluralize($word, 211));
- $this->assertEquals($pluralized5, NounPluralization::pluralize($word, 520));
- $this->assertEquals($pluralized5, NounPluralization::pluralize($word, 1513));
- }
- public function pluralizationWordsProvider()
- {
- return [
- ['дом', 'дома', 'домов'],
- ['поле', 'поля', 'полей'],
- ['яблоко', 'яблока', 'яблок'],
- ['море', 'моря', 'морей'],
- ['плечо', 'плеча', 'плеч'],
- ['стол', 'стола', 'столов'],
- ['нож', 'ножа', 'ножей'],
- ['плакса', 'плаксы', 'плакс'],
- ['ложка', 'ложки', 'ложек'],
- ['вилка', 'вилки', 'вилок'],
- ['чашка', 'чашки', 'чашек'],
- ['тарелка', 'тарелки', 'тарелок'],
- ['день', 'дня', 'дней'],
- ['ночь', 'ночи', 'ночей'],
- ['ядро', 'ядра', 'ядер'],
- ['рубль', 'рубля', 'рублей'],
- ['фунт', 'фунта', 'фунтов'],
- ['лира', 'лиры', 'лир'],
- ['крона', 'кроны', 'крон'],
- ['юань', 'юаня', 'юаней'],
- ['гривна', 'гривны', 'гривен'],
- // адъективное склонение
- ['ванная', 'ванных', 'ванных'],
- ['прохожий', 'прохожих', 'прохожих'],
- ];
- }
- /**
- * @dataProvider pluralizationWordsWithCaseProvider
- *
- * @param string $word
- * @param $pluralizedOne
- * @param $pluralizedMany
- *
- * @param string $case
- *
- * @throws \Exception
- */
- public function testPluralizationWithCase($word, $pluralizedOne, $pluralizedMany, $case)
- {
- // One
- $this->assertEquals($pluralizedOne, NounPluralization::pluralize($word, 1, false, $case));
- $this->assertEquals($pluralizedOne, NounPluralization::pluralize($word, 21, false, $case));
- $this->assertEquals($pluralizedOne, NounPluralization::pluralize($word, 101, false, $case));
- // Many
- $this->assertEquals($pluralizedMany, NounPluralization::pluralize($word, 3, false, $case));
- $this->assertEquals($pluralizedMany, NounPluralization::pluralize($word, 22, false, $case));
- $this->assertEquals($pluralizedMany, NounPluralization::pluralize($word, 60, false, $case));
- }
- public function pluralizationWordsWithCaseProvider()
- {
- return [
- // в ином падеже
- ['год', 'годе', 'годах', 'предложный'],
- ['товар', 'товару', 'товарам', 'дательный'],
- ];
- }
- /**
- * @dataProvider pluralWordsProvider
- */
- public function testPluralInflection($word, $animateness, $inflected)
- {
- $this->assertEquals($inflected, array_values(NounPluralization::getCases($word, $animateness)));
- }
- public function pluralWordsProvider()
- {
- return [
- // 1 склонение
- ['дом', false, ['дома', 'домов', 'домам', 'дома', 'домами', 'домах']],
- ['склон', false, ['склоны', 'склонов', 'склонам', 'склоны', 'склонами', 'склонах']],
- ['поле', false, ['поля', 'полей', 'полям', 'поля', 'полями', 'полях']],
- ['ночь', false, ['ночи', 'ночей', 'ночам', 'ночи', 'ночами', 'ночах']],
- ['кирпич', false, ['кирпичи', 'кирпичей', 'кирпичам', 'кирпичи', 'кирпичами', 'кирпичах']],
- ['гвоздь', false, ['гвозди', 'гвоздей', 'гвоздям', 'гвозди', 'гвоздями', 'гвоздях']],
- ['молния', false, ['молния', 'молний', 'молниям', 'молния', 'молниями', 'молниях']],
- ['тысяча', false, ['тысячи', 'тысяч', 'тысячам', 'тысячи', 'тысячами', 'тысячах']],
- ['сообщение', false, ['сообщения', 'сообщений', 'сообщениям', 'сообщения', 'сообщениями', 'сообщениях']],
- ['халат', false, ['халаты', 'халатов', 'халатам', 'халаты', 'халатами', 'халатах']],
- [
- 'прожектор',
- false,
- ['прожекторы', 'прожекторов', 'прожекторам', 'прожекторы', 'прожекторами', 'прожекторах'],
- ],
- ['пирсинг', false, ['пирсинги', 'пирсингов', 'пирсингам', 'пирсинги', 'пирсингами', 'пирсингах']],
- ['фабрика', false, ['фабрики', 'фабрик', 'фабрикам', 'фабрики', 'фабриками', 'фабриках']],
- ['гений', true, ['гения', 'гениев', 'гениям', 'гениев', 'гениями', 'гениях']],
- [
- 'библиотекарь',
- true,
- ['библиотекари', 'библиотекарей', 'библиотекарям', 'библиотекарей', 'библиотекарями', 'библиотекарях'],
- ],
- ['лошадь', false, ['лошади', 'лошадей', 'лошадям', 'лошади', 'лошадями', 'лошадях']],
- ['любитель', true, ['любители', 'любителей', 'любителям', 'любителей', 'любителями', 'любителях']],
- ['матрас', false, ['матрасы', 'матрасов', 'матрасам', 'матрасы', 'матрасами', 'матрасах']],
- ['коттедж', false, ['коттеджы', 'коттеджей', 'коттеджам', 'коттеджы', 'коттеджами', 'коттеджах']],
- // 2 склонение
- ['копейка', false, ['копейки', 'копеек', 'копейкам', 'копейки', 'копейками', 'копейках']],
- ['штука', false, ['штуки', 'штук', 'штукам', 'штуки', 'штуками', 'штуках']],
- ['батарейка', false, ['батарейки', 'батареек', 'батарейкам', 'батарейки', 'батарейками', 'батарейках']],
- ['письмо', false, ['письма', 'писем', 'письмам', 'письма', 'письмами', 'письмах']],
- ['пятно', false, ['пятна', 'пятен', 'пятнам', 'пятна', 'пятнами', 'пятнах']],
- ['волчище', false, ['волчища', 'волчищ', 'волчищам', 'волчища', 'волчищами', 'волчищах']],
- ['год', false, ['года', 'лет', 'годам', 'года', 'годами', 'годах']],
- ['месяц', false, ['месяцы', 'месяцев', 'месяцам', 'месяцы', 'месяцами', 'месяцах']],
- ['новость', false, ['новости', 'новостей', 'новостям', 'новости', 'новостями', 'новостях']],
- ['тень', false, ['тени', 'теней', 'теням', 'тени', 'тенями', 'тенях']],
- ['человек', true, ['люди', 'человек', 'людям', 'людей', 'людьми', 'людях']],
- ['песец', true, ['песцы', 'песцов', 'песцам', 'песцов', 'песцами', 'песцах']],
- [
- 'руководитель',
- true,
- ['руководители', 'руководителей', 'руководителям', 'руководителей', 'руководителями', 'руководителях'],
- ],
- ['голосование', true, ['голосования', 'голосований', 'голосованиям', 'голосований', 'голосованиями', 'голосованиях']],
- // 3 склонение
- ['дерево', false, ['деревья', 'деревьев', 'деревьям', 'деревья', 'деревьями', 'деревьях']],
- // Адъективное склонение
- // мужской род
- ['выходной', false, ['выходные', 'выходных', 'выходным', 'выходные', 'выходными', 'выходных']],
- [
- 'двугривенный',
- false,
- ['двугривенные', 'двугривенных', 'двугривенным', 'двугривенные', 'двугривенными', 'двугривенных'],
- ],
- ['рабочий', true, ['рабочие', 'рабочих', 'рабочим', 'рабочих', 'рабочими', 'рабочих']],
- // средний род
- ['животное', true, ['животные', 'животных', 'животным', 'животных', 'животными', 'животных']],
- [
- 'подлежащее',
- false,
- ['подлежащие', 'подлежащих', 'подлежащим', 'подлежащие', 'подлежащими', 'подлежащих'],
- ],
- // женский род
- ['запятая', false, ['запятые', 'запятых', 'запятым', 'запятые', 'запятыми', 'запятых']],
- ['горничная', true, ['горничные', 'горничных', 'горничным', 'горничных', 'горничными', 'горничных']],
- ['заведующая', true, ['заведующие', 'заведующих', 'заведующим', 'заведующих', 'заведующими', 'заведующих']],
- ];
- }
- }
|