local tests = require("Module:UnitTests")
local m_pron = require("Module:User:Kiril kovachev/bg-pronunciation")
local Bulgarian = require("Module:languages").getByCode("bg")
local Cyrillic = require("Module:scripts").getByCode("Cyrl")
local function link(term)
return require("Module:links").full_link{ term = term, lang = Bulgarian, sc = Cyrillic, tr = "-" }
end
local function tag_IPA(IPA)
return '<span class="IPA">' .. IPA .. '</span>'
end
local function identity(x)
return x
end
local display_hyphenation = identity
local display_rhymes = tag_IPA
local display_syllabification = identity
function tests:check_output_ipa(term, expected, endschwa)
local normalized_term = m_pron.remove_pron_notations(term)
tests:equals(
link(normalized_term) ..
(term ~= normalized_term and " (respelled " .. term .. ")" or "") ..
(endschwa and ", endschwa=true" or ""),
m_pron.toIPA(term, endschwa),
expected,
{ display = tag_IPA }
)
end
function tests:check_output_rhymes(term, expected)
tests:equals(
tag_IPA(term),
m_pron.get_rhymes(term),
expected,
{ display = display_rhymes }
)
end
function tests:check_output_hyphenation(term, expected)
tests:equals(
link(term),
m_pron.hyphenate_total(term),
mw.ustring.gsub(expected, "", "‧"),
{ display = display_hyphenation }
)
end
function tests:check_output_syllabification(term, expected)
tests:equals(
link(term),
m_pron.syllabify(term),
mw.ustring.gsub(expected, "", "‧"),
{ display = display_syllabification }
)
end
function tests:test_ipa()
local list = {
{ "къ́ща", "ˈkɤʃtɐ" },
{ "сгъстя́ се", "zɡɐˈstʲɤ̟ sɛ", true },
{ "сгъстя̣́ се", "zɡɐˈstʲɤ̟ sɛ"},
{ "а̀бдики́ращ", "ˌabdiˈkirɐʃt" },
{ "безшу́мен", "bɛʃˈʃu̟mɛn" },
{ "щастли́в", "ʃtɐˈslif" },
{ "народността́", "nɐrodnoˈsta" },
{ "я", "ja̟" },
{ "юг", "ju̟k" },
{ "яйце́", "jɐjˈt͡sɛ" },
{ "учи́лище", "oˈt͡ʃiliʃtɛ" },
{ "чорбаджи́я", "t͡ʃo̟rbɐˈdʒijɐ" },
{ "уби́йца", "oˈbijt͡sɐ" },
{ "безбра́чие", "bɛzˈbrat͡ʃiɛ" },
{ "из.мра́", "izˈmra" },
{ "сала́та", "sɐˈɫatɐ" },
{ "шега́", "ʃɛˈɡa" },
{ "жена́", "ʒɛˈna" },
{ "инти́мен", "inˈtimɛn" },
{ "посо́лство", "poˈsɔɫstvo" },
{ "ъ́гъл", "ˈɤɡɐɫ"},
{ "усу́квам", "oˈsukvɐm"},
{ "ле́ща", "ˈlɛʃtɐ" },
{ "липа́", "liˈpa" },
{ "океа́н", "okɛˈan" },
{ "меки́ца", "mɛˈkit͡sɐ" },
{ "ла́гер", "ˈɫaɡɛr" },
{ "маги́я", "mɐˈɡijɐ" },
{ "хем", "xɛm" },
{ "химн", "ximn"},
{ "тулу́п", "toˈɫup"},
{ "жа̀р-пти́ца", "ˌʒa̟r-pˈtit͡sɐ" },
{ "в о́фис", "f ˈɔfis" },
{ "във Фра́нция", "vɐf ˈfrant͡sijɐ" },
{ "ня́колко", "ˈnʲa̟koɫko" },
{ "в Япо́ния", "f jɐˈpɔnijɐ" },
{ "автоплу́г", "ɐftoˈpɫuk" }, --ʊ in previous module
{ "ўе́бса́йт", "ˈwɛpˈsajt" },
{ "ўе́лски", "ˈwɛɫski" },
{ "ўе́стърн", "ˈwɛstɐrn" },
{ "О́ўен", "ˈɔwɛn" },
{ "но́ўхаў", "ˈnɔwxɐw" },
{ "Джо́ўзеф", "ˈdʒɔwzɛf" },
{ "бо́ўлинг", "ˈbɔwliŋk" },
{ "даўнло́ўд", "dɐwnˈɫɔwt" },
{ "ўи́ски", "ˈwiski" },
{ "ўи́кенд", "ˈwikɛnt" },
{ "Ўо́рўик", "ˈwɔrwik" },
{ "Хе́лоўин", "ˈxɛɫowin" },
}
--[[
Additions take this form –
{ "word with acutes", "IPA" },
{ "", "" },
Make sure to include the comma, or the module will return an error.
]]
self:iterate(list, "check_output_ipa")
end
function tests:test_hyphenation()
local list = {
{ "височина", "ви.со.чи.на" },
{ "сестра", "сес.тра" },
{ "пленник", "плен.ник" },
{ "преодолея", "пре.одо.лея" },
{ "маоизъм", "мао.изъм" },
{ "майка", "май.ка" },
{ "айс.берг", "айс.берг" },
{ "майор", "ма.йор" },
{ "фризьор", "фри.зьор" },
{ "суджук", "су.джук" },
{ "над.живея", "над.жи.вея" },
{ "сестра", "сес.тра" },
{ "потури", "по.ту.ри"},
{ "сланина", "сла.ни.на"},
{ "пража", "пра.жа"},
{ "спринцовка", "сприн.цов.ка"},
{ "пържа", "пър.жа"},
{ "яркост", "яр.кост"},
{ "рало", "ра.ло"},
{ "белило", "бе.ли.ло"},
{ "шевица", "ше.ви.ца"},
{ "доило", "до.ило"},
{ "начало", "на.ча.ло"},
{ "хитрост", "хит.рост"},
{ "хитър", "хи.тър"},
{ "шевица", "ше.ви.ца"},
{ "вдлъбна", "вдлъб.на"},
{ "размахам", "раз.ма.хам"},
{ "укор", "укор"},
{ "упорит", "упо.рит"},
{ "осем", "осем"},
{ "оценка", "оцен.ка"},
{ "лея", "лея"},
{ "аз", "аз"},
{ "тя", "тя"},
{ "е", "е"},
{ "мен", "мен"},
{ "страст", "страст"},
{ "пръст", "пръст"},
{ "шофьор", "шо.фьор" },
{ "фотьойл", "фо.тьойл" },
{ "бельо", "бе.льо" },
{ "шедьовър", "ше.дьо.вър" },
{ "мениджър", "ме.ни.джър" },
{ "джудже", "джу.дже" },
{ "жар-птица", "жар-пти.ца"},
{ "морално-нравствен", "мо.рал.но-нрав.ствен" },
{ "кандидат-студент", "кан.ди.дат-сту.дент" },
{ "министър-председател", "ми.нис.тър-пред.се.да.тел" },
{ "член-кореспондент", "член-ко.рес.пон.дент" },
{ "бизнес администрация", "биз.нес ад.ми.нис.тра‧ция" },
{ "екшън герой", "ек.шън ге.рой" },
{ "тенис корт", "те.нис корт" },
{ "заместник министър-председател", "за.мес.тник ми.нис.тър-пред.се.да.тел" },
{ "заместник началник-управление", "за.мес.тник на.чал.ник-уп.рав.ле.ние" },
{ "SIM карта", "SIM кар.та" },
{ "VIP зона", "VIP зо.на" }
}
--[[
Additions take this form –
{ "word (with no accent required)", "expected hyphenation" },
{ "", "" },
Make sure to include the comma, or the module will return an error.
]]
self:iterate(list, "check_output_hyphenation")
end
function tests:test_syllabification()
-- Left side of elements: input to the function, which may include dots (.) for manual syllable division
-- Right side of elements: expected output, with syllable breaks indicated with a dot
local list = {
-- 1. Single.letter words
{ "а", "а" },
{ "в", "в" },
{ "е", "е" },
{ "и", "и" },
{ "ѝ", "ѝ" },
{ "о", "о" },
{ "с", "с" },
{ "у", "у" },
-- 2. Simple monosyllabic words
{ "аз", "аз" },
{ "ти", "ти" },
{ "той", "той" },
{ "тя", "тя" },
{ "във", "във" },
{ "със", "със" },
-- 3. More complex monosyllabic words
{ "принц", "принц" },
{ "спринт", "спринт" },
{ "глист", "глист" },
{ "скункс", "скункс" },
-- 4. Single consonant between two vowels: 3-letter words
{ "ами", "а.ми" },
{ "ала", "а.ла" },
{ "ако", "а.ко" },
{ "уви", "у.ви" },
{ "или", "и.ли" },
-- 5. Single consonant between two vowels: stops and fricatives
{ "саламура", "са.ла.му.ра" },
{ "барабан", "ба.ра.бан" },
{ "сполука", "спо.лу.ка" },
{ "щавя", "ща.вя" },
{ "стрина", "стри.на" },
{ "когато", "ко.га.то" },
-- 6. Single consonant between two vowels: щ, and single-letter affricates
{ "старицата", "ста.ри.ца.та" },
{ "получените", "по.лу.че.ни.те" },
{ "подобаващите", "по.до.ба.ва.щи.те" },
{ "обучаващите", "о.бу.ча.ва.щи.те" },
-- 7. Single consonant between two vowels: дж
{ "джудже", "джу.дже" },
{ "суджук", "су.джук" },
{ "дамаджана", "да.ма.джа.на" },
{ "джаджите", "джа.джи.те" },
-- 8. Single consonant between two vowels: й
{ "койот", "ко.йот" },
{ "майонеза", "ма.йо.не.за" },
{ "пейоративен", "пе.йо.ра.ти.вен" },
{ "майор", "ма.йор" },
-- 9. Single consonant between two vowels: morphological prefixes get split
{ "безименен", "бе.зи.ме.нен" },
{ "изопачавам", "и.зо.па.ча.вам" },
{ "отивам", "о.ти.вам" },
{ "разоран", "ра.зо.ран" },
-- 10. Single consonant between two vowels: palatalized by ь
{ "бульон", "бу.льон" },
{ "фризьор", "фри.зьор" },
{ "шедьовър", "ше.дьо.вър" },
{ "гьозум", "гьо.зум" },
{ "ликьор", "ли.кьор" },
-- 11. Zero consonants between two vowels: at most one elsewhere in word
{ "воал", "во.ал" },
{ "маоизъм", "ма.о.и.зъм" },
{ "феерия", "фе.е.ри.я" },
{ "воайор", "во.а.йор" },
{ "миокард", "ми.о.кард" },
{ "кьопоолу", "кьо.по.о.лу" },
{ "аятолах", "а.я.то.лах" },
{ "авария", "а.ва.ри.я" },
{ "позиции", "по.зи.ци.и" },
{ "хазяи", "ха.зя.и" },
{ "дерибеи", "де.ри.бе.и" },
{ "преодолея", "пре.о.до.ле.я" },
-- 12. Two or more consonants between two vowels: щр
{ "нащрек", "на.щрек" },
{ "поощрявам", "по.о.щря.вам" },
{ "защриховам", "за.щри.хо.вам" },
{ "поощрителен", "по.о.щри.те.лен" },
{ "изщракване", "из.щрак.ва.не" },
{ "Вайерщрас", "Ва.йер.щрас" },
{ "Кьонигщрасе", "Кьо.ниг.щра.се" },
-- 13. Two or more consonants between two vowels: щ + other sonorant before vowel
{ "общност", "общ.ност" },
{ "всъщност", "всъщ.ност" },
{ "помощник", "по.мощ.ник" },
{ "чорапогащник", "чо.ра.по.гащ.ник" },
{ "нощница", "нощ.ни.ца" },
{ "чудовищност", "чу.до.вищ.ност" },
{ "немощливо", "не.мощ.ли.во" },
{ "съобщавам", "съ.об.ща.вам" },
{ "въобще", "въ.об.ще" },
-- 14. Two or more consonants between two vowels: дж affricate present
{ "манджа", "ман.джа" },
{ "калайджия", "ка.лай.джи.я" },
{ "авджия", "ав.джи.я" },
{ "изджвака", "из.джва.ка" },
-- 15. Two or more consonants between two vowels: adjacent sonorants or stops
{ "пленник", "плен.ник" },
{ "майка", "май.ка" },
{ "профашистки", "про.фа.шист.ки" },
{ "гледка", "глед.ка" },
{ "крачка", "крач.ка" },
{ "цедка", "цед.ка" },
-- 16a. Two consonants between two vowels: other
{ "звезда", "звез.да" },
{ "спринцовка", "сприн.цов.ка" },
{ "бързо", "бър.зо" },
{ "малко", "мал.ко" },
{ "после", "по.сле" },
{ "партия", "пар.ти.я" },
{ "гланцов", "глан.цов" },
{ "пепелник", "пе.пел.ник" },
{ "пилци", "пил.ци" },
{ "аншоа", "ан.шо.а" },
{ "ядро", "я.дро" },
-- 16b. As above, testing clusters чн, цм, цн, чм
{ "ироничност", "и.ро.нич.ност"},
{ "профилактична", "про.фи.лак.тич.на"},
{ "боцна", "боц.на"},
{ "спецна", "спец.на"},
{ "бичме", "бич.ме"},
{ "кръчма", "кръч.ма"},
{ "боцман", "боц.ман"},
{ "сачма", "сач.ма"},
{ "Ричмънд", "Рич.мънд"},
{ "мичман", "мич.ман"},
{ "разчеша", "раз.че.ша"},
{ "пецма", "пец.ма"}, -- Probably not a real word
-- 17. Complex consonant clusters: general
{ "сестра", "се.стра" },
{ "царство", "цар.ство" },
{ "нравствен", "нрав.ствен" },
{ "мандраджия", "ман.дра.джи.я" },
{ "мизансцен", "ми.зан.сцен" },
{ "странство", "стран.ство" },
{ "пространство", "про.стран.ство" },
{ "робство", "роб.ство" },
{ "транспорт", "тран.спорт" },
-- 18. Consonant cluster not split: св
{ "посвикна", "по.свик.на" },
-- 19. Forced syllable breaks: when absent
{ "скръндза", "скрън.дза" },
{ "годзила", "год.зи.ла" },
{ "камикадзе", "ка.ми.кад.зе" },
{ "надживея", "на.джи.ве.я" },
-- 20. Forced syllable breaks: when present
{ "скрън.дза", "скрън.дза" },
{ "го.дзила", "го.дзи.ла" },
{ "камика.дзе", "ка.ми.ка.дзе" },
{ "над.живея", "над.жи.ве.я" },
-- 21. Morphological prefix handling: без- + equal sonority
{ "безсилен", "без.си.лен" },
{ "безшумен", "без.шу.мен" },
{ "безвъзвратен", "без.въз.вра.тен" },
{ "безхаберен", "без.ха.бе.рен" },
{ "безстрашен", "без.стра.шен" },
{ "безхлебна", "без.хле.бна" },
{ "безвремие", "без.вре.ми.е" },
-- 22. Morphological prefix handling: без- + higher sonority
{ "безмерен", "без.ме.рен" },
{ "безличен", "без.ли.чен" },
{ "безнаказан", "без.на.ка.зан" },
{ "безразборен", "без.раз.бо.рен" },
{ "бездетен", "без.де.тен" },
{ "безпардонен", "без.пар.до.нен" },
{ "безтелесен", "без.те.ле.сен" },
{ "безглав", "без.глав" },
{ "безчестен", "без.че.стен" },
{ "безпризорен", "без.при.зо.рен" },
{ "безгрешен", "без.гре.шен" },
{ "безкраен", "без.кра.ен" },
{ "безбрежен", "без.бре.жен" },
{ "бездна", "безд.на" },
-- 23. Morphological prefix handling: из- + equal sonority
{ "изхвърлям", "из.хвър.лям" },
{ "изстена", "из.сте.на" },
{ "извор", "из.вор" },
{ "извозвам", "из.воз.вам" },
{ "извлача", "из.вла.ча" },
{ "изхрачване", "из.храч.ва.не" },
{ "изшмугна", "из.шмуг.на" },
{ "изживяното", "из.жи.вя.но.то" },
-- 24. Morphological prefix handling: из- + higher sonority
{ "изненада", "из.не.на.да" },
{ "излъгах", "из.лъ.гах" },
{ "измяна", "из.мя.на" },
{ "изрод", "из.род" },
{ "изтрезвително", "из.трез.ви.тел.но" },
{ "изпроставял", "из.про.ста.вял" },
{ "изключвам", "из.ключ.вам" },
{ "изблиза", "из.бли.за" },
-- 25. Morphological prefix handling: над- + equal/lower sonority
{ "надслов", "над.слов" },
{ "надхвърлен", "над.хвър.лен" },
{ "надвиквам", "над.вик.вам" },
{ "надве", "над.ве" },
{ "надгробен", "над.гро.бен" },
{ "надпис", "над.пис" },
{ "надценявам", "над.це.ня.вам" },
{ "надделея", "над.де.ле.я" },
-- 26. Morphological prefix handling: над- + higher sonority
{ "над.раствам", "над.ра.ствам" },
{ "надмощие", "над.мо.щи.е" },
{ "ненадминат", "не.над.ми.нат" },
{ "безнадзорен", "без.над.зо.рен" },
{ "надница", "над.ни.ца" },
{ "надменност", "над.мен.ност" },
{ "на.длъж", "на.длъж" },
{ "надробен", "на.дро.бен" },
{ "надрънкам", "на.дрън.кам" },
{ "надраскам", "на.дра.скам" },
{ "надрусам", "на.дру.сам" },
{ "надран", "на.дран" },
-- 27. Morphological prefix handling: под. + equal/lower sonority
{ "подстрекател", "под.стре.ка.тел" },
{ "подход", "под.ход" },
{ "подвижен", "под.ви.жен" },
{ "подзаглавие", "под.за.гла.ви.е" },
{ "подклаждам", "под.клаж.дам" },
{ "подбор", "под.бор" },
{ "подпирам", "под.пи.рам" },
{ "подценявам", "под.це.ня.вам" },
-- 28. Morphological prefix handling: под. + higher sonority
{ "подновявам", "под.но.вя.вам" },
{ "подмамвам", "под.мам.вам" },
{ "подлост", "под.лост" },
{ "под.разделение", "под.раз.де.ле.ни.е" },
{ "подробен", "по.дро.бен" },
{ "подражавам", "по.дра.жа.вам" },
{ "подремя", "по.дре.мя" },
{ "подрусам", "по.дру.сам" },
-- 29. Multiple prefixes
{ "безизразен", "бе.зиз.ра.зен" },
{ "безизразност", "бе.зиз.ра.зност" },
{ "безвъзмезден", "без.въз.мез.ден" },
{ "безвъздушен", "без.въз.ду.шен" },
{ "безразличен", "без.раз.ли.чен" },
{ "безразборност", "без.раз.бор.ност" },
{ "безпредметен", "без.пред.ме.тен" },
{ "поизправя", "по.из.пра.вя" },
{ "поизмъча", "по.из.мъ.ча" },
{ "поизгладя", "по.из.гла.дя" },
{ "произношение", "про.из.но.ше.ни.е" },
{ "произтича", "про.из.ти.ча" },
{ "наизмислил", "на.из.ми.слил" },
{ "наизлезлите", "на.из.ле.зли.те" },
{ "предразположение", "пред.раз.по.ло.же.ни.е" },
{ "преразглеждане", "пре.раз.глеж.да.не" },
{ "преразпределение", "пре.раз.пре.де.ле.ни.е" },
{ "преразказ", "пре.раз.каз" },
{ "превъзмогна", "пре.въз.мог.на" },
{ "превъзпитание", "пре.въз.пи.та.ни.е" },
{ "преиздавам", "пре.из.да.вам" },
{ "преизбирам", "пре.из.би.рам" },
{ "невъзможен", "не.въз.мо.жен" },
{ "невъзпитан", "не.въз.пи.тан" },
{ "неизбежен", "не.из.бе.жен" },
{ "неизменност", "не.из.мен.ност" },
{ "неразделен", "не.раз.де.лен" },
{ "неразположение", "не.раз.по.ло.же.ни.е" },
{ "поразмисля", "по.раз.ми.сля" },
{ "пораздрусам", "по.раз.дру.сам" },
{ "наразказах", "на.раз.ка.зах" },
{ "наразлепил", "на.раз.ле.пил" },
{ "неотложен", "не.от.ло.жен" },
{ "неотменим", "не.от.ме.ним" },
{ "поотложа", "по.от.ло.жа" },
{ "поотмина", "по.от.ми.на" },
-- 30. Loanwords with /w/ as a consonant: default spelling with 'у'
{ "уелски", "у.ел.ски" },
{ "уебсайт", "у.еб.сайт" },
{ "уестърн", "у.е.стърн" },
{ "Оуен", "О.у.ен" },
{ "ноухау", "но.у.ха.у" },
{ "Джоузеф", "Джо.у.зеф" },
{ "боулинг", "бо.у.линг" },
{ "даунлоуд", "да.ун.ло.уд" },
{ "уиски", "у.и.ски" },
{ "уикенд", "у.и.кенд" },
{ "Уоруик", "У.о.ру.ик" },
{ "Хелоуин", "Хе.ло.у.ин" },
-- 31. Loanwords with /w/ as a consonant: alternative spelling with 'ў'
{ "ўелски", "уел.ски" },
{ "ўебсайт", "уеб.сайт" },
{ "ўестърн", "уе.стърн" },
{ "Оўен", "О.уен" },
{ "ноўхаў", "ноу.хау" },
{ "Джоўзеф", "Джоу.зеф" },
{ "боўлинг", "боу.линг" },
{ "даўн.лоўд", "даун.лоуд" },
{ "ўиски", "уи.ски" },
{ "ўикенд", "уи.кенд" },
{ "Ўорўик", "Уор.уик" },
{ "Хелоўин", "Хе.ло.уин" },
-- 32. Multiple-word terms with hyphens or spaces
{ "разни хора-разни вкусове", "раз.ни хо.ра-раз.ни вку.со.ве", },
{ "акушер-гинеколог", "а.ку.шер-ги.не.ко.лог" },
{ "най-напред", "най-на.пред" },
{ "ампер-час", "ам.пер-час" },
{ "га-га", "га-га" }, -- no-op
{ "пи-пи", "пи-пи" },
{ "Гвинея-Бисау", "Гви.не.я-Би.са.у" },
{ "шам-фъстък", "шам-фъ.стък" },
{ "вълна-убиец", "въл.на-у.би.ец" },
{ "акушер-гинеколог", "а.ку.шер-ги.не.ко.лог" },
{ "по-добре късно, отколкото никога", "по-до.бре къ.сно, от.кол.ко.то ни.ко.га" },
{ "зенитно-ракетен", "зе.нит.но-ра.ке.тен" },
{ "горе-долу", "го.ре-до.лу" },
{ "най-после", "най-по.сле" },
{ "чик-чирик", "чик-чи.рик" },
{ "среден род", "сре.ден род" },
{ "божа кравичка", "бо.жа кра.вич.ка" },
{ "Съединени американски щати", "Съ.е.ди.не.ни а.ме.ри.кан.ски ща.ти" },
{ "от младих до старих", "от мла.дих до ста.рих" },
{ "со кротце, со благо и со малко кютек", "со крот.це, со бла.го и со мал.ко кю.тек" }
}
--[[
Additions take this form –
{ "word (with no accent required)", "expected syllabification" },
{ "", "" },
Make sure to include the comma, or the module will return an error.
]]
self:iterate(list, "check_output_syllabification")
end
function tests:test_rhymes()
local list = {
-- Multiple consonants preceding the stressed vowel
{"ʃtɐˈslif", "if" },
{"nɐrodnoˈsta", "ta" },
{"oˈt͡ʃiliʃtɛ", "iliʃtɛ" },
{"oˈbijt͡sɐ", "ijt͡sɐ" },
{"bɛzˈbrat͡ʃiɛ", "at͡ʃiɛ" },
{"izˈmrɤ", "rɤ" },
-- Test neutralization of fronting
{"ja̟", "ja" },
{"ju̟k", "uk" },
{"t͡ʃo̟rbɐˈdʒijɐ", "ijɐ" },
-- Rhyme of prototonic word gives the entire word (minus preceding consonants)
{"ˈɤɡɐɫ", "ɤɡɐɫ" },
{"ˈtɤpɐn", "ɤpɐn"},
{"ˈt͡ʃɛxli", "ɛxli"},
{"ˈimen", "imen"},
-- Various
{"ʃɛˈɡa", "ɡa" },
{"ʒɛˈna", "na" },
{"ˈkɤʃtɐ", "ɤʃtɐ" },
{"inˈtimɛn", "imɛn" },
{"sɐˈɫatɐ", "atɐ" },
{"bɛʃˈʃu̟mɛn", "umɛn" },
{"oˈsukvɐm", "ukvɐm" },
{"poˈsɔɫstvo", "ɔɫstvo" },
{"ˈlɛʃtɐ", "ɛʃtɐ" },
{"liˈpa", "pa" },
{"okɛˈan", "an" },
{"mɛˈkit͡sɐ", "it͡sɐ" },
{"ˈɫaɡɛr", "aɡɛr" },
{"mɐˈɡijɐ", "ijɐ" },
{"xɛm" , "ɛm" },
{"ximn", "imn"},
{"toˈɫup", "up"},
{"ˈnʲa̟koɫko", "akoɫko" },
{"ɐftoˈpɫuk", "uk"},
-- With secondary stress
{"ˌabdiˈkirɐʃt", "irɐʃt" },
{"ˌʒa̟r-pˈtit͡sɐ", "it͡sɐ" },
-- With /w/
{"ˈnɔwxɐw", "ɔwxɐw" },
{"ˈwiski", "iski" },
{"ˈwikɛnt", "ikɛnt" },
-- Test palatalization
{"lɛˈtʲɤ̟", "tʲɤ"},
{"kiˈpʲɤ̟", "pʲɤ"},
{"oɡˈnʲa̟r", "ar"},
{"ˈsvʲa̟t", "at"},
-- Test monosyllabic (no stress symbol) handling
{"ja̟t", "at"},
{"za", "za"},
{"sɤs", "ɤs"},
{"mrɤ̟", "rɤ"},
{"nɛ", "nɛ"},
{"dvɛ", "vɛ"},
{"da", "da"},
{"na", "na"},
{"t͡ʃa̟s", "as"},
{"ɡɫas", "as"},
{"as", "as"},
-- Test multisyllabics that end in two vowels, the final being stressed (vowel-only rhyme)
{"borʒo̟ˈa", "a"},
{"ɐnʃo̟ˈa", "a"},
{"koˈɛ", "ɛ"},
{"zɐˈɛ", "ɛ"},
{"nɐˈɛ", "ɛ"},
{"priˈɛ", "ɛ"}
}
self:iterate(list, "check_output_rhymes")
end
return tests