diff --git a/BasicPlurality.php b/BasicPlurality.php deleted file mode 100644 index 6ad880d..0000000 --- a/BasicPlurality.php +++ /dev/null @@ -1,6 +0,0 @@ -hasForms('Иван', RussianNamesDeclension::MAN)); // true + var_dump($dec->hasForms('Иван', FirstNamesDeclension::MAN)); // true ``` 3. Get all forms of a name: ```php - var_dump($dec->getForms('Иван', RussianNamesDeclension::MAN)); + var_dump($dec->getForms('Иван', FirstNamesDeclension::MAN)); /* Will produce something like array(6) { ["nominativus"]=> @@ -63,28 +75,28 @@ Declension of first names in russian language: 4. Get one form of a name: ```php - var_dump($dec->getForm('Иван', RussianCases::RODIT, RussianNamesDeclension::MAN)); // Ивана + var_dump($dec->getForm('Иван', Cases::RODIT, FirstNamesDeclension::MAN)); // Ивана ``` -### Last names +### Last names (`LastNamesDeclension`) Declension of last names in russian language: 1. Create declension class object: ```php - use morphos\RussianCases; - use morphos\RussianLastNamesDeclension; + use morphos\Russian\Cases; + use morphos\Russian\LastNamesDeclension; - $dec = new RussianLastNamesDeclension(); + $dec = new LastNamesDeclension(); ``` 2. Check whether there are forms for this name: ```php - var_dump($dec->hasForms('Иванов', RussianNamesDeclension::MAN)); // true + var_dump($dec->hasForms('Иванов', LastNamesDeclension::MAN)); // true ``` 3. Get all forms of a name: ```php - var_dump($dec->getForms('Иван', RussianNamesDeclension::MAN)); + var_dump($dec->getForms('Иванов', LastNamesDeclension::MAN)); /* Will produce something like array(6) { ["nominativus"]=> @@ -105,18 +117,18 @@ Declension of last names in russian language: 4. Get one form of a name: ```php - var_dump($dec->getForm('Иванов', RussianCases::RODIT, RussianNamesDeclension::MAN)); // Иванова + var_dump($dec->getForm('Иванов', Cases::RODIT, LastNamesDeclension::MAN)); // Иванова ``` -### General words +### General words (`GeneralDeclension`) Declension of general words in russian language: 1. Create declension class object: ```php - use morphos\RussianCases; - use morphos\RussianGeneralDeclension; + use morphos\Russian\Cases; + use morphos\Russian\GeneralDeclension; - $dec = new RussianGeneralDeclension(); + $dec = new GeneralDeclension(); ``` 2. Check whether there are forms for this word (second arg is an animateness): @@ -147,7 +159,7 @@ Declension of general words in russian language: 4. Get one form of a word: ```php - var_dump($dec->getForm('поле', false, RussianCases::RODIT)); // поля + var_dump($dec->getForm('поле', false, Cases::RODIT)); // поля ``` 5. Get all forms of a plural word: @@ -171,97 +183,53 @@ Declension of general words in russian language: */ ``` -**Declension of general words is very complicated and may fail.** - -### Cases - -1. Cases in russian language: - - * morphos\RussianCases::IMENIT - * morphos\RussianCases::RODIT - * morphos\RussianCases::DAT - * morphos\RussianCases::VINIT - * morphos\RussianCases::TVORIT - * morphos\RussianCases::PRODLOJ - - -# Pluralization - -1. Pluralization a word in Russian: - ```php - use morphos\RussianPlurality; - - $plu = new RussianPlurality(); - $word = 'дом'; - $count = 10; - - echo $count.' '.$plu->pluralize($word, $count, false)); - // result: 10 домов - ``` - -2. Pluralization a word in English: - - ```php - use morphos\EnglishPlurality; - - $plu = new EnglishPlurality(); - $word = 'foot'; - $count = 10; - echo $count.' '.$plu->pluralize($word, $count)); - // result: 10 feet - ``` - -## Contributing / Addition of new languages. - -`Morphos` are open for additions and improvements. - -Addition a new language is simple: create the class inheriting one of basic classes and realize abstract methods from it. +### Cases (`Cases`) -Here is a list of basic classes: +Cases in russian language: -#### BasicNamesDeclension + * morphos\Russian\Cases::IMENIT + * morphos\Russian\Cases::RODIT + * morphos\Russian\Cases::DAT + * morphos\Russian\Cases::VINIT + * morphos\Russian\Cases::TVORIT + * morphos\Russian\Cases::PRODLOJ -Class for names declension. +### Pluralization (`Plurality`) +Pluralization a word in Russian: -* Checks, whether there are rules for this name. - ```php - abstract public function hasForms($name, $gender); - ``` +```php +use morphos\Russian\Plurality; -* Generates all forms of a name. - ```php - abstract public function getForms($name, $gender); - ``` +$plu = new Plurality(); +$word = 'дом'; +$count = 10; -* Generates one form of a name. - ```php - abstract public function getForm($name, $form, $gender); - ``` +echo $count.' '.$plu->pluralize($word, $count, false)); +// result: 10 домов +``` -#### BasicDeclension +# English -* Checks, whether there are rules for this word. - ```php - public function hasForms($word, $animate = false); - ``` +English morphology: +```php +morphos\ + English\ + Plurality +``` -* Generates all forms of a word. - ```php - public function getForms($word, $animate = false); - ``` +## Pluralization +Pluralization a word in English: -* Generates one form of a word. - ```php - public function getForm($word, $form, $animate = false); - ``` +```php +use morphos\English\Plurality; -### Useful functions in morphos namespace +$plu = new Plurality(); +$word = 'foot'; +$count = 10; +echo $count.' '.$plu->pluralize($word, $count)); +// result: 10 feet +``` -For simple access to functions of string processing there are some functions in `morphos` namespace: +## Contributing / Addition of new languages -1. `set_encoding()` - Sets encoding for using in morphos/* functions. -2. `length()` - Calculates count of characters in string. -3. `slice()` - Slices string like python. -4. `lower()` - Lower case. -5. `upper()` - Upper case. -6. `name()` - Name case. (ex: Thomas Lewis) +See [CONTRIBUTING.md](CONTRIBUTING.md) for this. diff --git a/RussianPlurality.php b/RussianPlurality.php deleted file mode 100644 index 189c0f2..0000000 --- a/RussianPlurality.php +++ /dev/null @@ -1,19 +0,0 @@ - 20 && $ending == 1) || $count == 1) { - return $word; - } else if (($count > 20 && in_array($ending, range(2, 4))) || in_array($count, range(2, 4))) { - return $plu->getForm($word, $animate, self::RODIT_2); - } else { - $forms = $plu->pluralizeAllDeclensions($word, $animate); - return $forms[self::RODIT_2]; - } - } -} diff --git a/composer.json b/composer.json index 3326be8..d2f10e7 100644 --- a/composer.json +++ b/composer.json @@ -2,14 +2,14 @@ "name": "wapmorgan/morphos", "description": "Morphological solution", "license": "MIT", - "keywords": ["language", "morphology", "russian"], - "suggest": { - "ext-mbstring": "Support cyrillic transformations." + "keywords": ["language", "morphology", "russian", "english", "pluralization", "declension"], + "require": { + "ext-mbstring": "*" }, "autoload": { - "files": ["functions.php"], + "files": ["src/functions.php"], "psr-4": { - "morphos\\": "" + "morphos\\": "src/" } }, "require-dev": { diff --git a/Cases.php b/src/Cases.php similarity index 95% rename from Cases.php rename to src/Cases.php index 2e509c9..9015d69 100644 --- a/Cases.php +++ b/src/Cases.php @@ -1,11 +1,11 @@ - 'chiefs', - 'basis' => 'bases', - 'crisis' => 'crises', - 'radius' => 'radii', - 'nucleus' => 'nuclei', - 'curriculum' => 'curricula', - 'man' => 'men', - 'woman' => 'women', - 'child' => 'children', - 'foot' => 'feet', - 'tooth' => 'teeth', - 'ox' => 'oxen', - 'goose' => 'geese', - 'mouse' => 'mice' - ); - - static private $without_paired_form = array( - 'knowledge', - 'progress', - 'advise', - 'ink', - 'money', - 'scissors', - 'spectacles', - 'trousers', - ); - - static public $consonants = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'x', 'z', 'w'); - - public function pluralize($word, $count) { - if ($count == 1) - return $word; - - $word = lower($word); - if (in_array($word, self::$without_paired_form)) - return $word; - else if (isset(self::$exceptions[$word])) - return self::$exceptions[$word]; - - if (in_array(slice($word, -1), array('s', 'x')) || in_array(slice($word, -2), array('sh', 'ch'))) { - return $word.'es'; - } else if (slice($word, -1) == 'o') { - return $word.'es'; - } else if (slice($word, -1) == 'y' && in_array(slice($word, -2, -1), self::$consonants)) { - return slice($word, 0, -1).'ies'; - } else if (slice($word, -2) == 'fe' || slice($word, -1) == 'f') { - if (slice($word, -1) == 'f') { - return slice($word, 0, -1).'ves'; - } else { - return slice($word, 0, -2).'ves'; - } - } else { - return $word.'s'; - } - } -} + 'chiefs', + 'basis' => 'bases', + 'crisis' => 'crises', + 'radius' => 'radii', + 'nucleus' => 'nuclei', + 'curriculum' => 'curricula', + 'man' => 'men', + 'woman' => 'women', + 'child' => 'children', + 'foot' => 'feet', + 'tooth' => 'teeth', + 'ox' => 'oxen', + 'goose' => 'geese', + 'mouse' => 'mice' + ); + + static private $without_paired_form = array( + 'knowledge', + 'progress', + 'advise', + 'ink', + 'money', + 'scissors', + 'spectacles', + 'trousers', + ); + + static public $consonants = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'x', 'z', 'w'); + + public function pluralize($word, $count) { + if ($count == 1) + return $word; + + $word = lower($word); + if (in_array($word, self::$without_paired_form)) + return $word; + else if (isset(self::$exceptions[$word])) + return self::$exceptions[$word]; + + if (in_array(slice($word, -1), array('s', 'x')) || in_array(slice($word, -2), array('sh', 'ch'))) { + return $word.'es'; + } else if (slice($word, -1) == 'o') { + return $word.'es'; + } else if (slice($word, -1) == 'y' && in_array(slice($word, -2, -1), self::$consonants)) { + return slice($word, 0, -1).'ies'; + } else if (slice($word, -2) == 'fe' || slice($word, -1) == 'f') { + if (slice($word, -1) == 'f') { + return slice($word, 0, -1).'ves'; + } else { + return slice($word, 0, -2).'ves'; + } + } else { + return $word.'s'; + } + } +} diff --git a/BasicDeclension.php b/src/GeneralDeclension.php similarity index 80% rename from BasicDeclension.php rename to src/GeneralDeclension.php index fe8f201..6076e4e 100644 --- a/BasicDeclension.php +++ b/src/GeneralDeclension.php @@ -1,7 +1,7 @@ isConsonant(slice($word, -2, -2))) || $this->isConsonant($last) || in_array($last, array('о', 'е'))) { - // if ($last == 'ь') - // $prefix = slice($word, -2, -1); - // else if (in_array(slice($word, -2), array('ец', 'йк', 'йн'))) - // var_dump($prefix); - // return array($word, $this->isConsonant($last) ? $prefix.'а' : $prefix.'я', $this->isConsonant($last) ? $prefix.'ов' : $prefix.'ей'); - // } else { - // return array($word, $prefix.'и', $prefix.'ей'); - // } - // } - - public function hasForms($word, $animate = false) { - return true; - } - - public function getDeclension($word) { - $word = lower($word); - $last = slice($word, -1); - if ($this->isConsonant($last) || in_array($last, ['о', 'е', 'ё']) || ($last == 'ь' && $this->isConsonant(slice($word, -2, -1)) && !$this->isHissingConsonant(slice($word, -2, -1)))) { - return 1; - } else if (in_array($last, ['а', 'я']) && slice($word, -2) != 'мя') { - return 2; - } else { - return 3; - } - } - - public function getForms($word, $animate = false) { - $word = lower($word); - switch ($this->getDeclension($word)) { - case self::FIRST_DECLENSION: - return $this->declinateFirstDeclension($word, $animate); - case self::SECOND_DECLENSION: - return $this->declinateSecondDeclension($word); - case self::THIRD_DECLENSION: - return $this->declinateThirdDeclension($word); - } - } - - public function declinateFirstDeclension($word, $animate = false) { - $word = lower($word); - $last = slice($word, -1); - $soft_last = $last == 'й' || (in_array($last, ['ь', 'е', 'ё', 'ю', 'я']) && $this->isConsonant(slice($word, -2, -1))); - $prefix = $this->getPrefixOfFirstDeclension($word, $last); - $forms = array( - RussianCases::IMENIT_1 => $word, - ); - - // RODIT_2 - $forms[RussianCases::RODIT_2] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'я', $prefix.'а'); - - // DAT_3 - $forms[RussianCases::DAT_3] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ю', $prefix.'у'); - - // VINIT_4 - if (in_array($last, ['о', 'е', 'ё'])) - $forms[RussianCases::VINIT_4] = $word; - else { - $forms[RussianCases::VINIT_4] = $this->getVinitCaseByAnimateness($forms, $animate); - } - - // TVORIT_5 - // if ($last == 'ь') - // $forms[RussianCases::TVORIT_5] = $prefix.'ом'; - // else if ($last == 'й' || ($this->isConsonant($last) && !$this->isHissingConsonant($last))) - // $forms[RussianCases::TVORIT_5] = $prefix.'ем'; - // else - // $forms[RussianCases::TVORIT_5] = $prefix.'ом'; # http://morpher.ru/Russian/Spelling.aspx#sibilant - if ($this->isHissingConsonant($last) || $last == 'ц') { - $forms[RussianCases::TVORIT_5] = $prefix.'ем'; - } else if (in_array($last, ['й'/*, 'ч', 'щ'*/]) || $soft_last) { - $forms[RussianCases::TVORIT_5] = $prefix.'ем'; - } else { - $forms[RussianCases::TVORIT_5] = $prefix.'ом'; - } - - // PREDLOJ_6 - $forms[RussianCases::PREDLOJ_6] = $this->getPredCaseOf12Declensions($word, $last, $prefix); - - return $forms; - } - - public function declinateSecondDeclension($word) { - $word = lower($word); - $prefix = slice($word, 0, -1); - $last = slice($word, -1); - $soft_last = $this->checkLastConsonantSoftness($word); - $forms = array( - RussianCases::IMENIT_1 => $word, - ); - - // RODIT_2 - $forms[RussianCases::RODIT_2] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'и', $prefix.'ы'); - - // DAT_3 - $forms[RussianCases::DAT_3] = $this->getPredCaseOf12Declensions($word, $last, $prefix); - - // VINIT_4 - $forms[RussianCases::VINIT_4] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ю', $prefix.'у'); - - // TVORIT_5 - if ($last == 'ь') - $forms[RussianCases::TVORIT_5] = $prefix.'ой'; - else { - $forms[RussianCases::TVORIT_5] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ей', $prefix.'ой'); - } - - // if ($last == 'й' || ($this->isConsonant($last) && !$this->isHissingConsonant($last)) || $this->checkLastConsonantSoftness($word)) - // $forms[RussianCases::TVORIT_5] = $prefix.'ей'; - // else - // $forms[RussianCases::TVORIT_5] = $prefix.'ой'; # http://morpher.ru/Russian/Spelling.aspx#sibilant - - // PREDLOJ_6 the same as DAT_3 - $forms[RussianCases::PREDLOJ_6] = $forms[RussianCases::DAT_3]; - return $forms; - } - - public function declinateThirdDeclension($word) { - $word = lower($word); - $prefix = slice($word, 0, -1); - return array( - RussianCases::IMENIT_1 => $word, - RussianCases::RODIT_2 => $prefix.'и', - RussianCases::DAT_3 => $prefix.'и', - RussianCases::VINIT_4 => $word, - RussianCases::TVORIT_5 => $prefix.'ью', - RussianCases::PREDLOJ_6 => $prefix.'и', - ); - } - - public function pluralizeAllDeclensions($word, $animate = false) { - $word = lower($word); - $prefix = slice($word, 0, -1); - $last = slice($word, -1); - - if (($declension = $this->getDeclension($word)) == self::FIRST_DECLENSION) { - $soft_last = $last == 'й' || (in_array($last, ['ь', 'е', 'ё', 'ю', 'я']) && $this->isConsonant(slice($word, -2, -1))); - $prefix = $this->getPrefixOfFirstDeclension($word, $last); - } else if ($declension == self::SECOND_DECLENSION) { - $soft_last = $this->checkLastConsonantSoftness($word); - } else { - $soft_last = false; - } - - $forms = array( - RussianCases::IMENIT_1 => $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'я', $prefix.'а'), - ); - - // RODIT_2 - if ($this->isHissingConsonant($last) || ($soft_last && $last != 'й')) - $forms[RussianCases::RODIT_2] = $prefix.'ей'; - else if ($last == 'й') - $forms[RussianCases::RODIT_2] = $prefix.'ев'; - else // ($this->isConsonant($last) && !$this->isHissingConsonant($last)) - $forms[RussianCases::RODIT_2] = $prefix.'ов'; - - // DAT_3 - $forms[RussianCases::DAT_3] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ям', $prefix.'ам'); - - // VINIT_4 - $forms[RussianCases::VINIT_4] = $this->getVinitCaseByAnimateness($forms, $animate); - - // TVORIT_5 - // my personal rule - if ($last == 'ь' && $declension == self::THIRD_DECLENSION) { - $forms[RussianCases::TVORIT_5] = $prefix.'ми'; - } else { - $forms[RussianCases::TVORIT_5] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ями', $prefix.'ами'); - } - - // PREDLOJ_6 - $forms[RussianCases::PREDLOJ_6] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ях', $prefix.'ах'); - return $forms; - } - - public function getForm($word, $animate = false, $form) { - $forms = $this->getForms($word, $animate); - return $forms[$form]; - } - - protected function getPrefixOfFirstDeclension($word, $last) { - if (in_array($last, ['о', 'е', 'ё', 'ь', 'й'])) - $prefix = slice($word, 0, -1); - else - $prefix = $word; - return $prefix; - } - - protected function getVinitCaseByAnimateness(array $forms, $animate) { - if ($animate) - return $forms[RussianCases::RODIT_2]; - else - return $forms[RussianCases::IMENIT_1]; - } - - protected function getPredCaseOf12Declensions($word, $last, $prefix) { - if (slice($word, -2) == 'ий') { - if ($last == 'ё') - return $prefix.'е'; - else - return $prefix.'и'; - } else { - return $prefix.'е'; - } - } - - protected function chooseVowelAfterConsonant($last, $soft_last, $after_soft, $after_hard) { - if ($this->isHissingConsonant($last) || $this->isVelarConsonant($last) || $soft_last) { - return $after_soft; - } else { - return $after_hard; - } - } -} +isConsonant(slice($word, -2, -2))) || $this->isConsonant($last) || in_array($last, array('о', 'е'))) { + // if ($last == 'ь') + // $prefix = slice($word, -2, -1); + // else if (in_array(slice($word, -2), array('ец', 'йк', 'йн'))) + // var_dump($prefix); + // return array($word, $this->isConsonant($last) ? $prefix.'а' : $prefix.'я', $this->isConsonant($last) ? $prefix.'ов' : $prefix.'ей'); + // } else { + // return array($word, $prefix.'и', $prefix.'ей'); + // } + // } + + public function hasForms($word, $animate = false) { + return true; + } + + public function getDeclension($word) { + $word = lower($word); + $last = slice($word, -1); + if ($this->isConsonant($last) || in_array($last, ['о', 'е', 'ё']) || ($last == 'ь' && $this->isConsonant(slice($word, -2, -1)) && !$this->isHissingConsonant(slice($word, -2, -1)))) { + return 1; + } else if (in_array($last, ['а', 'я']) && slice($word, -2) != 'мя') { + return 2; + } else { + return 3; + } + } + + public function getForms($word, $animate = false) { + $word = lower($word); + switch ($this->getDeclension($word)) { + case self::FIRST_DECLENSION: + return $this->declinateFirstDeclension($word, $animate); + case self::SECOND_DECLENSION: + return $this->declinateSecondDeclension($word); + case self::THIRD_DECLENSION: + return $this->declinateThirdDeclension($word); + } + } + + public function declinateFirstDeclension($word, $animate = false) { + $word = lower($word); + $last = slice($word, -1); + $soft_last = $last == 'й' || (in_array($last, ['ь', 'е', 'ё', 'ю', 'я']) && $this->isConsonant(slice($word, -2, -1))); + $prefix = $this->getPrefixOfFirstDeclension($word, $last); + $forms = array( + Cases::IMENIT_1 => $word, + ); + + // RODIT_2 + $forms[Cases::RODIT_2] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'я', $prefix.'а'); + + // DAT_3 + $forms[Cases::DAT_3] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ю', $prefix.'у'); + + // VINIT_4 + if (in_array($last, ['о', 'е', 'ё'])) + $forms[Cases::VINIT_4] = $word; + else { + $forms[Cases::VINIT_4] = $this->getVinitCaseByAnimateness($forms, $animate); + } + + // TVORIT_5 + // if ($last == 'ь') + // $forms[Cases::TVORIT_5] = $prefix.'ом'; + // else if ($last == 'й' || ($this->isConsonant($last) && !$this->isHissingConsonant($last))) + // $forms[Cases::TVORIT_5] = $prefix.'ем'; + // else + // $forms[Cases::TVORIT_5] = $prefix.'ом'; # http://morpher.ru/Russian/Spelling.aspx#sibilant + if ($this->isHissingConsonant($last) || $last == 'ц') { + $forms[Cases::TVORIT_5] = $prefix.'ем'; + } else if (in_array($last, ['й'/*, 'ч', 'щ'*/]) || $soft_last) { + $forms[Cases::TVORIT_5] = $prefix.'ем'; + } else { + $forms[Cases::TVORIT_5] = $prefix.'ом'; + } + + // PREDLOJ_6 + $forms[Cases::PREDLOJ_6] = $this->getPredCaseOf12Declensions($word, $last, $prefix); + + return $forms; + } + + public function declinateSecondDeclension($word) { + $word = lower($word); + $prefix = slice($word, 0, -1); + $last = slice($word, -1); + $soft_last = $this->checkLastConsonantSoftness($word); + $forms = array( + Cases::IMENIT_1 => $word, + ); + + // RODIT_2 + $forms[Cases::RODIT_2] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'и', $prefix.'ы'); + + // DAT_3 + $forms[Cases::DAT_3] = $this->getPredCaseOf12Declensions($word, $last, $prefix); + + // VINIT_4 + $forms[Cases::VINIT_4] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ю', $prefix.'у'); + + // TVORIT_5 + if ($last == 'ь') + $forms[Cases::TVORIT_5] = $prefix.'ой'; + else { + $forms[Cases::TVORIT_5] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ей', $prefix.'ой'); + } + + // if ($last == 'й' || ($this->isConsonant($last) && !$this->isHissingConsonant($last)) || $this->checkLastConsonantSoftness($word)) + // $forms[Cases::TVORIT_5] = $prefix.'ей'; + // else + // $forms[Cases::TVORIT_5] = $prefix.'ой'; # http://morpher.ru/Russian/Spelling.aspx#sibilant + + // PREDLOJ_6 the same as DAT_3 + $forms[Cases::PREDLOJ_6] = $forms[Cases::DAT_3]; + return $forms; + } + + public function declinateThirdDeclension($word) { + $word = lower($word); + $prefix = slice($word, 0, -1); + return array( + Cases::IMENIT_1 => $word, + Cases::RODIT_2 => $prefix.'и', + Cases::DAT_3 => $prefix.'и', + Cases::VINIT_4 => $word, + Cases::TVORIT_5 => $prefix.'ью', + Cases::PREDLOJ_6 => $prefix.'и', + ); + } + + public function pluralizeAllDeclensions($word, $animate = false) { + $word = lower($word); + $prefix = slice($word, 0, -1); + $last = slice($word, -1); + + if (($declension = $this->getDeclension($word)) == self::FIRST_DECLENSION) { + $soft_last = $last == 'й' || (in_array($last, ['ь', 'е', 'ё', 'ю', 'я']) && $this->isConsonant(slice($word, -2, -1))); + $prefix = $this->getPrefixOfFirstDeclension($word, $last); + } else if ($declension == self::SECOND_DECLENSION) { + $soft_last = $this->checkLastConsonantSoftness($word); + } else { + $soft_last = false; + } + + $forms = array( + Cases::IMENIT_1 => $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'я', $prefix.'а'), + ); + + // RODIT_2 + if ($this->isHissingConsonant($last) || ($soft_last && $last != 'й')) + $forms[Cases::RODIT_2] = $prefix.'ей'; + else if ($last == 'й') + $forms[Cases::RODIT_2] = $prefix.'ев'; + else // ($this->isConsonant($last) && !$this->isHissingConsonant($last)) + $forms[Cases::RODIT_2] = $prefix.'ов'; + + // DAT_3 + $forms[Cases::DAT_3] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ям', $prefix.'ам'); + + // VINIT_4 + $forms[Cases::VINIT_4] = $this->getVinitCaseByAnimateness($forms, $animate); + + // TVORIT_5 + // my personal rule + if ($last == 'ь' && $declension == self::THIRD_DECLENSION) { + $forms[Cases::TVORIT_5] = $prefix.'ми'; + } else { + $forms[Cases::TVORIT_5] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ями', $prefix.'ами'); + } + + // PREDLOJ_6 + $forms[Cases::PREDLOJ_6] = $this->chooseVowelAfterConsonant($last, $soft_last, $prefix.'ях', $prefix.'ах'); + return $forms; + } + + public function getForm($word, $animate = false, $form) { + $forms = $this->getForms($word, $animate); + return $forms[$form]; + } + + protected function getPrefixOfFirstDeclension($word, $last) { + if (in_array($last, ['о', 'е', 'ё', 'ь', 'й'])) + $prefix = slice($word, 0, -1); + else + $prefix = $word; + return $prefix; + } + + protected function getVinitCaseByAnimateness(array $forms, $animate) { + if ($animate) + return $forms[Cases::RODIT_2]; + else + return $forms[Cases::IMENIT_1]; + } + + protected function getPredCaseOf12Declensions($word, $last, $prefix) { + if (slice($word, -2) == 'ий') { + if ($last == 'ё') + return $prefix.'е'; + else + return $prefix.'и'; + } else { + return $prefix.'е'; + } + } + + protected function chooseVowelAfterConsonant($last, $soft_last, $after_soft, $after_hard) { + if ($this->isHissingConsonant($last) || $this->isVelarConsonant($last) || $soft_last) { + return $after_soft; + } else { + return $after_hard; + } + } +} diff --git a/RussianLastNamesDeclension.php b/src/Russian/LastNamesDeclension.php similarity index 94% rename from RussianLastNamesDeclension.php rename to src/Russian/LastNamesDeclension.php index 22dbacd..c1bac38 100644 --- a/RussianLastNamesDeclension.php +++ b/src/Russian/LastNamesDeclension.php @@ -1,18 +1,18 @@ $prefix.'ой', self::PREDLOJ_6 => $this->choosePrepositionByFirstLetter($prefix, 'об', 'о').' '.$prefix.'е' ); - } else if (in_array(upper(slice($name, -1)), Russian::$consonants)) { + } else if (in_array(upper(slice($name, -1)), RussianLanguage::$consonants)) { $prefix = name($name); return array( self::IMENIT_1 => name($name), diff --git a/src/Russian/Plurality.php b/src/Russian/Plurality.php new file mode 100644 index 0000000..93b04c8 --- /dev/null +++ b/src/Russian/Plurality.php @@ -0,0 +1,19 @@ + 20 && $ending == 1) || $count == 1) { + return $word; + } else if (($count > 20 && in_array($ending, range(2, 4))) || in_array($count, range(2, 4))) { + return $plu->getForm($word, $animateness, self::RODIT_2); + } else { + $forms = $plu->pluralizeAllDeclensions($word, $animateness); + return $forms[self::RODIT_2]; + } + } +} diff --git a/Russian.php b/src/Russian/RussianLanguage.php similarity index 90% rename from Russian.php rename to src/Russian/RussianLanguage.php index b8afab1..958c6f7 100644 --- a/Russian.php +++ b/src/Russian/RussianLanguage.php @@ -1,88 +1,88 @@ - 'П', - 'В' => 'Ф', - 'Г' => 'К', - 'Д' => 'Т', - 'Ж' => 'Ш', - 'З' => 'С', - ); - - private function isHissingConsonant($consonant) { - return in_array(lower($consonant), array('ж', 'ш', 'ч', 'щ')); - } - - private function isVelarConsonant($consonant) { - return in_array(lower($consonant), array('г', 'к', 'х')); - } - - private function isConsonant($consonant) { - return in_array(upper($consonant), self::$consonants); - } - - public function countSyllables($string) { - return chars_count($string, array_map(__NAMESPACE__.'\\lower', self::$vowels)); - } - - public function isPaired($consonant) { - $consonant = lower($consonant); - return array_key_exists($consonant, self::$pairs) || (array_search($consonant, self::$pairs) !== false); - } - - public function checkLastConsonantSoftness($word) { - if (($substring = last_position_for_one_of_chars(lower($word), array_map(__NAMESPACE__.'\\lower', self::$consonants))) !== false) { - if (in_array(slice($substring, 0, 1), ['й', 'ч', 'щ'])) // always soft consonants - return true; - else if (length($substring) > 1 && in_array(slice($substring, 1, 2), ['е', 'ё', 'и', 'ю', 'я', 'ь'])) // consonants are soft if they are trailed with these vowels - return true; - } - return false; - } - - public function choosePrepositionByFirstLetter($word, $prepositionWithVowel, $preposition) { - if (in_array(upper(slice($word, 0, 1)), self::$vowels)) - return $prepositionWithVowel; - else - return $preposition; - } -} + 'П', + 'В' => 'Ф', + 'Г' => 'К', + 'Д' => 'Т', + 'Ж' => 'Ш', + 'З' => 'С', + ); + + private function isHissingConsonant($consonant) { + return in_array(lower($consonant), array('ж', 'ш', 'ч', 'щ')); + } + + private function isVelarConsonant($consonant) { + return in_array(lower($consonant), array('г', 'к', 'х')); + } + + private function isConsonant($consonant) { + return in_array(upper($consonant), self::$consonants); + } + + public function countSyllables($string) { + return chars_count($string, array_map(__NAMESPACE__.'\\lower', self::$vowels)); + } + + public function isPaired($consonant) { + $consonant = lower($consonant); + return array_key_exists($consonant, self::$pairs) || (array_search($consonant, self::$pairs) !== false); + } + + public function checkLastConsonantSoftness($word) { + if (($substring = last_position_for_one_of_chars(lower($word), array_map('lower', self::$consonants))) !== false) { + if (in_array(slice($substring, 0, 1), ['й', 'ч', 'щ'])) // always soft consonants + return true; + else if (length($substring) > 1 && in_array(slice($substring, 1, 2), ['е', 'ё', 'и', 'ю', 'я', 'ь'])) // consonants are soft if they are trailed with these vowels + return true; + } + return false; + } + + public function choosePrepositionByFirstLetter($word, $prepositionWithVowel, $preposition) { + if (in_array(upper(slice($word, 0, 1)), self::$vowels)) + return $prepositionWithVowel; + else + return $preposition; + } +} diff --git a/functions.php b/src/functions.php similarity index 94% rename from functions.php rename to src/functions.php index 1104f7c..2e8e17c 100644 --- a/functions.php +++ b/src/functions.php @@ -1,122 +1,120 @@ -getForm($word, $animate, RussianGeneralDeclension::RODIT_2); - } else if ($count == 1) { - return $word; - } else/* if (in_array($count, range(5, 9)) || $count == 0) */{ - $forms = $plu->pluralizeAllDeclensions($word); - return $forms[RussianGeneralDeclension::RODIT_2]; - } -} - -function last_position_for_one_of_chars($string, array $chars) { - if (function_exists('mb_strrpos')) { - $last_position = false; - foreach ($chars as $char) { - if (($pos = mb_strrpos($string, $char)) !== false) { - $last_position = $pos; - } - } - if ($last_position !== false) { - return mb_substr($string, $last_position); - } - return false; - } else { - return false; - } -} +getForm($word, $animate, RussianGeneralDeclension::RODIT_2); + } else if ($count == 1) { + return $word; + } else/* if (in_array($count, range(5, 9)) || $count == 0) */{ + $forms = $plu->pluralizeAllDeclensions($word); + return $forms[RussianGeneralDeclension::RODIT_2]; + } +} + +function last_position_for_one_of_chars($string, array $chars) { + if (function_exists('mb_strrpos')) { + $last_position = false; + foreach ($chars as $char) { + if (($pos = mb_strrpos($string, $char)) !== false) { + $last_position = $pos; + } + } + if ($last_position !== false) { + return mb_substr($string, $last_position); + } + return false; + } else { + return false; + } +} diff --git a/test.php b/test.php deleted file mode 100644 index f46c53e..0000000 --- a/test.php +++ /dev/null @@ -1,4 +0,0 @@ -getForms('Иван', morphos\RussianNamesDeclension::MAN)); diff --git a/tests/English/PluralityTest.php b/tests/English/PluralityTest.php new file mode 100644 index 0000000..6ee0b4c --- /dev/null +++ b/tests/English/PluralityTest.php @@ -0,0 +1,59 @@ +plu = new Plurality(); + } + + /** + * @dataProvider wordsProvider + */ + public function testPluralization($word, $pluralized) { + $this->assertEquals($pluralized, $this->plu->pluralize($word, 2)); + } + + public function wordsProvider() { + return array( + array('ship', 'ships'), + array('gun', 'guns'), + array('boy', 'boys'), + array('class', 'classes'), + array('box', 'boxes'), + array('torpedo', 'torpedoes'), + array('army', 'armies'), + array('navy', 'navies'), + array('wolf', 'wolves'), + array('knife', 'knives'), + array('chief', 'chiefs'), + array('basis', 'bases'), + array('crisis', 'crises'), + array('radius', 'radii'), + array('nucleus', 'nuclei'), + array('curriculum', 'curricula'), + array('man', 'men'), + array('woman', 'women'), + array('child', 'children'), + array('foot', 'feet'), + array('tooth', 'teeth'), + array('ox', 'oxen'), + array('goose', 'geese'), + array('mouse', 'mice'), + array('schoolboy', 'schoolboys'), + array('knowledge', 'knowledge'), + array('progress', 'progress'), + array('advise', 'advise'), + array('ink', 'ink'), + array('money', 'money'), + array('scissors', 'scissors'), + array('spectacles', 'spectacles'), + array('trousers', 'trousers'), + ); + } +} diff --git a/tests/Russian/FirstNamesDeclensionTest.php b/tests/Russian/FirstNamesDeclensionTest.php new file mode 100644 index 0000000..b14533d --- /dev/null +++ b/tests/Russian/FirstNamesDeclensionTest.php @@ -0,0 +1,198 @@ +declension = new FirstNamesDeclension(); + } + + /** + * @dataProvider allMenNamesProvider + */ + public function testHasFormsMen($name) { + $this->assertTrue($this->declension->hasForms($name, FirstNamesDeclension::MAN)); + } + + /** + * @dataProvider allWomenNamesProvider + */ + public function testHasFormsWomen($name) { + $this->assertTrue($this->declension->hasForms($name, FirstNamesDeclension::WOMAN)); + } + + public function allMenNamesProvider() { + return [ + ['Август'], ['Авдей'], ['Аверкий'], ['Аверьян'], ['Авксентий'], ['Автоном'], ['Агап'], ['Агафон'], ['Аггей'], ['Адам'], ['Адриан и Андриян'], ['Азарий'], ['Аким'], ['Александр'], ['Алексей'], ['Амвросий'], ['Амос'], ['Ананий'], ['Анатолий'], ['Андрей'], ['Андрон'], ['Андроник'], ['Аникей'], ['Аникита'], ['Анисим и Онисим'], ['Антип'], ['Антонин'], ['Аполлинарий'], ['Аполлон'], ['Арефий'], ['Аристарх'], ['Аркадий'], ['Арсений'], ['Артемий'], ['Артем'], ['Архип'], ['Аскольд'], ['Афанасий'], ['Афиноген'], ['Бажен'], ['Богдан'], ['Болеслав'], ['Борис'], ['Борислав'], ['Боян'], ['Бронислав'], ['Будимир'], ['Вадим'], ['Валентин'], ['Валерий'], ['Валерьян'], ['Варлаам'], ['Варфоломей'], ['Василий'], ['Вацлав'], ['Велимир'], ['Венедикт'], ['Вениамин'], ['Викентий'], ['Виктор'], ['Викторин'], ['Виссарион'], ['Виталий'], ['Владилен'], ['Владлен'], ['Владимир'], ['Владислав'], ['Влас'], ['Всеволод'], ['Всемил'], ['Всеслав'], ['Вышеслав'], ['Вячеслав'], ['Гаврила и Гавриил'], ['Галактион'], ['Гедеон'], ['Геннадий'], ['Георгий'], ['Герасим'], ['Герман'], ['Глеб'], ['Гордей'], ['Гостомысл'], ['Гремислав'], ['Григорий'], ['Гурий'], ['Давыд и Давид'], ['Данила и Даниил'], ['Дементий'], ['Демид'], ['Демьян'], ['Денис'], ['Дмитрий'], ['Добромысл'], ['Доброслав'], ['Дорофей'], ['Евгений'], ['Евграф'], ['Евдоким'], ['Евлампий'], ['Евсей'], ['Евстафий'], ['Евстигней'], ['Егор'], ['Елизар'], ['Елисей'], ['Емельян'], ['Епифан'], ['Еремей'], ['Ермил'], ['Ермолай'], ['Ерофей'], ['Ефим'], ['Ефрем'], ['Захар'], ['Зиновий'], ['Зосима'], ['Иван'], ['Игнатий'], ['Игорь'], ['Измаил'], ['Изот'], ['Изяслав'], ['Иларион'], ['Илья'], ['Иннокентий'], ['Иосиф'], ['Осип'], ['Ипат'], ['Ипатий'], ['Ипполит'], ['Ираклий'], ['Исай'], ['Исидор'], ['Казимир'], ['Каллистрат'], ['Капитон'], ['Карл'], ['Карп'], ['Касьян'], ['Ким'], ['Кир'], ['Кирилл'], ['Клавдий'], ['Климент'], ['Клементий'], ['Клим'], ['Кондрат'], ['Кондратий'], ['Конон'], ['Константин'], ['Корнил'], ['Корней'], ['Корнилий'], ['Кузьма'], ['Куприян'], ['Лавр'], ['Лаврентий'], ['Ладимир'], ['Ладислав'], ['Лазарь'], ['Лев'], ['Леон'], ['Леонид'], ['Леонтий'], ['Лонгин'], ['Лука'], ['Лукьян'], ['Лучезар'], ['Любим'], ['Любомир'], ['Любосмысл'], ['Макар'], ['Максим'], ['Максимильян'], ['Мариан'], ['Марк'], ['Мартын'], ['Мартьян'], ['Матвей'], ['Мефодий'], ['Мечислав'], ['Милан'], ['Милен'], ['Милий'], ['Милован'], ['Мина'], ['Мир'], ['Мирон'], ['Мирослав'], ['Митофан'], ['Михаил'], ['Михей'], ['Модест'], ['Моисей'], ['Мокей'], ['Мстислав'], ['Назар'], ['Наркис'], ['Натан'], ['Наум'], ['Нестор'], ['Никандр'], ['Никанор'], ['Никита'], ['Никифор'], ['Никодим'], ['Николай'], ['Никон'], ['Нифонт'], ['Олег'], ['Олимпий'], ['Онуфрий'], ['Орест'], ['Остап'], ['Остромир'], ['Павел'], ['Панкратий'], ['Панкрат'], ['Пантелеймон'], ['Панфил'], ['Парамон'], ['Парфен'], ['Пахом'], ['Петр'], ['Пимен'], ['Платон'], ['Поликарп'], ['Порфирий'], ['Потап'], ['Пров'], ['Прокл'], ['Прокофий'], ['Прохор'], ['Радим'], ['Радислав'], ['Радован'], ['Ратибор'], ['Ратмир'], ['Родион'], ['Роман'], ['Ростислав'], ['Рубен'], ['Руслан'], ['Рюрик'], ['Савва'], ['Савватий'], ['Савелий'], ['Самсон'], ['Самуил'], ['Светозар'], ['Святополк'], ['Святослав'], ['Севастьян'], ['Селиван'], ['Селиверст'], ['Семен'], ['Серафим'], ['Сергей'], ['Сигизмунд'], ['Сидор'], ['Сила'], ['Силантий'], ['Сильвестр'], ['Симон'], ['Сократ'], ['Соломон'], ['Софон'], ['Софрон'], ['Спартак'], ['Спиридон'], ['Станимир'], ['Станислав'], ['Степан'], ['Стоян'], ['Тарас'], ['Твердислав'], ['Творимир'], ['Терентий'], ['Тимофей'], ['Тимур'], ['Тит'], ['Тихон'], ['Трифон'], ['Трофим'], ['Ульян'], ['Устин'], ['Фадей'], ['Федор'], ['Федосий'], ['Федот'], ['Феликс'], ['Феоктист'], ['Феофан'], ['Ферапонт'], ['Филарет'], ['Филимон'], ['Филипп'], ['Фирс'], ['Флорентин'], ['Фока'], ['Фома'], ['Фортунат'], ['Фотий'], ['Фрол'], ['Харитон'], ['Харлампий'], ['Христофор'], ['Чеслав'], ['Эдуард'], ['Эммануил'], ['Эмиль'], ['Эраст'], ['Эрнест'], ['Эрнст'], ['Ювеналий'], ['Юлиан'], ['Юлий'], ['Юрий'], ['Яков'], ['Ян'], ['Якуб'], ['Януарий'], ['Ярополк'], ['Ярослав'] + ]; + } + + public function allWomenNamesProvider() { + return [ + ['Августа'], ['Агата'], ['Агафья'], ['Агнесса'], ['Агния'], ['Аграфена'], ['Агриппина'], ['Ада'], ['Аделаида'], ['Аза'], ['Алевтина'], ['Александра'], ['Алина'], ['Алиса'], ['Алла'], ['Альбина'], ['Анастасия'], ['Ангелина'], ['Анисья'], ['Анна'], ['Антонида'], ['Антонина'], ['Анфиса'], ['Аполлинария'], ['Ариадна'], ['Беатриса'], ['Берта'], ['Борислава'], ['Бронислава'], ['Валентина'], ['Валерия'], ['Ванда'], ['Варвара'], ['Василиса'], ['Васса'], ['Вера'], ['Вероника'], ['Викторина'], ['Виктория'], ['Виргиния'], ['Влада'], ['Владилена'], ['Владлена'], ['Владислава'], ['Власта'], ['Всеслава'], ['Галина'], ['Галя'], ['Ганна'], ['Генриетта'], ['Глафира'], ['Горислава'], ['Дарья'], ['Диана'], ['Дина'], ['Доминика'], ['Домна'], ['Ева'], ['Евгеиня'], ['Евдокия'], ['Евлампия'], ['Екатерина'], ['Елена'], ['Елизавета'], ['Ефросинья'], ['Жанна'], ['Зинаида'], ['Злата'], ['Изабелла'], ['Изольда'], ['Инга'], ['Инесса'], ['Инна'], ['Ираида'], ['Ирина'], ['Ия'], ['Казимира'], ['Калерия'], ['Капитолина'], ['Каролина'], ['Кира'], ['Клавдия'], ['Клара'], ['Кларисса'], ['Клементина'], ['Клеопатра'], ['Конкордия'], ['Ксения'], ['Лада'], ['Лариса'], ['Леокадия'], ['Лиана'], ['Лидия'], ['Лилиана'], ['Клеопатра'], ['Конкордия'], ['Ксения'], ['Лада'], ['Лариса'], ['Леокадия'], ['Лиана'], ['Лидия'], ['Лилиана'], ['Лилия'], ['Лия'], ['Луиза'], ['Лукерья'], ['Любава'], ['Любомила'], ['Любомира'], ['Людмила'], ['Майя'], ['Мальвина'], ['Маргарита'], ['Марианна'], ['Мариетта'], ['Марина'], ['Мария'], ['Марта'], ['Марфа'], ['Меланья'], ['Мелитриса'], ['Милана'], ['Милена'], ['Милица'], ['Мира'], ['Мирослава'], ['Млада'], ['Мстислава'], ['Муза'], ['Надежда'], ['Наталья'], ['Наталия'], ['Неонила'], ['Ника'], ['Нина'], ['Нона'], ['Оксана'], ['Октябрина'], ['Олимпиада'], ['Ольга'], ['Пелагея'], ['Поликсена'], ['Полина'], ['Прасковья'], ['Пульхерия'], ['Рада'], ['Раиса'], ['Регина'], ['Рената'], ['Римма'], ['Рогнеда'], ['Роза'], ['Розалия'], ['Розина'], ['Ростислава'], ['Руфина'], ['Светлана'], ['Серафима'], ['Сильва'], ['Сильвия'], ['Саломея'], ['Софья'], ['Станислава'], ['Стела'], ['Степанида'], ['Сусанна'], ['Таисия'], ['Тамара'], ['Татьяна'], ['Ульяна'], ['Фаина'], ['Федосья'], ['Фелицата'], ['Флора'], ['Флорентина'], ['Фатина'], ['Харитина'], ['Христина'], ['Эвелина'], ['Элеонора'], ['Эльвира'], ['Эмилия'], ['Эмма'], ['Юлия'], ['Ядвига'], ['Ярослава'] + ]; + } + + /** + * @dataProvider menNamesProvider() + */ + public function testDeclenationForMen($name, $name2, $name3, $name4, $name5, $name6) { + $this->assertEquals(array( + Cases::IMENIT => $name, + Cases::RODIT => $name2, + Cases::DAT => $name3, + Cases::VINIT => $name4, + Cases::TVORIT => $name5, + Cases::PREDLOJ => $name6, + ), $this->declension->getForms($name, FirstNamesDeclension::MAN)); + } + + /** + * @dataProvider womenNamesProvider() + */ + public function testDeclenationForWomen($name, $name2, $name3, $name4, $name5, $name6) { + $this->assertEquals(array( + Cases::IMENIT => $name, + Cases::RODIT => $name2, + Cases::DAT => $name3, + Cases::VINIT => $name4, + Cases::TVORIT => $name5, + Cases::PREDLOJ => $name6, + ), $this->declension->getForms($name, FirstNamesDeclension::WOMAN)); + } + + public function menNamesProvider() { + return array( + array('Иван', 'Ивана', 'Ивану', 'Ивана', 'Иваном', 'об Иване'), + array('Святослав', 'Святослава', 'Святославу', 'Святослава', 'Святославом', 'о Святославе'), + array('Тимур', 'Тимура', 'Тимуру', 'Тимура', 'Тимуром', 'о Тимуре'), + array('Рем', 'Рема', 'Рему', 'Рема', 'Ремом', 'о Реме'), + array('Казбич', 'Казбича', 'Казбичу', 'Казбича', 'Казбичем', 'о Казбиче'), + array('Игорь', 'Игоря', 'Игорю', 'Игоря', 'Игорем', 'об Игоре'), + array('Виль', 'Виля', 'Вилю', 'Виля', 'Вилем', 'о Виле'), + array('Рауль', 'Рауля', 'Раулю', 'Рауля', 'Раулем', 'о Рауле'), + array('Шамиль', 'Шамиля', 'Шамилю', 'Шамиля', 'Шамилем', 'о Шамиле'), + array('Петрусь', 'Петруся', 'Петрусю', 'Петруся', 'Петрусем', 'о Петрусе'), + array('Абай', 'Абая', 'Абаю', 'Абая', 'Абаем', 'об Абае'), + array('Федяй', 'Федяя', 'Федяю', 'Федяя', 'Федяем', 'о Федяе'), + array('Андрей', 'Андрея', 'Андрею', 'Андрея', 'Андреем', 'об Андрее'), + array('Гарей', 'Гарея', 'Гарею', 'Гарея', 'Гареем', 'о Гарее'), + array('Джансуй', 'Джансуя', 'Джансую', 'Джансуя', 'Джансуем', 'о Джансуе'), + array('Ной', 'Ноя', 'Ною', 'Ноя', 'Ноем', 'о Ное'), + array('Дмитрий', 'Дмитрия', 'Дмитрию', 'Дмитрия', 'Дмитрием', 'о Дмитрии'), + array('Гордий', 'Гордия', 'Гордию', 'Гордия', 'Гордием', 'о Гордии'), + array('Пий', 'Пия', 'Пию', 'Пия', 'Пием', 'о Пии'), + array('Геннадий', 'Геннадия', 'Геннадию', 'Геннадия', 'Геннадием', 'о Геннадии'), + array('Хаджибий', 'Хаджибия', 'Хаджибию', 'Хаджибия', 'Хаджибием', 'о Хаджибии'), + array('Никита', 'Никиты', 'Никите', 'Никиту', 'Никитой', 'о Никите'), + array('Данила', 'Данилы', 'Даниле', 'Данилу', 'Данилой', 'о Даниле'), + array('Эйса', 'Эйсы', 'Эйсе', 'Эйсу', 'Эйсой', 'об Эйсе'), + array('Кузьма', 'Кузьмы', 'Кузьме', 'Кузьму', 'Кузьмой', 'о Кузьме'), + array('Мустафа', 'Мустафы', 'Мустафе', 'Мустафу', 'Мустафой', 'о Мустафе'), + array('Байхужа', 'Байхужи', 'Байхуже', 'Байхужу', 'Байхужой', 'о Байхуже'), + array('Хасанша', 'Хасанши', 'Хасанше', 'Хасаншу', 'Хасаншой', 'о Хасанше'), + array('Карча', 'Карчи', 'Карче', 'Карчу', 'Карчой', 'о Карче'), + array('Гыкга', 'Гыкги', 'Гыкге', 'Гыкгу', 'Гыкгой', 'о Гыкге'), + array('Бетикка', 'Бетикки', 'Бетикке', 'Бетикку', 'Бетиккой', 'о Бетикке'), + array('Анания', 'Анании', 'Анании', 'Ананию', 'Ананией', 'об Анании'), + array('Неемия', 'Неемии', 'Неемии', 'Неемию', 'Неемией', 'о Неемии'), + array('Малахия', 'Малахии', 'Малахии', 'Малахию', 'Малахией', 'о Малахии'), + array('Осия', 'Осии', 'Осии', 'Осию', 'Осией', 'об Осии'), + array('Иеремия', 'Иеремии', 'Иеремии', 'Иеремию', 'Иеремией', 'об Иеремии'), + array('Илия', 'Илии', 'Илии', 'Илию', 'Илией', 'об Илии'), + array('Данило', 'Данилы', 'Даниле', 'Данилу', 'Данилой', 'о Даниле'), + array('Иванко', 'Иванки', 'Иванке', 'Иванку', 'Иванкой', 'об Иванке'), + ); + } + + public function womenNamesProvider() { + return array( + array('Анна', 'Анны', 'Анне', 'Анну', 'Анной', 'об Анне'), + array('Эра', 'Эры', 'Эре', 'Эру', 'Эрой', 'об Эре'), + array('Асма', 'Асмы', 'Асме', 'Асму', 'Асмой', 'об Асме'), + array('Хафиза', 'Хафизы', 'Хафизе', 'Хафизу', 'Хафизой', 'о Хафизе'), + array('Ольга', 'Ольги', 'Ольге', 'Ольгу', 'Ольгой', 'об Ольге'), + array('Моника', 'Моники', 'Монике', 'Монику', 'Моникой', 'о Монике'), + array('Голиндуха', 'Голиндухи', 'Голиндухе', 'Голиндуху', 'Голиндухой', 'о Голиндухе'), + array('Снежа', 'Снежи', 'Снеже', 'Снежу', 'Снежой', 'о Снеже'), + array('Гайша', 'Гайши', 'Гайше', 'Гайшу', 'Гайшой', 'о Гайше'), + array('Милица', 'Милицы', 'Милице', 'Милицу', 'Милицей', 'о Милице'), + array('Ляуца', 'Ляуцы', 'Ляуце', 'Ляуцу', 'Ляуцей', 'о Ляуце'), + array('Куаца', 'Куацы', 'Куаце', 'Куацу', 'Куацей', 'о Куаце'), + array('Олеся', 'Олеси', 'Олесе', 'Олесю', 'Олесей', 'об Олесе'), + array('Дарья', 'Дарьи', 'Дарье', 'Дарью', 'Дарьей', 'о Дарье'), + array('Майя', 'Майи', 'Майе', 'Майю', 'Майей', 'о Майе'), + array('Моя', 'Мои', 'Мое', 'Мою', 'Моей', 'о Мое'), + array('Пелагея', 'Пелагеи', 'Пелагее', 'Пелагею', 'Пелагеей', 'о Пелагее'), + array('Марция', 'Марции', 'Марции', 'Марцию', 'Марцией', 'о Марции'), + array('Наталия', 'Наталии', 'Наталии', 'Наталию', 'Наталией', 'о Наталии'), + array('Армения', 'Армении', 'Армении', 'Армению', 'Арменией', 'об Армении'), + array('Лия', 'Лии', 'Лии', 'Лию', 'Лией', 'о Лии'), + array('Ия', 'Ии', 'Ии', 'Ию', 'Ией', 'об Ии'), + array('Любовь', 'Любови', 'Любови', 'Любовь', 'Любовью', 'о Любови'), + array('Эсфирь', 'Эсфири', 'Эсфири', 'Эсфирь', 'Эсфирью', 'об Эсфири'), + array('Нинель', 'Нинели', 'Нинели', 'Нинель', 'Нинелью', 'о Нинели'), + array('Айгюль', 'Айгюли', 'Айгюли', 'Айгюль', 'Айгюлью', 'об Айгюли'), + array('Вартануш', 'Вартануши', 'Вартануши', 'Вартануш', 'Вартанушью', 'о Вартануши'), + array('Катиш', 'Катиши', 'Катиши', 'Катиш', 'Катишью', 'о Катиши'), + array('Хуж', 'Хужи', 'Хужи', 'Хуж', 'Хужью', 'о Хужи'), + array('Гуащ', 'Гуащи', 'Гуащи', 'Гуащ', 'Гуащью', 'о Гуащи'), + array('Карач', 'Карачи', 'Карачи', 'Карач', 'Карачью', 'о Карачи'), + ); + } + + /** + * @dataProvider immutableNamesProvider() + */ + public function testImmutabeNames($name, $gender) { + $this->assertFalse($this->declension->hasForms($name, $gender)); + } + + public function immutableNamesProvider() { + return array( + array('Тореро', FirstNamesDeclension::WOMAN), + array('Айбу', FirstNamesDeclension::WOMAN), + array('Хосе', FirstNamesDeclension::WOMAN), + array('Каншау', FirstNamesDeclension::WOMAN), + array('Франсуа', FirstNamesDeclension::WOMAN), + array('Тойбухаа', FirstNamesDeclension::WOMAN), + array('Качаа', FirstNamesDeclension::WOMAN), + array('Зиа', FirstNamesDeclension::WOMAN), + array('Хожулаа', FirstNamesDeclension::WOMAN), + ); + } + + /** + * @dataProvider mutableNamesProvider() + */ + public function testMutableNames($name, $gender) { + $this->assertTrue($this->declension->hasForms($name, $gender)); + } + + public function mutableNamesProvider() { + return array( + array('Иван', FirstNamesDeclension::MAN), + array('Игорь', FirstNamesDeclension::MAN), + array('Андрей', FirstNamesDeclension::MAN), + array('Фома', FirstNamesDeclension::MAN), + array('Никита', FirstNamesDeclension::MAN), + array('Илья', FirstNamesDeclension::MAN), + array('Анна', FirstNamesDeclension::WOMAN), + array('Наталья', FirstNamesDeclension::WOMAN), + array('Виринея', FirstNamesDeclension::WOMAN), + // foreign names + array('Айдын', FirstNamesDeclension::MAN), + array('Наиль', FirstNamesDeclension::MAN), + array('Тукай', FirstNamesDeclension::MAN), + array('Мустафа', FirstNamesDeclension::MAN), + array('Нафиса', FirstNamesDeclension::WOMAN), + array('Асия', FirstNamesDeclension::WOMAN), + array('Лючия', FirstNamesDeclension::WOMAN), +); + } +} diff --git a/tests/Russian/GeneralDeclensionTest.php b/tests/Russian/GeneralDeclensionTest.php new file mode 100644 index 0000000..301bacb --- /dev/null +++ b/tests/Russian/GeneralDeclensionTest.php @@ -0,0 +1,45 @@ +dec = new GeneralDeclension(); + } + + /** + * @dataProvider wordsProvider + */ + public function testDeclensionDetect($word, $animateness, $declension) { + $this->assertEquals($declension, $this->dec->getDeclension($word)); + } + + /** + * @dataProvider wordsProvider + */ + public function testDeclenation($word, $animateness, $declension, $declenated) { + $this->assertEquals($declenated, array_values($this->dec->getForms($word, $animateness))); + } + + /** + * @dataProvider wordsProvider + */ + public function testPluralDeclenation($word, $animateness, $declension, $declenated, $pluralizedAndDeclenated) { + $this->assertEquals($pluralizedAndDeclenated, array_values($this->dec->pluralizeAllDeclensions($word, $animateness))); + } + + public function wordsProvider() { + return array( + array('дом', false, 1, array('дом', 'дома', 'дому', 'дом', 'домом', 'доме'), array('дома', 'домов', 'домам', 'дома', 'домами', 'домах')), + array('поле', false, 1, array('поле', 'поля', 'полю', 'поле', 'полем', 'поле'), array('поля', 'полей', 'полям', 'поля', 'полями', 'полях')), + array('гвоздь', false, 1, array('гвоздь', 'гвоздя', 'гвоздю', 'гвоздь', 'гвоздем', 'гвозде'), array('гвоздя', 'гвоздей', 'гвоздям', 'гвоздя', 'гвоздями', 'гвоздях')), + array('гений', true, 1, array('гений', 'гения', 'гению', 'гения', 'гением', 'гении'), array('гения', 'гениев', 'гениям', 'гениев', 'гениями', 'гениях')), + array('молния', false, 2, array('молния', 'молнии', 'молние', 'молнию', 'молнией', 'молние'), array('молния', 'молнией', 'молниям', 'молния', 'молниями', 'молниях')), + ); + } +} diff --git a/tests/Russian/LastNamesDeclensionTest.php b/tests/Russian/LastNamesDeclensionTest.php new file mode 100644 index 0000000..1395baa --- /dev/null +++ b/tests/Russian/LastNamesDeclensionTest.php @@ -0,0 +1,55 @@ +declension = new LastNamesDeclension(); + } + + /** + * @dataProvider lastNamesProvider + */ + public function testHasForms($name, $gender) { + $this->assertTrue($this->declension->hasForms($name, $gender)); + } + + /** + * @dataProvider lastNamesProvider + */ + public function testGetForms($name, $gender, $name2, $name3, $name4, $name5, $name6) { + $forms = $this->declension->getForms($name, $gender); + $this->assertEquals(array( + Cases::IMENIT => $name, + Cases::RODIT => $name2, + Cases::DAT => $name3, + Cases::VINIT => $name4, + Cases::TVORIT => $name5, + Cases::PREDLOJ => $name6 + ), $forms); + } + + public function lastNamesProvider() { + return array( + array('Смирнов', NamesDeclension::MAN, 'Смирнова', 'Смирнову', 'Смирнова', 'Смирновым', 'о Смирнове'), + array('Кромской', NamesDeclension::MAN, 'Кромского', 'Кромскому', 'Кромского', 'Кромским', 'о Кромском'), + array('Смирнова', NamesDeclension::WOMAN, 'Смирновой', 'Смирновой', 'Смирнову', 'Смирновой', 'о Смирновой'), + array('Кромская', NamesDeclension::WOMAN, 'Кромской', 'Кромской', 'Кромскую', 'Кромской', 'о Кромской'), + array('Зима', NamesDeclension::WOMAN, 'Зимы', 'Зиме', 'Зиму', 'Зимой', 'о Зиме'), + array('Зоя', NamesDeclension::WOMAN, 'Зои', 'Зое', 'Зою', 'Зоей', 'о Зое'), + array('Ус', NamesDeclension::MAN, 'Уса', 'Усу', 'Уса', 'Усом', 'об Усе'), + array('Кузьмич', NamesDeclension::MAN, 'Кузьмича', 'Кузьмичу', 'Кузьмича', 'Кузьмичом', 'о Кузьмиче'), + array('Берг', NamesDeclension::MAN, 'Берга', 'Бергу', 'Берга', 'Бергом', 'о Берге'), + array('Медведь', NamesDeclension::MAN, 'Медведя', 'Медведю', 'Медведя', 'Медведем', 'о Медведе'), + array('Суздаль', NamesDeclension::MAN, 'Суздаля', 'Суздалю', 'Суздаля', 'Суздалем', 'о Суздале'), + array('Тронь', NamesDeclension::MAN, 'Троня', 'Троню', 'Троня', 'Тронем', 'о Троне'), + ); + } + +} diff --git a/tests/Russian/PluralityTest.php b/tests/Russian/PluralityTest.php new file mode 100644 index 0000000..d7fcfb7 --- /dev/null +++ b/tests/Russian/PluralityTest.php @@ -0,0 +1,29 @@ +plu = new Plurality(); + } + + /** + * @dataProvider wordsProvider + */ + public function testPluralization($word, $pluralized2, $pluralized5) { + $this->assertEquals($pluralized2, $this->plu->pluralize($word, 2)); + $this->assertEquals($pluralized5, $this->plu->pluralize($word, 5)); + } + + public function wordsProvider() { + return array( + array('дом', 'дома', 'домов'), + array('поле', 'поля', 'полей'), + ); + } +} diff --git a/tests/RussianGeneralDeclensionTest.php b/tests/RussianGeneralDeclensionTest.php deleted file mode 100644 index fb25da1..0000000 --- a/tests/RussianGeneralDeclensionTest.php +++ /dev/null @@ -1,38 +0,0 @@ -declension = new RussianNamesDeclension(); - } - - /** - * @dataProvider menNamesProvider - */ - public function testHasFormsMen($name) { - $this->assertTrue($this->declension->hasForms($name, RussianNamesDeclension::MAN)); - } - - /** - * @dataProvider womenNamesProvider - */ - public function testHasFormsWomen($name) { - $this->assertTrue($this->declension->hasForms($name, RussianNamesDeclension::WOMAN)); - } - - public function menNamesProvider() { - return [['Август'], ['Авдей'], ['Аверкий'], ['Аверьян'], ['Авксентий'], ['Автоном'], ['Агап'], ['Агафон'], ['Аггей'], ['Адам'], ['Адриан и Андриян'], ['Азарий'], ['Аким'], ['Александр'], ['Алексей'], ['Амвросий'], ['Амос'], ['Ананий'], ['Анатолий'], ['Андрей'], ['Андрон'], ['Андроник'], ['Аникей'], ['Аникита'], ['Анисим и Онисим'], ['Антип'], ['Антонин'], ['Аполлинарий'], ['Аполлон'], ['Арефий'], ['Аристарх'], ['Аркадий'], ['Арсений'], ['Артемий'], ['Артем'], ['Архип'], ['Аскольд'], ['Афанасий'], ['Афиноген'], ['Бажен'], ['Богдан'], ['Болеслав'], ['Борис'], ['Борислав'], ['Боян'], ['Бронислав'], ['Будимир'], ['Вадим'], ['Валентин'], ['Валерий'], ['Валерьян'], ['Варлаам'], ['Варфоломей'], ['Василий'], ['Вацлав'], ['Велимир'], ['Венедикт'], ['Вениамин'], ['Викентий'], ['Виктор'], ['Викторин'], ['Виссарион'], ['Виталий'], ['Владилен'], ['Владлен'], ['Владимир'], ['Владислав'], ['Влас'], ['Всеволод'], ['Всемил'], ['Всеслав'], ['Вышеслав'], ['Вячеслав'], ['Гаврила и Гавриил'], ['Галактион'], ['Гедеон'], ['Геннадий'], ['Георгий'], ['Герасим'], ['Герман'], ['Глеб'], ['Гордей'], ['Гостомысл'], ['Гремислав'], ['Григорий'], ['Гурий'], ['Давыд и Давид'], ['Данила и Даниил'], ['Дементий'], ['Демид'], ['Демьян'], ['Денис'], ['Дмитрий'], ['Добромысл'], ['Доброслав'], ['Дорофей'], ['Евгений'], ['Евграф'], ['Евдоким'], ['Евлампий'], ['Евсей'], ['Евстафий'], ['Евстигней'], ['Егор'], ['Елизар'], ['Елисей'], ['Емельян'], ['Епифан'], ['Еремей'], ['Ермил'], ['Ермолай'], ['Ерофей'], ['Ефим'], ['Ефрем'], ['Захар'], ['Зиновий'], ['Зосима'], ['Иван'], ['Игнатий'], ['Игорь'], ['Измаил'], ['Изот'], ['Изяслав'], ['Иларион'], ['Илья'], ['Иннокентий'], ['Иосиф'], ['Осип'], ['Ипат'], ['Ипатий'], ['Ипполит'], ['Ираклий'], ['Исай'], ['Исидор'], ['Казимир'], ['Каллистрат'], ['Капитон'], ['Карл'], ['Карп'], ['Касьян'], ['Ким'], ['Кир'], ['Кирилл'], ['Клавдий'], ['Климент'], ['Клементий'], ['Клим'], ['Кондрат'], ['Кондратий'], ['Конон'], ['Константин'], ['Корнил'], ['Корней'], ['Корнилий'], ['Кузьма'], ['Куприян'], ['Лавр'], ['Лаврентий'], ['Ладимир'], ['Ладислав'], ['Лазарь'], ['Лев'], ['Леон'], ['Леонид'], ['Леонтий'], ['Лонгин'], ['Лука'], ['Лукьян'], ['Лучезар'], ['Любим'], ['Любомир'], ['Любосмысл'], ['Макар'], ['Максим'], ['Максимильян'], ['Мариан'], ['Марк'], ['Мартын'], ['Мартьян'], ['Матвей'], ['Мефодий'], ['Мечислав'], ['Милан'], ['Милен'], ['Милий'], ['Милован'], ['Мина'], ['Мир'], ['Мирон'], ['Мирослав'], ['Митофан'], ['Михаил'], ['Михей'], ['Модест'], ['Моисей'], ['Мокей'], ['Мстислав'], ['Назар'], ['Наркис'], ['Натан'], ['Наум'], ['Нестор'], ['Никандр'], ['Никанор'], ['Никита'], ['Никифор'], ['Никодим'], ['Николай'], ['Никон'], ['Нифонт'], ['Олег'], ['Олимпий'], ['Онуфрий'], ['Орест'], ['Остап'], ['Остромир'], ['Павел'], ['Панкратий'], ['Панкрат'], ['Пантелеймон'], ['Панфил'], ['Парамон'], ['Парфен'], ['Пахом'], ['Петр'], ['Пимен'], ['Платон'], ['Поликарп'], ['Порфирий'], ['Потап'], ['Пров'], ['Прокл'], ['Прокофий'], ['Прохор'], ['Радим'], ['Радислав'], ['Радован'], ['Ратибор'], ['Ратмир'], ['Родион'], ['Роман'], ['Ростислав'], ['Рубен'], ['Руслан'], ['Рюрик'], ['Савва'], ['Савватий'], ['Савелий'], ['Самсон'], ['Самуил'], ['Светозар'], ['Святополк'], ['Святослав'], ['Севастьян'], ['Селиван'], ['Селиверст'], ['Семен'], ['Серафим'], ['Сергей'], ['Сигизмунд'], ['Сидор'], ['Сила'], ['Силантий'], ['Сильвестр'], ['Симон'], ['Сократ'], ['Соломон'], ['Софон'], ['Софрон'], ['Спартак'], ['Спиридон'], ['Станимир'], ['Станислав'], ['Степан'], ['Стоян'], ['Тарас'], ['Твердислав'], ['Творимир'], ['Терентий'], ['Тимофей'], ['Тимур'], ['Тит'], ['Тихон'], ['Трифон'], ['Трофим'], ['Ульян'], ['Устин'], ['Фадей'], ['Федор'], ['Федосий'], ['Федот'], ['Феликс'], ['Феоктист'], ['Феофан'], ['Ферапонт'], ['Филарет'], ['Филимон'], ['Филипп'], ['Фирс'], ['Флорентин'], ['Фока'], ['Фома'], ['Фортунат'], ['Фотий'], ['Фрол'], ['Харитон'], ['Харлампий'], ['Христофор'], ['Чеслав'], ['Эдуард'], ['Эммануил'], ['Эмиль'], ['Эраст'], ['Эрнест'], ['Эрнст'], ['Ювеналий'], ['Юлиан'], ['Юлий'], ['Юрий'], ['Яков'], ['Ян'], ['Якуб'], ['Януарий'], ['Ярополк'], ['Ярослав'] - ]; - } - - public function womenNamesProvider() { - return [ - ['Августа'], ['Агата'], ['Агафья'], ['Агнесса'], ['Агния'], ['Аграфена'], ['Агриппина'], ['Ада'], ['Аделаида'], ['Аза'], ['Алевтина'], ['Александра'], ['Алина'], ['Алиса'], ['Алла'], ['Альбина'], ['Анастасия'], ['Ангелина'], ['Анисья'], ['Анна'], ['Антонида'], ['Антонина'], ['Анфиса'], ['Аполлинария'], ['Ариадна'], ['Беатриса'], ['Берта'], ['Борислава'], ['Бронислава'], ['Валентина'], ['Валерия'], ['Ванда'], ['Варвара'], ['Василиса'], ['Васса'], ['Вера'], ['Вероника'], ['Викторина'], ['Виктория'], ['Виргиния'], ['Влада'], ['Владилена'], ['Владлена'], ['Владислава'], ['Власта'], ['Всеслава'], ['Галина'], ['Галя'], ['Ганна'], ['Генриетта'], ['Глафира'], ['Горислава'], ['Дарья'], ['Диана'], ['Дина'], ['Доминика'], ['Домна'], ['Ева'], ['Евгеиня'], ['Евдокия'], ['Евлампия'], ['Екатерина'], ['Елена'], ['Елизавета'], ['Ефросинья'], ['Жанна'], ['Зинаида'], ['Злата'], ['Изабелла'], ['Изольда'], ['Инга'], ['Инесса'], ['Инна'], ['Ираида'], ['Ирина'], ['Ия'], ['Казимира'], ['Калерия'], ['Капитолина'], ['Каролина'], ['Кира'], ['Клавдия'], ['Клара'], ['Кларисса'], ['Клементина'], ['Клеопатра'], ['Конкордия'], ['Ксения'], ['Лада'], ['Лариса'], ['Леокадия'], ['Лиана'], ['Лидия'], ['Лилиана'], ['Клеопатра'], ['Конкордия'], ['Ксения'], ['Лада'], ['Лариса'], ['Леокадия'], ['Лиана'], ['Лидия'], ['Лилиана'], ['Лилия'], ['Лия'], ['Луиза'], ['Лукерья'], ['Любава'], ['Любомила'], ['Любомира'], ['Людмила'], ['Майя'], ['Мальвина'], ['Маргарита'], ['Марианна'], ['Мариетта'], ['Марина'], ['Мария'], ['Марта'], ['Марфа'], ['Меланья'], ['Мелитриса'], ['Милана'], ['Милена'], ['Милица'], ['Мира'], ['Мирослава'], ['Млада'], ['Мстислава'], ['Муза'], ['Надежда'], ['Наталья'], ['Наталия'], ['Неонила'], ['Ника'], ['Нина'], ['Нона'], ['Оксана'], ['Октябрина'], ['Олимпиада'], ['Ольга'], ['Пелагея'], ['Поликсена'], ['Полина'], ['Прасковья'], ['Пульхерия'], ['Рада'], ['Раиса'], ['Регина'], ['Рената'], ['Римма'], ['Рогнеда'], ['Роза'], ['Розалия'], ['Розина'], ['Ростислава'], ['Руфина'], ['Светлана'], ['Серафима'], ['Сильва'], ['Сильвия'], ['Саломея'], ['Софья'], ['Станислава'], ['Стела'], ['Степанида'], ['Сусанна'], ['Таисия'], ['Тамара'], ['Татьяна'], ['Ульяна'], ['Фаина'], ['Федосья'], ['Фелицата'], ['Флора'], ['Флорентина'], ['Фатина'], ['Харитина'], ['Христина'], ['Эвелина'], ['Элеонора'], ['Эльвира'], ['Эмилия'], ['Эмма'], ['Юлия'], ['Ядвига'], ['Ярослава'] - ]; - } -} diff --git a/tests/RussianLastNamesDeclensionTest.php b/tests/RussianLastNamesDeclensionTest.php deleted file mode 100644 index 48ba9a3..0000000 --- a/tests/RussianLastNamesDeclensionTest.php +++ /dev/null @@ -1,55 +0,0 @@ -declension = new RussianLastNamesDeclension(); - } - - /** - * @dataProvider lastNamesProvider - */ - public function testHasForms($name, $gender) { - $this->assertTrue($this->declension->hasForms($name, $gender)); - } - - /** - * @dataProvider lastNamesProvider - */ - public function testGetForms($name, $gender, $name2, $name3, $name4, $name5, $name6) { - $forms = $this->declension->getForms($name, $gender); - $this->assertEquals(array( - Cases::IMENIT => $name, - Cases::RODIT => $name2, - Cases::DAT => $name3, - Cases::VINIT => $name4, - Cases::TVORIT => $name5, - Cases::PREDLOJ => $name6 - ), $forms); - } - - public function lastNamesProvider() { - return array( - array('Смирнов', Declension::MAN, 'Смирнова', 'Смирнову', 'Смирнова', 'Смирновым', 'о Смирнове'), - array('Кромской', Declension::MAN, 'Кромского', 'Кромскому', 'Кромского', 'Кромским', 'о Кромском'), - array('Смирнова', Declension::WOMAN, 'Смирновой', 'Смирновой', 'Смирнову', 'Смирновой', 'о Смирновой'), - array('Кромская', Declension::WOMAN, 'Кромской', 'Кромской', 'Кромскую', 'Кромской', 'о Кромской'), - array('Зима', Declension::WOMAN, 'Зимы', 'Зиме', 'Зиму', 'Зимой', 'о Зиме'), - array('Зоя', Declension::WOMAN, 'Зои', 'Зое', 'Зою', 'Зоей', 'о Зое'), - array('Ус', Declension::MAN, 'Уса', 'Усу', 'Уса', 'Усом', 'об Усе'), - array('Кузьмич', Declension::MAN, 'Кузьмича', 'Кузьмичу', 'Кузьмича', 'Кузьмичом', 'о Кузьмиче'), - array('Берг', Declension::MAN, 'Берга', 'Бергу', 'Берга', 'Бергом', 'о Берге'), - array('Медведь', Declension::MAN, 'Медведя', 'Медведю', 'Медведя', 'Медведем', 'о Медведе'), - array('Суздаль', Declension::MAN, 'Суздаля', 'Суздалю', 'Суздаля', 'Суздалем', 'о Суздале'), - array('Тронь', Declension::MAN, 'Троня', 'Троню', 'Троня', 'Тронем', 'о Троне'), - ); - } - -} diff --git a/tests/english_plurality_basic.phpt b/tests/english_plurality_basic.phpt deleted file mode 100644 index 445f52c..0000000 --- a/tests/english_plurality_basic.phpt +++ /dev/null @@ -1,74 +0,0 @@ ---TEST-- -test for general plurality. ---FILE-- -pluralize('ship', 2)."\n"; -echo $plu->pluralize('gun', 2)."\n"; -echo $plu->pluralize('boy', 2)."\n"; -echo $plu->pluralize('class', 2)."\n"; -echo $plu->pluralize('box', 2)."\n"; -echo $plu->pluralize('torpedo', 2)."\n"; -echo $plu->pluralize('army', 2)."\n"; -echo $plu->pluralize('navy', 2)."\n"; -echo $plu->pluralize('wolf', 2)."\n"; -echo $plu->pluralize('knife', 2)."\n"; -echo $plu->pluralize('chief', 2)."\n"; -echo $plu->pluralize('basis', 2)."\n"; -echo $plu->pluralize('crisis', 2)."\n"; -echo $plu->pluralize('radius', 2)."\n"; -echo $plu->pluralize('nucleus', 2)."\n"; -echo $plu->pluralize('curriculum', 2)."\n"; -echo $plu->pluralize('man', 2)."\n"; -echo $plu->pluralize('woman', 2)."\n"; -echo $plu->pluralize('child', 2)."\n"; -echo $plu->pluralize('foot', 2)."\n"; -echo $plu->pluralize('tooth', 2)."\n"; -echo $plu->pluralize('ox', 2)."\n"; -echo $plu->pluralize('goose', 2)."\n"; -echo $plu->pluralize('mouse', 2)."\n"; -echo $plu->pluralize('schoolboy', 2)."\n"; -echo $plu->pluralize('knowledge', 2)."\n"; -echo $plu->pluralize('progress', 2)."\n"; -echo $plu->pluralize('advise', 2)."\n"; -echo $plu->pluralize('ink', 2)."\n"; -echo $plu->pluralize('money', 2)."\n"; -echo $plu->pluralize('scissors', 2)."\n"; -echo $plu->pluralize('spectacles', 2)."\n"; -echo $plu->pluralize('trousers', 2)."\n"; -?> ---EXPECT-- -ships -guns -boys -classes -boxes -torpedoes -armies -navies -wolves -knives -chiefs -bases -crises -radii -nuclei -curricula -men -women -children -feet -teeth -oxen -geese -mice -schoolboys -knowledge -progress -advise -ink -money -scissors -spectacles -trousers diff --git a/tests/russian_general_declension_basic.phpt b/tests/russian_general_declension_basic.phpt deleted file mode 100644 index 274f7ef..0000000 --- a/tests/russian_general_declension_basic.phpt +++ /dev/null @@ -1,47 +0,0 @@ ---TEST-- -test for russian general declension. ---FILE-- -getDeclension('дом')); -var_dump(implode(', ', $dec->getForms('дом'))); -var_dump(implode(', ', $dec->pluralizeAllDeclensions('дом'))); -echo "\n"; -var_dump($dec->getDeclension('поле')); -var_dump(implode(', ', $dec->getForms('поле'))); -var_dump(implode(', ', $dec->pluralizeAllDeclensions('поле'))); -echo "\n"; -var_dump($dec->getDeclension('гвоздь')); -var_dump(implode(', ', $dec->getForms('гвоздь'))); -var_dump(implode(', ', $dec->pluralizeAllDeclensions('гвоздь'))); -echo "\n"; -var_dump($dec->getDeclension('гений')); -var_dump(implode(', ', $dec->getForms('гений', true))); -var_dump(implode(', ', $dec->pluralizeAllDeclensions('гений', true))); -echo "\n"; -var_dump($dec->getDeclension('молния')); -var_dump(implode(', ', $dec->getForms('молния'))); -var_dump(implode(', ', $dec->pluralizeAllDeclensions('молния'))); -?> ---EXPECT-- -int(1) -string(56) "дом, дома, дому, дом, домом, доме" -string(68) "дома, домов, домам, дома, домами, домах" - -int(1) -string(60) "поле, поля, полю, поле, полем, поле" -string(68) "поля, полей, полям, поля, полями, полях" - -int(1) -string(84) "гвоздь, гвоздя, гвоздю, гвоздь, гвоздем, гвозде" -string(92) "гвоздя, гвоздей, гвоздям, гвоздя, гвоздями, гвоздях" - -int(1) -string(72) "гений, гения, гению, гения, гением, гении" -string(82) "гения, гениев, гениям, гениев, гениями, гениях" - -int(2) -string(84) "молния, молнии, молние, молнию, молнией, молние" -string(92) "молния, молнией, молниям, молния, молниями, молниях" diff --git a/tests/russian_names_getform_advanced.phpt b/tests/russian_names_getform_advanced.phpt deleted file mode 100644 index bf3710c..0000000 --- a/tests/russian_names_getform_advanced.phpt +++ /dev/null @@ -1,10 +0,0 @@ ---TEST-- -test for russian names declension. Part: getForm() method. ---FILE-- -getForm('Сергей', morphos\RussianCases::DAT_3, morphos\RussianNamesDeclension::MAN)); -?> ---EXPECT-- -string(12) "Сергею" diff --git a/tests/russian_names_getforms_basic.phpt b/tests/russian_names_getforms_basic.phpt deleted file mode 100644 index 8d0ce66..0000000 --- a/tests/russian_names_getforms_basic.phpt +++ /dev/null @@ -1,179 +0,0 @@ ---TEST-- -test for russian names declension. Part: getForms() method. ---FILE-- -getForms('Иван', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Святослав', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Тимур', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Рем', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Казбич', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Игорь', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Виль', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Рауль', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Шамиль', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Петрусь', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Абай', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Федяй', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Андрей', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Гарей', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Джансуй', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Ной', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Дмитрий', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Гордий', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Пий', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Геннадий', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Хаджибий', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Никита', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Данила', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Эйса', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Кузьма', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Мустафа', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Байхужа', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Хасанша', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Карча', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Гыкга', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Бетикка', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Анания', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Неемия', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Малахия', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Осия', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Иеремия', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Илия', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Данило', morphos\RussianNamesDeclension::MAN))); -var_dump(implode(', ', $dec->getForms('Иванко', morphos\RussianNamesDeclension::MAN))); -echo "\n"; -echo 'Woman'."\n"; -var_dump(implode(', ', $dec->getForms('Анна', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Эра', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Асма', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Хафиза', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Ольга', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Моника', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Голиндуха', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Снежа', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Гайша', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Милица', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Ляуца', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Куаца', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Олеся', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Дарья', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Майя', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Моя', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Пелагея', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Марция', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Наталия', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Армения', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Лия', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Ия', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Любовь', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Эсфирь', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Нинель', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Айгюль', morphos\RussianNamesDeclension::WOMAN))); -echo "\n"; -var_dump(implode(', ', $dec->getForms('Вартануш', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Катиш', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Хуж', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Гуащ', morphos\RussianNamesDeclension::WOMAN))); -var_dump(implode(', ', $dec->getForms('Карач', morphos\RussianNamesDeclension::WOMAN))); - -?> ---EXPECT-- -string(75) "Иван, Ивана, Ивану, Ивана, Иваном, об Иване" -string(133) "Святослав, Святослава, Святославу, Святослава, Святославом, о Святославе" -string(85) "Тимур, Тимура, Тимуру, Тимура, Тимуром, о Тимуре" -string(61) "Рем, Рема, Рему, Рема, Ремом, о Реме" -string(97) "Казбич, Казбича, Казбичу, Казбича, Казбичем, о Казбиче" -string(77) "Игорь, Игоря, Игорю, Игоря, Игорем, об Игоре" -string(63) "Виль, Виля, Вилю, Виля, Вилем, о Виле" -string(75) "Рауль, Рауля, Раулю, Рауля, Раулем, о Рауле" -string(87) "Шамиль, Шамиля, Шамилю, Шамиля, Шамилем, о Шамиле" -string(99) "Петрусь, Петруся, Петрусю, Петруся, Петрусем, о Петрусе" - -string(65) "Абай, Абая, Абаю, Абая, Абаем, об Абае" -string(75) "Федяй, Федяя, Федяю, Федяя, Федяем, о Федяе" -string(89) "Андрей, Андрея, Андрею, Андрея, Андреем, об Андрее" -string(75) "Гарей, Гарея, Гарею, Гарея, Гареем, о Гарее" -string(99) "Джансуй, Джансуя, Джансую, Джансуя, Джансуем, о Джансуе" -string(51) "Ной, Ноя, Ною, Ноя, Ноем, о Ное" - -string(99) "Дмитрий, Дмитрия, Дмитрию, Дмитрия, Дмитрием, о Дмитрии" -string(87) "Гордий, Гордия, Гордию, Гордия, Гордием, о Гордии" -string(51) "Пий, Пия, Пию, Пия, Пием, о Пии" -string(111) "Геннадий, Геннадия, Геннадию, Геннадия, Геннадием, о Геннадии" -string(111) "Хаджибий, Хаджибия, Хаджибию, Хаджибия, Хаджибием, о Хаджибии" - -string(87) "Никита, Никиты, Никите, Никиту, Никитой, о Никите" -string(87) "Данила, Данилы, Даниле, Данилу, Данилой, о Даниле" -string(65) "Эйса, Эйсы, Эйсе, Эйсу, Эйсой, об Эйсе" -string(87) "Кузьма, Кузьмы, Кузьме, Кузьму, Кузьмой, о Кузьме" -string(99) "Мустафа, Мустафы, Мустафе, Мустафу, Мустафой, о Мустафе" - -string(99) "Байхужа, Байхужи, Байхуже, Байхужу, Байхужой, о Байхуже" -string(99) "Хасанша, Хасанши, Хасанше, Хасаншу, Хасаншой, о Хасанше" -string(75) "Карча, Карчи, Карче, Карчу, Карчой, о Карче" -string(75) "Гыкга, Гыкги, Гыкге, Гыкгу, Гыкгой, о Гыкге" -string(99) "Бетикка, Бетикки, Бетикке, Бетикку, Бетиккой, о Бетикке" - -string(89) "Анания, Анании, Анании, Ананию, Ананией, об Анании" -string(87) "Неемия, Неемии, Неемии, Неемию, Неемией, о Неемии" -string(99) "Малахия, Малахии, Малахии, Малахию, Малахией, о Малахии" -string(65) "Осия, Осии, Осии, Осию, Осией, об Осии" -string(101) "Иеремия, Иеремии, Иеремии, Иеремию, Иеремией, об Иеремии" -string(65) "Илия, Илии, Илии, Илию, Илией, об Илии" - -string(87) "Данило, Данилы, Даниле, Данилу, Данилой, о Даниле" -string(89) "Иванко, Иванки, Иванке, Иванку, Иванкой, об Иванке" - -Woman -string(65) "Анна, Анны, Анне, Анну, Анной, об Анне" -string(53) "Эра, Эры, Эре, Эру, Эрой, об Эре" -string(65) "Асма, Асмы, Асме, Асму, Асмой, об Асме" -string(87) "Хафиза, Хафизы, Хафизе, Хафизу, Хафизой, о Хафизе" - -string(77) "Ольга, Ольги, Ольге, Ольгу, Ольгой, об Ольге" -string(87) "Моника, Моники, Монике, Монику, Моникой, о Монике" -string(123) "Голиндуха, Голиндухи, Голиндухе, Голиндуху, Голиндухой, о Голиндухе" -string(75) "Снежа, Снежи, Снеже, Снежу, Снежой, о Снеже" -string(75) "Гайша, Гайши, Гайше, Гайшу, Гайшой, о Гайше" - -string(87) "Милица, Милицы, Милице, Милицу, Милицей, о Милице" -string(75) "Ляуца, Ляуцы, Ляуце, Ляуцу, Ляуцей, о Ляуце" -string(75) "Куаца, Куацы, Куаце, Куацу, Куацей, о Куаце" - -string(77) "Олеся, Олеси, Олесе, Олесю, Олесей, об Олесе" -string(75) "Дарья, Дарьи, Дарье, Дарью, Дарьей, о Дарье" -string(63) "Майя, Майи, Майе, Майю, Майей, о Майе" -string(51) "Моя, Мои, Мое, Мою, Моей, о Мое" -string(99) "Пелагея, Пелагеи, Пелагее, Пелагею, Пелагеей, о Пелагее" - -string(87) "Марция, Марции, Марции, Марцию, Марцией, о Марции" -string(99) "Наталия, Наталии, Наталии, Наталию, Наталией, о Наталии" -string(101) "Армения, Армении, Армении, Армению, Арменией, об Армении" - -string(51) "Лия, Лии, Лии, Лию, Лией, о Лии" -string(41) "Ия, Ии, Ии, Ию, Ией, об Ии" - -string(87) "Любовь, Любови, Любови, Любовь, Любовью, о Любови" -string(89) "Эсфирь, Эсфири, Эсфири, Эсфирь, Эсфирью, об Эсфири" -string(87) "Нинель, Нинели, Нинели, Нинель, Нинелью, о Нинели" -string(89) "Айгюль, Айгюли, Айгюли, Айгюль, Айгюлью, об Айгюли" - -string(119) "Вартануш, Вартануши, Вартануши, Вартануш, Вартанушью, о Вартануши" -string(83) "Катиш, Катиши, Катиши, Катиш, Катишью, о Катиши" -string(59) "Хуж, Хужи, Хужи, Хуж, Хужью, о Хужи" -string(71) "Гуащ, Гуащи, Гуащи, Гуащ, Гуащью, о Гуащи" -string(83) "Карач, Карачи, Карачи, Карач, Карачью, о Карачи" diff --git a/tests/russian_names_hasforms_basic.phpt b/tests/russian_names_hasforms_basic.phpt deleted file mode 100644 index 12ce16b..0000000 --- a/tests/russian_names_hasforms_basic.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -test for russian names declension. Part: hasForms() method. ---FILE-- -hasForms('Иван', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Игорь', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Андрей', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Фома', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Никита', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Илья', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Анна', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Наталья', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Виринея', morphos\RussianNamesDeclension::WOMAN)); - -// foreign names -echo 'Foreign names'."\n"; -var_dump($dec->hasForms('Айдын', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Наиль', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Тукай', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Мустафа', morphos\RussianNamesDeclension::MAN)); -var_dump($dec->hasForms('Нафиса', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Асия', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Лючия', morphos\RussianNamesDeclension::WOMAN)); -?> ---EXPECT-- -Russian names -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -Foreign names -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) -bool(true) diff --git a/tests/russian_names_hasforms_error.phpt b/tests/russian_names_hasforms_error.phpt deleted file mode 100644 index d0543d9..0000000 --- a/tests/russian_names_hasforms_error.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -test for errors in russian names declension. Part: hasForms() method. Errors. ---FILE-- -hasForms('Тореро', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Айбу', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Хосе', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Каншау', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Франсуа', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Тойбухаа', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Качаа', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Зиа', morphos\RussianNamesDeclension::WOMAN)); -var_dump($dec->hasForms('Хожулаа', morphos\RussianNamesDeclension::WOMAN)); -?> ---EXPECT-- -Foreign names w/o forms -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) -bool(false) diff --git a/tests/russian_plularize_basic.phpt b/tests/russian_plularize_basic.phpt deleted file mode 100644 index bec3acc..0000000 --- a/tests/russian_plularize_basic.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -test for russian pluralization. ---FILE-- -pluralize('дом', $i)."\n"; -?> ---EXPECT-- -дом -дома -дома -дома -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -домов -дом -дома -дома -дома -домов