Модуль:uk-pron/testcases

Матеріал з Вікісловника
Перейти до навігації Перейти до пошуку

Документацію для цього модуля можна створити у Модуль:uk-pron/testcases/документація

local tests = require('Модуль:UnitTests')
local m_pron = require('Модуль:uk-pron')

local Ukrainian = require("Модуль:languages-data").getByCode("uk")
local Cyrillic = require("Модуль:scripts").getByCode("Cyrl")

local function tag_IPA(IPA)
	return '<span class="IPA">' .. IPA .. '</span>'
end

function tests:check_pronunc(uk, ipa)
	self:equals(require("Модуль:links").full_link{ term = uk, lang = Ukrainian, sc = Cyrillic }, m_pron.pronunciation(uk), ipa, { display = tag_IPA })
end

function tests:check_pronunc_noaccent(uk, ipa)
	self:equals(require("Модуль:links").full_link{ term = uk, lang = Ukrainian, sc = Cyrillic }, m_pron.pronunciation(uk, "1"), ipa, { display = tag_IPA })
end

function tests:test_pronunciation_secondary_stress()
	self:check_pronunc("а̀віаполі́т", "ˌɑʋʲiɐpoˈlʲit")	
	self:check_pronunc("нѐйробіоло́гія", "ˌnɛi̯rɔbʲiɔˈɫɔɦʲijɐ")
end	

function tests:test_pronunciation_monosyllabic()
	self:check_pronunc("бік", "bʲik")	
	self:check_pronunc("нема́ за́ що", "neˈmɑ ˈzɑ ʃt͡ʃɔ")
end	

function tests:test_pronunciation_allophones_e_i()
	self:check_pronunc("мене́", "meˈnɛ")
	self:check_pronunc("мине́", "meˈnɛ")
end

function tests:test_pronunciation_allophones_j()
	self:check_pronunc("хай", "xɑi̯")
	self:check_pronunc("зна́йте", "ˈznɑi̯te")
	self:check_pronunc("ча́йка", "ˈt͡ʃɑi̯kɐ")
	self:check_pronunc("мій", "mʲii̯")
	self:check_pronunc("йня́ти", "ˈi̯nʲɑte")
	self:check_pronunc("йод", "jɔd")
	self:check_pronunc("моя́", "mɔˈjɑ")
	self:check_pronunc("мою́", "mɔˈju")
	self:check_pronunc("моє́", "mɔˈjɛ")
	self:check_pronunc("мої́", "mɔˈji")
end

function tests:test_pronunciation_allophones_v()
	self:check_pronunc("мав", "mɑu̯")
	self:check_pronunc("був", "buu̯")
	self:check_pronunc("ма́впа", "ˈmɑu̯pɐ")
	self:check_pronunc("шовк", "ʃɔu̯k")
	self:check_pronunc("вниз", "wnɪz")
	self:check_pronunc("вона́", "wɔˈnɑ")
	self:check_pronunc("ву́хо", "ˈwuxɔ")
	self:check_pronunc("впе́рше", "ˈʍpɛrʃe")
	self:check_pronunc("він", "ʋʲin")
end

function tests:test_pronunciation_voicing_slovnik_no10()
	self:check_pronunc("відділи́ти", "ʋʲidʲːiˈɫɪtɪ")
	self:check_pronunc("надті́сувати", "nɐdʲˈtʲisʊʋɐtɪ")
end

function tests:test_pronunciation_voicing_slovnik_no6()
	self:check_pronunc("боротьба́", "bɔrɔdʲˈbɑ")
end

function tests:test_pronunciation_assimilations_slovnik()
	self:check_pronunc("ви́рісши", "ˈʋɪrʲiʃːɪ")
	self:check_pronunc("ви́візши", "ˈʋɪʋʲiʒʃɪ")
	self:check_pronunc("зши́ти", "ˈʃːɪtɪ")
	self:check_pronunc("зжо́вкнути", "ˈʒːɔu̯knʊtɪ")
	self:check_pronunc("безжа́лісний", "beˈʒːɑlʲisnɪi̯")
	self:check_pronunc("безче́сний", "beʒˈt͡ʃɛsnɪi̯")
	self:check_pronunc("зчи́стити", "ˈʃt͡ʃɪstetɪ")
end
	
function tests:test_pronunciation_assimilations_norm()
	self:check_pronunc("відсі́ль", "ʋʲid͡zʲˈsʲilʲ")
	self:check_pronunc("два́дцять", "ˈdʋɑd͡zʲt͡sʲɐtʲ")
	self:check_pronunc("ро́биться", "ˈrɔbet͡sʲːɐ")
	self:check_pronunc("кори́тця", "kɔˈrɪt͡sʲːɐ")
end

function tests:test_pronunciation_phonetic_lengthened_consonants()
	self:check_pronunc("знання́", "znɐˈnʲːɑ")
	self:check_pronunc("рілля́", "rʲiˈlʲːɑ")
	self:check_pronunc("ті́нню", "ˈtʲinʲːʊ")
	self:check_pronunc("ллю", "lʲːu")
	self:check_pronunc("обби́ти", "ɔˈbːɪte")
	self:check_pronunc("зако́нний", "zɐˈkɔnːei̯")
	self:check_pronunc("вітчи́зна", "ʋʲiˈt͡ʃːɪznɐ")
	self:check_pronunc("болі́тце", "boˈlʲit͡sːe")
	self:check_pronunc("ви́нісши", "ˈʋɪnʲiʃːɪ")
	self:check_pronunc("зжува́ти", "ʒːʊˈʋɑtɪ")
	self:check_pronunc("бере́шся", "beˈrɛsʲːɐ")
	self:check_pronunc("бері́ться", "beˈrʲit͡sʲːɐ")
end

function tests:test_pronunciation_phonetic_simplification()
	self:check_pronunc("студе́нтський", "stʊˈdɛnʲsʲkɪi̯")
	self:check_pronunc("тури́стський", "tʊˈrɪsʲkɪi̯")
	self:check_pronunc("аге́нтство", "ɐˈɦɛnstwɔ")
	self:check_pronunc("солі́стці", "soˈlʲisʲt͡sʲ(ː)i")
	self:check_pronunc("шістдеся́т", "ʃʲizdeˈsʲɑt")
	self:check_pronunc("шістсо́т", "ʃʲiˈsːɔt")
end

function tests:test_pronunciation_phonetic_consonant_assimilations_Pugh_p36_37_38()
	self:check_pronunc("кни́жка", "ˈknɪʒkɐ")
	self:check_pronunc("кни́жці", "ˈknɪzʲt͡sʲi")
	self:check_pronunc("дочка́", "dɔt͡ʃˈkɑ")
	self:check_pronunc("дочці́", "dɔˈt͡sʲːi")
	self:check_pronunc("чита́єш", "t͡ʃeˈtɑjeʃ")
	self:check_pronunc("сміє́шся", "sʲmʲiˈjɛsʲːɐ")
	self:check_pronunc("до́шка", "ˈdɔʃkɐ")
	self:check_pronunc("до́шці", "ˈdɔsʲt͡sʲi")
	self:check_pronunc("безжа́лісний", "beˈʒːɑlʲisnɪi̯")
	self:check_pronunc("підрі́сши", "pʲiˈdʲrʲiʃːɪ")
	self:check_pronunc("кімна́тці", "kʲimˈnɑt͡sʲːi")
	self:check_pronunc("крава́тці", "krɐˈʋɑt͡sʲːi")
	self:check_pronunc("неві́стці", "neˈʋʲisʲt͡sʲ(ː)i")
	self:check_pronunc("борі́дці", "boˈrʲid͡zʲt͡sʲi")
	self:check_pronunc("лю́дський", "ˈlʲud͡zʲsʲkɪi̯")
	-- Pugh p. 37 claims that it should be sɔlˈdɑt͡sʲsʲkɪj, but Орфоепскі словник p. 97 claims otherwise
	self:check_pronunc("солда́тський", "sɔɫˈdɑt͡sʲkɪi̯")
end

function tests:test_pronunciation_phonetic_apostrophe_Pugh_p32()
	self:check_pronunc("від'ї́зд", "ʋʲiˈdjizd")
	self:check_pronunc("п'ю", "pju")
	self:check_pronunc("ф'ю́кати", "ˈfjukɐtɪ")
	self:check_pronunc("об'є́кт", "ɔˈbjɛkt")
	self:check_pronunc("п'ять", "pjɑtʲ")
	self:check_pronunc("здоро́в'я", "zdɔˈrɔʋjɐ")
	self:check_pronunc("м'яки́й", "mjɐˈkɪi̯")
end

function tests:test_pronunciation_phonetic_Pugh_p29_p30()
	self:check_pronunc("ти", "tɪ")
	self:check_pronunc("ті", "tʲi")
	self:check_pronunc("дя́кую", "ˈdʲɑkʊjʊ")
	self:check_pronunc("сад", "sɑd")
	self:check_pronunc("сядь", "sʲɑdʲ")
	self:check_pronunc("пала́ц", "pɐˈɫɑt͡s")
	self:check_pronunc("хло́пець", "ˈxɫɔpet͡sʲ")
	self:check_pronunc("дзвін", "d͡zʲʋʲin")
	self:check_pronunc("дзво́на", "ˈd͡zwɔnɐ")
	self:check_pronunc("ра́са", "ˈrɑsɐ")
	self:check_pronunc("ря́са", "ˈrʲɑsɐ")
	self:check_pronunc("бі́лий", "ˈbʲiɫɪi̯")
	self:check_pronunc("вів", "ʋʲiu̯")
	self:check_pronunc("кінь", "kʲinʲ")
	self:check_pronunc("шість", "ʃʲisʲtʲ")
	self:check_pronunc("ножі́", "noˈʒʲi")
	self:check_pronunc("уночі́", "ʊnoˈt͡ʃʲi")
	self:check_pronunc("мі́сті", "ˈmʲisʲtʲi")
	self:check_pronunc("одні́й", "odʲˈnʲii̯")
	self:check_pronunc("сніг", "sʲnʲiɦ")
	self:check_pronunc("люблю́", "lʲʊˈblʲu")
	self:check_pronunc("коно́плі", "kɔˈnɔplʲi")
	self:check_pronunc("графля́ть", "ɦrɐˈflʲɑtʲ")
	self:check_pronunc("ко́рмлять", "ˈkɔrmlʲɐtʲ")
end

-- If a vowel, an apostrophe, or nothing precedes я, є, ю, then they represent [j] + [ɑ, ɛ, u]. 
function tests:test_pronunciation_phonetic_ja_je_ju()
	self:check_pronunc("а́я", "ˈɑjɐ")
	self:check_pronunc("ея́", "eˈjɑ")
	self:check_pronunc("і́я", "ˈijɐ")
	self:check_pronunc("ия́", "eˈjɑ")
	self:check_pronunc("о́я", "ˈɔjɐ")
	self:check_pronunc("уя́", "ʊˈjɑ")
	self:check_pronunc("а́є", "ˈɑje")
	self:check_pronunc("еє́", "eˈjɛ")
	self:check_pronunc("і́є", "ˈije")
	self:check_pronunc("иє́", "eˈjɛ")
	self:check_pronunc("о́є", "ˈɔje")
	self:check_pronunc("ую́", "ʊˈju")
	self:check_pronunc("а́ю", "ˈɑjʊ")
	self:check_pronunc("ею́", "eˈju")
	self:check_pronunc("і́ю", "ˈijʊ")
	self:check_pronunc("ию́", "eˈju")
	self:check_pronunc("о́ю", "ˈɔjʊ")
	self:check_pronunc("ую́", "ʊˈju")
	self:check_pronunc_noaccent("'я", "jɐ")
	self:check_pronunc_noaccent("'є", "je")
	self:check_pronunc_noaccent("'ю", "jʊ")
	self:check_pronunc_noaccent("я", "jɐ")
	self:check_pronunc_noaccent("є", "je")
	self:check_pronunc_noaccent("ю", "jʊ")
end

-- phonemic and subphonemic weak palatalization.
function tests:test_pronunciation_phonetic_softening_ja_je_ji_ju()
	-- first 12 subphonemic: б п в ф м к г х ж ш ч щ дж ждж
	self:check_pronunc("б", "b")
	self:check_pronunc_noaccent("бі", "bʲi")
	self:check_pronunc_noaccent("бя", "bʲɐ")
	self:check_pronunc_noaccent("бє", "bʲe")
	self:check_pronunc_noaccent("бю", "bʲʊ")
	self:check_pronunc("п", "p")
	self:check_pronunc_noaccent("пі", "pʲi")
	self:check_pronunc_noaccent("пя", "pʲɐ")
	self:check_pronunc_noaccent("пє", "pʲe")
	self:check_pronunc_noaccent("пю", "pʲʊ")
	self:check_pronunc("в", "ʋ")
	self:check_pronunc_noaccent("ві", "ʋʲi")
	self:check_pronunc_noaccent("вя", "ʋʲɐ")
	self:check_pronunc_noaccent("вє", "ʋʲe")
	self:check_pronunc_noaccent("вю", "ʋʲʊ")
	self:check_pronunc("ф", "f")
	self:check_pronunc_noaccent("фі", "fʲi")
	self:check_pronunc_noaccent("фя", "fʲɐ")
	self:check_pronunc_noaccent("фє", "fʲe")
	self:check_pronunc_noaccent("фю", "fʲʊ")
	self:check_pronunc("м", "m")
	self:check_pronunc_noaccent("мі", "mʲi")
	self:check_pronunc_noaccent("мя", "mʲɐ")
	self:check_pronunc_noaccent("мє", "mʲe")
	self:check_pronunc_noaccent("мю", "mʲʊ")
	self:check_pronunc("к", "k")
	self:check_pronunc_noaccent("кі", "kʲi")
	self:check_pronunc_noaccent("кя", "kʲɐ")
	self:check_pronunc_noaccent("кє", "kʲe")
	self:check_pronunc_noaccent("кю", "kʲʊ")
	self:check_pronunc("г", "ɦ")
	self:check_pronunc_noaccent("гі", "ɦʲi")
	self:check_pronunc_noaccent("гя", "ɦʲɐ")
	self:check_pronunc_noaccent("гє", "ɦʲe")
	self:check_pronunc_noaccent("гю", "ɦʲʊ")
	self:check_pronunc("х", "x")
	self:check_pronunc_noaccent("хі", "xʲi")
	self:check_pronunc_noaccent("хя", "xʲɐ")
	self:check_pronunc_noaccent("хє", "xʲe")
	self:check_pronunc_noaccent("хю", "xʲʊ")
	self:check_pronunc("ж", "ʒ")
	self:check_pronunc_noaccent("жі", "ʒʲi")
	self:check_pronunc_noaccent("жя", "ʒʲɐ")
	self:check_pronunc_noaccent("жє", "ʒʲe")
	self:check_pronunc_noaccent("жю", "ʒʲʊ")
	self:check_pronunc("ш", "ʃ")
	self:check_pronunc_noaccent("ші", "ʃʲi")
	self:check_pronunc_noaccent("шя", "ʃʲɐ")
	self:check_pronunc_noaccent("шє", "ʃʲe")
	self:check_pronunc_noaccent("шю", "ʃʲʊ")
	self:check_pronunc("ч", "t͡ʃ")
	self:check_pronunc_noaccent("чі", "t͡ʃʲi")
	self:check_pronunc_noaccent("чя", "t͡ʃʲɐ")
	self:check_pronunc_noaccent("чє", "t͡ʃʲe")
	self:check_pronunc_noaccent("чю", "t͡ʃʲʊ")
	self:check_pronunc("щ", "ʃt͡ʃ")
	self:check_pronunc_noaccent("щі", "ʃt͡ʃʲi")
	self:check_pronunc_noaccent("щя", "ʃt͡ʃʲɐ")
	self:check_pronunc_noaccent("щє", "ʃt͡ʃʲe")
	self:check_pronunc_noaccent("щю", "ʃt͡ʃʲʊ")
	self:check_pronunc("дж", "d͡ʒ")
	self:check_pronunc_noaccent("джі", "d͡ʒʲi")
	self:check_pronunc_noaccent("джя", "d͡ʒʲɐ")
	self:check_pronunc_noaccent("джє", "d͡ʒʲe")
	self:check_pronunc_noaccent("джю", "d͡ʒʲʊ")
	self:check_pronunc("ждж", "ʒd͡ʒ")
	self:check_pronunc_noaccent("жджі", "ʒd͡ʒʲi")
	self:check_pronunc_noaccent("жджя", "ʒd͡ʒʲɐ")
	self:check_pronunc_noaccent("жджє", "ʒd͡ʒʲe")
	self:check_pronunc_noaccent("жджю", "ʒd͡ʒʲʊ")
	---- 9 phonemic softenings: т д с з ц дз н л
	self:check_pronunc("т", "t")
	self:check_pronunc_noaccent("ті", "tʲi")
	self:check_pronunc_noaccent("тя", "tʲɐ")
	self:check_pronunc_noaccent("тє", "tʲe")
	self:check_pronunc_noaccent("тю", "tʲʊ")
	self:check_pronunc("д", "d")
	self:check_pronunc_noaccent("ді", "dʲi")
	self:check_pronunc_noaccent("дя", "dʲɐ")
	self:check_pronunc_noaccent("дє", "dʲe")
	self:check_pronunc_noaccent("дю", "dʲʊ")
	self:check_pronunc("с", "s")
	self:check_pronunc_noaccent("сі", "sʲi")
	self:check_pronunc_noaccent("ся", "sʲɐ")
	self:check_pronunc_noaccent("сє", "sʲe")
	self:check_pronunc_noaccent("сю", "sʲʊ")
	self:check_pronunc("з", "z")
	self:check_pronunc_noaccent("зі", "zʲi")
	self:check_pronunc_noaccent("зя", "zʲɐ")
	self:check_pronunc_noaccent("зє", "zʲe")
	self:check_pronunc_noaccent("зю", "zʲʊ")
	self:check_pronunc("ц", "t͡s")
	self:check_pronunc_noaccent("ці", "t͡sʲi")
	self:check_pronunc_noaccent("ця", "t͡sʲɐ")
	self:check_pronunc_noaccent("цє", "t͡sʲe")
	self:check_pronunc_noaccent("цю", "t͡sʲʊ")
	self:check_pronunc("дз", "d͡z")
	self:check_pronunc_noaccent("дзі", "d͡zʲi")
	self:check_pronunc_noaccent("дзя", "d͡zʲɐ")
	self:check_pronunc_noaccent("дзє", "d͡zʲe")
	self:check_pronunc_noaccent("дзю", "d͡zʲʊ")
	self:check_pronunc("н", "n")
	self:check_pronunc_noaccent("ні", "nʲi")
	self:check_pronunc_noaccent("ня", "nʲɐ")
	self:check_pronunc_noaccent("нє", "nʲe")
	self:check_pronunc_noaccent("ню", "nʲʊ")
	self:check_pronunc("л", "ɫ")
	self:check_pronunc_noaccent("лі", "lʲi")
	self:check_pronunc_noaccent("ля", "lʲɐ")
	self:check_pronunc_noaccent("лє", "lʲe")
	self:check_pronunc_noaccent("лю", "lʲʊ")
	self:check_pronunc("р", "r")
	self:check_pronunc_noaccent("рі", "rʲi")
	self:check_pronunc_noaccent("ря", "rʲɐ")
	self:check_pronunc_noaccent("рє", "rʲe")
	self:check_pronunc_noaccent("рю", "rʲʊ")
end

function tests:test_pronunciation_phonetic_hard_soft_sign()
	self:check_pronunc("т", "t")
	self:check_pronunc("ть", "tʲ")
	self:check_pronunc("д", "d")
	self:check_pronunc("дь", "dʲ")
	self:check_pronunc("с", "s")
	self:check_pronunc("сь", "sʲ")
	self:check_pronunc("з", "z")
	self:check_pronunc("зь", "zʲ")
	self:check_pronunc("ц", "t͡s")
	self:check_pronunc("ць", "t͡sʲ")
	self:check_pronunc("дз", "d͡z")
	self:check_pronunc("дзь", "d͡zʲ")
	self:check_pronunc("н", "n")
	self:check_pronunc("нь", "nʲ")
	self:check_pronunc("л", "ɫ")
	self:check_pronunc("ль", "lʲ")
	self:check_pronunc("п", "p")
	self:check_pronunc("пь", "pʲ")
end

function tests:test_pronunciation_phonetic_dual_pronunciation_prefix_bez_roz()
	self:check_pronunc("розписа́ти", "rɔzpeˈsɑtɪ")
	self:check_pronunc("росписа́ти", "rɔspeˈsɑtɪ")
	self:check_pronunc("безпла́тний", "bezˈpɫɑtnɪi̯")
	self:check_pronunc("беспла́тний", "beˈspɫɑtnɪi̯")
end

function tests:test_pronunciation_phonetic_assimilation_voiceless_voiced()
	self:check_pronunc("вокза́л", "wɔɡˈzɑɫ")
	self:check_pronunc("якби́", "jɐɡˈbɪ")
	self:check_pronunc("молотьба́", "mɔɫɔdʲˈbɑ")
	self:check_pronunc("анекдо́т", "ɐneɡˈdɔt")
	self:check_pronunc("при", "prɪ")
end
 
function tests:test_pronunciation_phonetic_basic()
	self:check_pronunc("ходжу́", "xoˈd͡ʒu")
	self:check_pronunc("джи́нси", "ˈd͡ʒɪnsɪ")
	self:check_pronunc("дзе́ркало", "ˈd͡zɛrkɐɫɔ")
	self:check_pronunc("дзво́ник", "ˈd͡zwɔnek")
	self:check_pronunc("дзьоб", "d͡zʲɔb")
	self:check_pronunc("агре́сія", "ɐˈɦrɛsʲijɐ")
	self:check_pronunc("шви́дше", "ˈʃʋɪd͡ʒʃe")
	self:check_pronunc("ї́жте", "ˈjiʒte")
	self:check_pronunc("ро́зталь", "ˈrɔztɐlʲ")
	self:check_pronunc("шви́дко", "ˈʃʋɪdkɔ")
	self:check_pronunc("ніж", "nʲiʒ")
	self:check_pronunc("ри́бка", "ˈrɪbkɐ")
	self:check_pronunc("ка́зка", "ˈkɑzkɐ")
	self:check_pronunc("ка́ска", "ˈkɑskɐ")
	self:check_pronunc("залюбки́", "zɐlʲʊbˈkɪ")
	self:check_pronunc("мед", "mɛd")
	-- must be rʲ, error in the book p. 26
	self:check_pronunc("скрізь", "skrʲizʲ")
	-- word-initial stressed vowel; formerly not handled correctly
	self:check_pronunc("О́сло", "ˈɔsɫɔ")
end

function tests:test_pronunciation_phonetic_diphonemic_dz_dzh_dsh_dch()
	self:check_pronunc("піджжива́ти", "pʲid͡ʒʒeˈʋɑtɪ")
	self:check_pronunc("віджжи́лий", "ʋʲid͡ʒˈʒɪɫɪi̯")
	self:check_pronunc("підззе́мний", "pʲid͡zˈzɛmnɪi̯")
	self:check_pronunc("підззира́ти", "pʲid͡zzeˈrɑtɪ")
	self:check_pronunc("відшу́кувати", "ʋʲid͡ʒˈʃukʊʋɐtɪ")
	self:check_pronunc("відчуття́", "ʋʲid͡ʒt͡ʃʊˈtʲːɑ")
	self:check_pronunc("відці́джувати", "ʋʲid͡zʲˈt͡sʲid͡ʒʊʋɐtɪ")
	self:check_pronunc("відцвіта́ти", "ʋʲid͡zt͡sʲʋʲiˈtɑtɪ")
end

function tests:test_pronunciation_multiword_expressions()
	-- initial stress in a medial word formerly not handled correctly
	self:check_pronunc("Сполу́чені Шта́ти Аме́рики", "spoˈɫut͡ʃenʲi ˈʃtɑtɪ ɐˈmɛrekɪ")
end

return tests