FirstNamesInflecionTest.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  1. <?php
  2. namespace morphos\test\Russian;
  3. use morphos\Gender;
  4. use morphos\NamesInflection;
  5. use morphos\Russian\Cases;
  6. use morphos\Russian\FirstNamesInflection;
  7. use PHPUnit\Framework\TestCase;
  8. class FirstNamesInflecionTest extends TestCase
  9. {
  10. /**
  11. * @dataProvider allMenNamesProvider
  12. */
  13. public function testMutableMen($name)
  14. {
  15. $this->assertTrue(FirstNamesInflection::isMutable($name, FirstNamesInflection::MALE));
  16. }
  17. /**
  18. * @dataProvider allWomenNamesProvider
  19. */
  20. public function testMutableWomen($name)
  21. {
  22. $this->assertTrue(FirstNamesInflection::isMutable($name, FirstNamesInflection::FEMALE));
  23. }
  24. public function allMenNamesProvider()
  25. {
  26. return [
  27. ['Август'],
  28. ['Авдей'],
  29. ['Аверкий'],
  30. ['Аверьян'],
  31. ['Авксентий'],
  32. ['Автоном'],
  33. ['Агап'],
  34. ['Агафон'],
  35. ['Аггей'],
  36. ['Адам'],
  37. ['Адриан и Андриян'],
  38. ['Азарий'],
  39. ['Аким'],
  40. ['Александр'],
  41. ['Алексей'],
  42. ['Амвросий'],
  43. ['Амос'],
  44. ['Ананий'],
  45. ['Анатолий'],
  46. ['Андрей'],
  47. ['Андрон'],
  48. ['Андроник'],
  49. ['Аникей'],
  50. ['Аникита'],
  51. ['Анисим и Онисим'],
  52. ['Антип'],
  53. ['Антонин'],
  54. ['Аполлинарий'],
  55. ['Аполлон'],
  56. ['Арефий'],
  57. ['Аристарх'],
  58. ['Аркадий'],
  59. ['Арсений'],
  60. ['Артемий'],
  61. ['Артем'],
  62. ['Архип'],
  63. ['Аскольд'],
  64. ['Афанасий'],
  65. ['Афиноген'],
  66. ['Бажен'],
  67. ['Богдан'],
  68. ['Болеслав'],
  69. ['Борис'],
  70. ['Борислав'],
  71. ['Боян'],
  72. ['Бронислав'],
  73. ['Будимир'],
  74. ['Вадим'],
  75. ['Валентин'],
  76. ['Валерий'],
  77. ['Валерьян'],
  78. ['Варлаам'],
  79. ['Варфоломей'],
  80. ['Василий'],
  81. ['Вацлав'],
  82. ['Велимир'],
  83. ['Венедикт'],
  84. ['Вениамин'],
  85. ['Викентий'],
  86. ['Виктор'],
  87. ['Викторин'],
  88. ['Виссарион'],
  89. ['Виталий'],
  90. ['Владилен'],
  91. ['Владлен'],
  92. ['Владимир'],
  93. ['Владислав'],
  94. ['Влас'],
  95. ['Всеволод'],
  96. ['Всемил'],
  97. ['Всеслав'],
  98. ['Вышеслав'],
  99. ['Вячеслав'],
  100. ['Гаврила и Гавриил'],
  101. ['Галактион'],
  102. ['Гедеон'],
  103. ['Геннадий'],
  104. ['Георгий'],
  105. ['Герасим'],
  106. ['Герман'],
  107. ['Глеб'],
  108. ['Гордей'],
  109. ['Гостомысл'],
  110. ['Гремислав'],
  111. ['Григорий'],
  112. ['Гурий'],
  113. ['Давыд и Давид'],
  114. ['Данила и Даниил'],
  115. ['Дементий'],
  116. ['Демид'],
  117. ['Демьян'],
  118. ['Денис'],
  119. ['Дмитрий'],
  120. ['Добромысл'],
  121. ['Доброслав'],
  122. ['Дорофей'],
  123. ['Евгений'],
  124. ['Евграф'],
  125. ['Евдоким'],
  126. ['Евлампий'],
  127. ['Евсей'],
  128. ['Евстафий'],
  129. ['Евстигней'],
  130. ['Егор'],
  131. ['Елизар'],
  132. ['Елисей'],
  133. ['Емельян'],
  134. ['Епифан'],
  135. ['Еремей'],
  136. ['Ермил'],
  137. ['Ермолай'],
  138. ['Ерофей'],
  139. ['Ефим'],
  140. ['Ефрем'],
  141. ['Захар'],
  142. ['Зиновий'],
  143. ['Иван'],
  144. ['Игнатий'],
  145. ['Игорь'],
  146. ['Измаил'],
  147. ['Изот'],
  148. ['Изяслав'],
  149. ['Иларион'],
  150. ['Илья'],
  151. ['Иннокентий'],
  152. ['Иосиф'],
  153. ['Осип'],
  154. ['Ипат'],
  155. ['Ипатий'],
  156. ['Ипполит'],
  157. ['Ираклий'],
  158. ['Исай'],
  159. ['Исидор'],
  160. ['Казимир'],
  161. ['Каллистрат'],
  162. ['Капитон'],
  163. ['Карл'],
  164. ['Карп'],
  165. ['Касьян'],
  166. ['Ким'],
  167. ['Кир'],
  168. ['Кирилл'],
  169. ['Клавдий'],
  170. ['Климент'],
  171. ['Клементий'],
  172. ['Клим'],
  173. ['Кондрат'],
  174. ['Кондратий'],
  175. ['Конон'],
  176. ['Константин'],
  177. ['Корнил'],
  178. ['Корней'],
  179. ['Корнилий'],
  180. ['Кузьма'],
  181. ['Куприян'],
  182. ['Лавр'],
  183. ['Лаврентий'],
  184. ['Ладимир'],
  185. ['Ладислав'],
  186. ['Лазарь'],
  187. ['Лев'],
  188. ['Леон'],
  189. ['Леонид'],
  190. ['Леонтий'],
  191. ['Лонгин'],
  192. ['Лука'],
  193. ['Лукьян'],
  194. ['Лучезар'],
  195. ['Любим'],
  196. ['Любомир'],
  197. ['Любосмысл'],
  198. ['Макар'],
  199. ['Максим'],
  200. ['Максимильян'],
  201. ['Мариан'],
  202. ['Марк'],
  203. ['Мартын'],
  204. ['Мартьян'],
  205. ['Матвей'],
  206. ['Мефодий'],
  207. ['Мечислав'],
  208. ['Милан'],
  209. ['Милен'],
  210. ['Милий'],
  211. ['Милован'], /*['Мина'],*/ ['Мир'],
  212. ['Мирон'],
  213. ['Мирослав'],
  214. ['Митофан'],
  215. ['Михаил'],
  216. ['Михей'],
  217. ['Модест'],
  218. ['Моисей'],
  219. ['Мокей'],
  220. ['Мстислав'],
  221. ['Назар'],
  222. ['Наркис'],
  223. ['Натан'],
  224. ['Наум'],
  225. ['Нестор'],
  226. ['Никандр'],
  227. ['Никанор'],
  228. ['Никита'],
  229. ['Никифор'],
  230. ['Никодим'],
  231. ['Николай'],
  232. ['Никон'],
  233. ['Нифонт'],
  234. ['Олег'],
  235. ['Олимпий'],
  236. ['Онуфрий'],
  237. ['Орест'],
  238. ['Остап'],
  239. ['Остромир'],
  240. ['Павел'],
  241. ['Панкратий'],
  242. ['Панкрат'],
  243. ['Пантелеймон'],
  244. ['Панфил'],
  245. ['Парамон'],
  246. ['Парфен'],
  247. ['Пахом'],
  248. ['Петр'],
  249. ['Пимен'],
  250. ['Платон'],
  251. ['Поликарп'],
  252. ['Порфирий'],
  253. ['Потап'],
  254. ['Пров'],
  255. ['Прокл'],
  256. ['Прокофий'],
  257. ['Прохор'],
  258. ['Радим'],
  259. ['Радислав'],
  260. ['Радован'],
  261. ['Ратибор'],
  262. ['Ратмир'],
  263. ['Родион'],
  264. ['Роман'],
  265. ['Ростислав'],
  266. ['Рубен'],
  267. ['Руслан'],
  268. ['Рюрик'],
  269. ['Савва'],
  270. ['Савватий'],
  271. ['Савелий'],
  272. ['Самсон'],
  273. ['Самуил'],
  274. ['Светозар'],
  275. ['Святополк'],
  276. ['Святослав'],
  277. ['Севастьян'],
  278. ['Селиван'],
  279. ['Селиверст'],
  280. ['Семен'],
  281. ['Серафим'],
  282. ['Сергей'],
  283. ['Сигизмунд'],
  284. ['Сидор'],
  285. ['Силантий'],
  286. ['Сильвестр'],
  287. ['Симон'],
  288. ['Сократ'],
  289. ['Соломон'],
  290. ['Софон'],
  291. ['Софрон'],
  292. ['Спартак'],
  293. ['Спиридон'],
  294. ['Станимир'],
  295. ['Станислав'],
  296. ['Степан'],
  297. ['Стоян'],
  298. ['Тарас'],
  299. ['Твердислав'],
  300. ['Творимир'],
  301. ['Терентий'],
  302. ['Тимофей'],
  303. ['Тимур'],
  304. ['Тит'],
  305. ['Тихон'],
  306. ['Трифон'],
  307. ['Трофим'],
  308. ['Ульян'],
  309. ['Устин'],
  310. ['Фадей'],
  311. ['Федор'],
  312. ['Федосий'],
  313. ['Федот'],
  314. ['Феликс'],
  315. ['Феоктист'],
  316. ['Феофан'],
  317. ['Ферапонт'],
  318. ['Филарет'],
  319. ['Филимон'],
  320. ['Филипп'],
  321. ['Фирс'],
  322. ['Флорентин'],
  323. ['Фока'],
  324. ['Фома'],
  325. ['Фортунат'],
  326. ['Фотий'],
  327. ['Фрол'],
  328. ['Харитон'],
  329. ['Харлампий'],
  330. ['Христофор'],
  331. ['Чеслав'],
  332. ['Эдуард'],
  333. ['Эммануил'],
  334. ['Эраст'],
  335. ['Эрнест'],
  336. ['Эрнст'],
  337. ['Ювеналий'],
  338. ['Юлиан'],
  339. ['Юлий'],
  340. ['Юрий'],
  341. ['Яков'],
  342. ['Ян'],
  343. ['Якуб'],
  344. ['Януарий'],
  345. ['Ярополк'],
  346. ['Ярослав'],
  347. ];
  348. }
  349. public function allWomenNamesProvider()
  350. {
  351. return [
  352. ['Августа'],
  353. ['Агата'],
  354. ['Агафья'],
  355. ['Агнесса'],
  356. ['Агния'],
  357. ['Аграфена'],
  358. ['Агриппина'],
  359. ['Ада'],
  360. ['Аделаида'],
  361. ['Аза'],
  362. ['Алевтина'],
  363. ['Александра'],
  364. ['Алина'],
  365. ['Алиса'],
  366. ['Алла'],
  367. ['Альбина'],
  368. ['Анастасия'],
  369. ['Ангелина'],
  370. ['Анисья'],
  371. ['Анна'],
  372. ['Антонида'],
  373. ['Антонина'],
  374. ['Анфиса'],
  375. ['Аполлинария'],
  376. ['Ариадна'],
  377. ['Беатриса'],
  378. ['Берта'],
  379. ['Борислава'],
  380. ['Бронислава'],
  381. ['Валентина'],
  382. ['Валерия'],
  383. ['Ванда'],
  384. ['Варвара'],
  385. ['Василиса'],
  386. ['Васса'],
  387. ['Вера'],
  388. ['Вероника'],
  389. ['Викторина'],
  390. ['Виктория'],
  391. ['Виргиния'],
  392. ['Влада'],
  393. ['Владилена'],
  394. ['Владлена'],
  395. ['Владислава'],
  396. ['Власта'],
  397. ['Всеслава'],
  398. ['Галина'],
  399. ['Галя'],
  400. ['Ганна'],
  401. ['Генриетта'],
  402. ['Глафира'],
  403. ['Горислава'],
  404. ['Дарья'],
  405. ['Диана'],
  406. ['Дина'],
  407. ['Доминика'],
  408. ['Домна'],
  409. ['Ева'],
  410. ['Евгеиня'],
  411. ['Евдокия'],
  412. ['Евлампия'],
  413. ['Екатерина'],
  414. ['Елена'],
  415. ['Елизавета'],
  416. ['Ефросинья'],
  417. ['Жанна'],
  418. ['Зинаида'],
  419. ['Злата'],
  420. ['Изабелла'],
  421. ['Изольда'],
  422. ['Инга'],
  423. ['Инесса'],
  424. ['Инна'],
  425. ['Ираида'],
  426. ['Ирина'],
  427. ['Ия'],
  428. ['Казимира'],
  429. ['Калерия'],
  430. ['Капитолина'],
  431. ['Каролина'],
  432. ['Кира'],
  433. ['Клавдия'],
  434. ['Клара'],
  435. ['Кларисса'],
  436. ['Клементина'],
  437. ['Клеопатра'],
  438. ['Конкордия'],
  439. ['Ксения'],
  440. ['Лада'],
  441. ['Лариса'],
  442. ['Леокадия'],
  443. ['Лиана'],
  444. ['Лидия'],
  445. ['Лилиана'],
  446. ['Клеопатра'],
  447. ['Конкордия'],
  448. ['Ксения'],
  449. ['Лада'],
  450. ['Лариса'],
  451. ['Леокадия'],
  452. ['Лиана'],
  453. ['Лидия'],
  454. ['Лилиана'],
  455. ['Лилия'],
  456. ['Лия'],
  457. ['Луиза'],
  458. ['Лукерья'],
  459. ['Любава'],
  460. ['Любомила'],
  461. ['Любомира'],
  462. ['Людмила'],
  463. ['Майя'],
  464. ['Мальвина'],
  465. ['Маргарита'],
  466. ['Марианна'],
  467. ['Мариетта'],
  468. ['Марина'],
  469. ['Мария'],
  470. ['Марта'],
  471. ['Марфа'],
  472. ['Меланья'],
  473. ['Мелитриса'],
  474. ['Милана'],
  475. ['Милена'],
  476. ['Милица'],
  477. ['Мира'],
  478. ['Мирослава'],
  479. ['Млада'],
  480. ['Мстислава'],
  481. ['Муза'],
  482. ['Надежда'],
  483. ['Наталья'],
  484. ['Наталия'],
  485. ['Неонила'],
  486. ['Ника'],
  487. ['Нина'],
  488. ['Нона'],
  489. ['Оксана'],
  490. ['Октябрина'],
  491. ['Олимпиада'],
  492. ['Ольга'],
  493. ['Пелагея'],
  494. ['Поликсена'],
  495. ['Полина'],
  496. ['Прасковья'],
  497. ['Пульхерия'],
  498. ['Рада'],
  499. ['Раиса'],
  500. ['Регина'],
  501. ['Рената'],
  502. ['Римма'],
  503. ['Рогнеда'],
  504. ['Роза'],
  505. ['Розалия'],
  506. ['Розина'],
  507. ['Ростислава'],
  508. ['Руфина'],
  509. ['Светлана'],
  510. ['Серафима'],
  511. ['Сильва'],
  512. ['Сильвия'],
  513. ['Саломея'],
  514. ['Софья'],
  515. ['Станислава'],
  516. ['Стела'],
  517. ['Степанида'],
  518. ['Сусанна'],
  519. ['Таисия'],
  520. ['Тамара'],
  521. ['Татьяна'],
  522. ['Ульяна'],
  523. ['Фаина'],
  524. ['Федосья'],
  525. ['Фелицата'],
  526. ['Флора'],
  527. ['Флорентина'],
  528. ['Фатина'],
  529. ['Харитина'],
  530. ['Христина'],
  531. ['Эвелина'],
  532. ['Элеонора'],
  533. ['Эльвира'],
  534. ['Эмилия'],
  535. ['Эмма'],
  536. ['Юлия'],
  537. ['Ядвига'],
  538. ['Ярослава'],
  539. ];
  540. }
  541. /**
  542. * @dataProvider menNamesProvider()
  543. */
  544. public function testInflectionForMen($name, $name2, $name3, $name4, $name5, $name6)
  545. {
  546. $this->assertEquals([
  547. Cases::IMENIT => $name,
  548. Cases::RODIT => $name2,
  549. Cases::DAT => $name3,
  550. Cases::VINIT => $name4,
  551. Cases::TVORIT => $name5,
  552. Cases::PREDLOJ => $name6,
  553. ], FirstNamesInflection::getCases($name, FirstNamesInflection::MALE));
  554. }
  555. /**
  556. * @dataProvider womenNamesProvider()
  557. */
  558. public function testInflectionForWomen($name, $name2, $name3, $name4, $name5, $name6)
  559. {
  560. $this->assertEquals([
  561. Cases::IMENIT => $name,
  562. Cases::RODIT => $name2,
  563. Cases::DAT => $name3,
  564. Cases::VINIT => $name4,
  565. Cases::TVORIT => $name5,
  566. Cases::PREDLOJ => $name6,
  567. ], FirstNamesInflection::getCases($name, FirstNamesInflection::FEMALE));
  568. }
  569. public function menNamesProvider()
  570. {
  571. return [
  572. ['Иван', 'Ивана', 'Ивану', 'Ивана', 'Иваном', 'Иване'],
  573. ['Святослав', 'Святослава', 'Святославу', 'Святослава', 'Святославом', 'Святославе'],
  574. ['Тимур', 'Тимура', 'Тимуру', 'Тимура', 'Тимуром', 'Тимуре'],
  575. ['Рем', 'Рема', 'Рему', 'Рема', 'Ремом', 'Реме'],
  576. ['Казбич', 'Казбича', 'Казбичу', 'Казбича', 'Казбичем', 'Казбиче'],
  577. ['Игорь', 'Игоря', 'Игорю', 'Игоря', 'Игорем', 'Игоре'],
  578. ['Виль', 'Виля', 'Вилю', 'Виля', 'Вилем', 'Виле'],
  579. ['Рауль', 'Рауля', 'Раулю', 'Рауля', 'Раулем', 'Рауле'],
  580. ['Шамиль', 'Шамиля', 'Шамилю', 'Шамиля', 'Шамилем', 'Шамиле'],
  581. ['Петрусь', 'Петруся', 'Петрусю', 'Петруся', 'Петрусем', 'Петрусе'],
  582. ['Абай', 'Абая', 'Абаю', 'Абая', 'Абаем', 'Абае'],
  583. ['Федяй', 'Федяя', 'Федяю', 'Федяя', 'Федяем', 'Федяе'],
  584. ['Андрей', 'Андрея', 'Андрею', 'Андрея', 'Андреем', 'Андрее'],
  585. ['Гарей', 'Гарея', 'Гарею', 'Гарея', 'Гареем', 'Гарее'],
  586. ['Джансуй', 'Джансуя', 'Джансую', 'Джансуя', 'Джансуем', 'Джансуе'],
  587. ['Ной', 'Ноя', 'Ною', 'Ноя', 'Ноем', 'Ное'],
  588. ['Дмитрий', 'Дмитрия', 'Дмитрию', 'Дмитрия', 'Дмитрием', 'Дмитрии'],
  589. ['Гордий', 'Гордия', 'Гордию', 'Гордия', 'Гордием', 'Гордии'],
  590. ['Пий', 'Пия', 'Пию', 'Пия', 'Пием', 'Пии'],
  591. ['Геннадий', 'Геннадия', 'Геннадию', 'Геннадия', 'Геннадием', 'Геннадии'],
  592. ['Хаджибий', 'Хаджибия', 'Хаджибию', 'Хаджибия', 'Хаджибием', 'Хаджибии'],
  593. ['Никита', 'Никиты', 'Никите', 'Никиту', 'Никитой', 'Никите'],
  594. ['Данила', 'Данилы', 'Даниле', 'Данилу', 'Данилой', 'Даниле'],
  595. ['Эйса', 'Эйсы', 'Эйсе', 'Эйсу', 'Эйсой', 'Эйсе'],
  596. ['Кузьма', 'Кузьмы', 'Кузьме', 'Кузьму', 'Кузьмой', 'Кузьме'],
  597. ['Мустафа', 'Мустафы', 'Мустафе', 'Мустафу', 'Мустафой', 'Мустафе'],
  598. ['Байхужа', 'Байхужи', 'Байхуже', 'Байхужу', 'Байхужой', 'Байхуже'],
  599. // ['Хасанша', 'Хасанши', 'Хасанше', 'Хасаншу', 'Хасаншой', 'Хасанше'],
  600. ['Карча', 'Карчи', 'Карче', 'Карчу', 'Карчой', 'Карче'],
  601. ['Гыкга', 'Гыкги', 'Гыкге', 'Гыкгу', 'Гыкгой', 'Гыкге'],
  602. ['Бетикка', 'Бетикки', 'Бетикке', 'Бетикку', 'Бетиккой', 'Бетикке'],
  603. ['Анания', 'Анании', 'Анании', 'Ананию', 'Ананией', 'Анании'],
  604. ['Неемия', 'Неемии', 'Неемии', 'Неемию', 'Неемией', 'Неемии'],
  605. ['Малахия', 'Малахии', 'Малахии', 'Малахию', 'Малахией', 'Малахии'],
  606. ['Осия', 'Осии', 'Осии', 'Осию', 'Осией', 'Осии'],
  607. ['Иеремия', 'Иеремии', 'Иеремии', 'Иеремию', 'Иеремией', 'Иеремии'],
  608. ['Илия', 'Илии', 'Илии', 'Илию', 'Илией', 'Илии'],
  609. ['Данило', 'Данилы', 'Даниле', 'Данилу', 'Данилой', 'Даниле'],
  610. ['Иванко', 'Иванки', 'Иванке', 'Иванку', 'Иванкой', 'Иванке'],
  611. ['Слава', 'Славы', 'Славе', 'Славу', 'Славой', 'Славе'],
  612. ['Сергей', 'Сергея', 'Сергею', 'Сергея', 'Сергеем', 'Сергее'],
  613. ['Илья', 'Ильи', 'Илье', 'Илью', 'Ильей', 'Илье'],
  614. ['Санек', 'Санька', 'Саньку', 'Санька', 'Саньком', 'Саньке'],
  615. ['Витёк', 'Витька', 'Витьку', 'Витька', 'Витьком', 'Витьке'],
  616. ['Салмонбек', 'Салмонбека', 'Салмонбеку', 'Салмонбека', 'Салмонбеком', 'Салмонбеке'],
  617. ['Саша', 'Саши', 'Саше', 'Сашу', 'Сашей', 'Саше'],
  618. ];
  619. }
  620. public function womenNamesProvider()
  621. {
  622. return [
  623. ['Анна', 'Анны', 'Анне', 'Анну', 'Анной', 'Анне'],
  624. ['Эра', 'Эры', 'Эре', 'Эру', 'Эрой', 'Эре'],
  625. ['Асма', 'Асмы', 'Асме', 'Асму', 'Асмой', 'Асме'],
  626. ['Хафиза', 'Хафизы', 'Хафизе', 'Хафизу', 'Хафизой', 'Хафизе'],
  627. ['Ольга', 'Ольги', 'Ольге', 'Ольгу', 'Ольгой', 'Ольге'],
  628. ['Моника', 'Моники', 'Монике', 'Монику', 'Моникой', 'Монике'],
  629. ['Голиндуха', 'Голиндухи', 'Голиндухе', 'Голиндуху', 'Голиндухой', 'Голиндухе'],
  630. ['Снежа', 'Снежи', 'Снеже', 'Снежу', 'Снежой', 'Снеже'],
  631. ['Гайша', 'Гайши', 'Гайше', 'Гайшу', 'Гайшой', 'Гайше'],
  632. ['Милица', 'Милицы', 'Милице', 'Милицу', 'Милицей', 'Милице'],
  633. ['Ляуца', 'Ляуцы', 'Ляуце', 'Ляуцу', 'Ляуцей', 'Ляуце'],
  634. ['Куаца', 'Куацы', 'Куаце', 'Куацу', 'Куацей', 'Куаце'],
  635. ['Олеся', 'Олеси', 'Олесе', 'Олесю', 'Олесей', 'Олесе'],
  636. ['Дарья', 'Дарьи', 'Дарье', 'Дарью', 'Дарьей', 'Дарье'],
  637. ['Майя', 'Майи', 'Майе', 'Майю', 'Майей', 'Майе'],
  638. ['Моя', 'Мои', 'Мое', 'Мою', 'Моей', 'Мое'],
  639. ['Пелагея', 'Пелагеи', 'Пелагее', 'Пелагею', 'Пелагеей', 'Пелагее'],
  640. ['Марция', 'Марции', 'Марции', 'Марцию', 'Марцией', 'Марции'],
  641. ['Наталия', 'Наталии', 'Наталии', 'Наталию', 'Наталией', 'Наталии'],
  642. ['Армения', 'Армении', 'Армении', 'Армению', 'Арменией', 'Армении'],
  643. ['Лия', 'Лии', 'Лии', 'Лию', 'Лией', 'Лии'],
  644. ['Ия', 'Ии', 'Ии', 'Ию', 'Ией', 'Ии'],
  645. ['Любовь', 'Любови', 'Любови', 'Любовь', 'Любовью', 'Любови'],
  646. ['Эсфирь', 'Эсфири', 'Эсфири', 'Эсфирь', 'Эсфирью', 'Эсфири'],
  647. ['Нинель', 'Нинели', 'Нинели', 'Нинель', 'Нинелью', 'Нинели'],
  648. ['Айгюль', 'Айгюли', 'Айгюли', 'Айгюль', 'Айгюлью', 'Айгюли'],
  649. ['Вартануш', 'Вартануши', 'Вартануши', 'Вартануш', 'Вартанушью', 'Вартануши'],
  650. ['Катиш', 'Катиши', 'Катиши', 'Катиш', 'Катишью', 'Катиши'],
  651. ['Хуж', 'Хужи', 'Хужи', 'Хуж', 'Хужью', 'Хужи'],
  652. ['Гуащ', 'Гуащи', 'Гуащи', 'Гуащ', 'Гуащью', 'Гуащи'],
  653. ['Карач', 'Карачи', 'Карачи', 'Карач', 'Карачью', 'Карачи'],
  654. ['Мария', 'Марии', 'Марии', 'Марию', 'Марией', 'Марии'],
  655. ['Дарья', 'Дарьи', 'Дарье', 'Дарью', 'Дарьей', 'Дарье'],
  656. // ['Манижа', 'Манижы', 'Маниже', 'Манижу', 'Манижей', 'Маниже'],
  657. ];
  658. }
  659. /**
  660. * @dataProvider immutableNamesProvider()
  661. */
  662. public function testImmutableNames($name, $gender)
  663. {
  664. $this->assertFalse(FirstNamesInflection::isMutable($name, $gender));
  665. }
  666. public function immutableNamesProvider()
  667. {
  668. return [
  669. ['Тореро', FirstNamesInflection::FEMALE],
  670. ['Айбу', FirstNamesInflection::FEMALE],
  671. ['Хосе', FirstNamesInflection::FEMALE],
  672. ['Каншау', FirstNamesInflection::FEMALE],
  673. ['Франсуа', FirstNamesInflection::FEMALE],
  674. ['Тойбухаа', FirstNamesInflection::FEMALE],
  675. ['Качаа', FirstNamesInflection::FEMALE],
  676. ['Зиа', FirstNamesInflection::FEMALE],
  677. ['Хожулаа', FirstNamesInflection::FEMALE],
  678. ['Бетси', FirstNamesInflection::FEMALE],
  679. ['Элли', FirstNamesInflection::FEMALE],
  680. ['Энджи', FirstNamesInflection::FEMALE],
  681. ['Мэри', FirstNamesInflection::FEMALE],
  682. ['Сью', FirstNamesInflection::FEMALE],
  683. ['Маро', FirstNamesInflection::FEMALE],
  684. ['Розмари', FirstNamesInflection::FEMALE],
  685. ['Алсу', FirstNamesInflection::FEMALE],
  686. ['Суок', FirstNamesInflection::FEMALE],
  687. ['Сольвейг', FirstNamesInflection::FEMALE],
  688. ['Гретхен', FirstNamesInflection::FEMALE],
  689. ['Ирэн', FirstNamesInflection::FEMALE],
  690. ['Элен', FirstNamesInflection::FEMALE],
  691. ['Элис', FirstNamesInflection::FEMALE],
  692. ['Аннет', FirstNamesInflection::FEMALE],
  693. ['Джейн', FirstNamesInflection::FEMALE],
  694. ['Катрин', FirstNamesInflection::FEMALE],
  695. ['Эстер', FirstNamesInflection::FEMALE],
  696. ['Акмарал', FirstNamesInflection::FEMALE],
  697. ['Русудан', FirstNamesInflection::FEMALE],
  698. ['Шушаник', FirstNamesInflection::FEMALE],
  699. ['Алтын', FirstNamesInflection::FEMALE],
  700. ['Гульназ', FirstNamesInflection::FEMALE],
  701. ['Эрли', FirstNamesInflection::MALE],
  702. ['Анри', FirstNamesInflection::MALE],
  703. ['Низами', FirstNamesInflection::MALE],
  704. ['Оли', FirstNamesInflection::MALE],
  705. ['Ли', FirstNamesInflection::MALE],
  706. ['Рево', FirstNamesInflection::MALE],
  707. ['Ромео', FirstNamesInflection::MALE],
  708. ['Отто', FirstNamesInflection::MALE],
  709. ['Педро', FirstNamesInflection::MALE],
  710. ['Лео', FirstNamesInflection::MALE],
  711. ['Антонио', FirstNamesInflection::MALE],
  712. ['Микеле', FirstNamesInflection::MALE],
  713. ['Андрэ', FirstNamesInflection::MALE],
  714. ['Хью', FirstNamesInflection::MALE],
  715. ['Ру', FirstNamesInflection::MALE],
  716. ['Киану', FirstNamesInflection::MALE],
  717. ['Грегори', FirstNamesInflection::MALE],
  718. ['Гиви', FirstNamesInflection::MALE],
  719. ['Франсуа', FirstNamesInflection::MALE],
  720. ];
  721. }
  722. /**
  723. * @dataProvider mutableNamesProvider()
  724. */
  725. public function testMutableNames($name, $gender)
  726. {
  727. $this->assertTrue(FirstNamesInflection::isMutable($name, $gender));
  728. }
  729. /**
  730. * @dataProvider allMenNamesProvider()
  731. */
  732. public function testDetectGenderMen($name)
  733. {
  734. $result = FirstNamesInflection::detectGender($name);
  735. if ($result !== null) {
  736. $this->assertEquals(NamesInflection::MALE, $result, 'Name ' . $name);
  737. } else {
  738. $this->assertEquals(NamesInflection::MALE, null, 'Name ' . $name);
  739. }
  740. }
  741. /**
  742. * @dataProvider allWomenNamesProvider()
  743. */
  744. public function testDetectGenderWomen($name)
  745. {
  746. $result = FirstNamesInflection::detectGender($name);
  747. if ($result !== null) {
  748. $this->assertEquals(NamesInflection::FEMALE, $result, 'Name ' . $name);
  749. } else {
  750. $this->assertEquals(NamesInflection::FEMALE, null, 'Name ' . $name);
  751. }
  752. }
  753. public function mutableNamesProvider()
  754. {
  755. return [
  756. ['Иван', FirstNamesInflection::MALE],
  757. ['Игорь', FirstNamesInflection::MALE],
  758. ['Андрей', FirstNamesInflection::MALE],
  759. ['Фома', FirstNamesInflection::MALE],
  760. ['Никита', FirstNamesInflection::MALE],
  761. ['Илья', FirstNamesInflection::MALE],
  762. ['Анна', FirstNamesInflection::FEMALE],
  763. ['Наталья', FirstNamesInflection::FEMALE],
  764. ['Виринея', FirstNamesInflection::FEMALE],
  765. // foreign names
  766. ['Айдын', FirstNamesInflection::MALE],
  767. ['Наиль', FirstNamesInflection::MALE],
  768. ['Тукай', FirstNamesInflection::MALE],
  769. ['Мустафа', FirstNamesInflection::MALE],
  770. ['Нафиса', FirstNamesInflection::FEMALE],
  771. ['Асия', FirstNamesInflection::FEMALE],
  772. ['Лючия', FirstNamesInflection::FEMALE],
  773. ];
  774. }
  775. /**
  776. * @dataProvider menNamesProvider()
  777. */
  778. public function testGetCase($name, $case2)
  779. {
  780. $this->assertEquals($case2, FirstNamesInflection::getCase($name, Cases::RODIT, Gender::MALE));
  781. }
  782. }