Module:uz-inflection/units/uz-noun/testcases

Navigation edit

Active version Development version
  M:uz-inflection     {{uz-inflection}}     M:*/inflection     {{*/inflection}}  

Active version:

unit testcases main template table template
  M:uz-inflection/units/ru-noun     M:/.../testcases     {{ru-decl-noun-z}}     {{ru-decl-noun-table-z}}  
  M:uz-inflection/units/uz-noun     M:/.../testcases     {{uz-decl-noun}}     {{uz-decl-noun-table}}  

Test Results edit

All tests passed. (refresh)

TextExpectedActualDiffers at
test_inflection:
Passed1.01) kitob (type="") nom_sgkitobkitob
Passed1.02) kitob (type="") gen_sgkitobningkitobning
Passed1.03) kitob (type="") dat_sgkitobgakitobga
Passed1.04) kitob (type="") acc_sgkitobnikitobni
Passed1.05) kitob (type="") loc_sgkitobdakitobda
Passed1.06) kitob (type="") abl_sgkitobdankitobdan
Passed1.07) kitob (type="") nom_plkitoblarkitoblar
Passed1.08) kitob (type="") gen_plkitoblarningkitoblarning
Passed1.09) kitob (type="") dat_plkitoblargakitoblarga
Passed1.10) kitob (type="") acc_plkitoblarnikitoblarni
Passed1.11) kitob (type="") loc_plkitoblardakitoblarda
Passed1.12) kitob (type="") abl_plkitoblardankitoblardan
Passed1.13) kitob (type="") nom_sg_possessive_1sgkitobimkitobim
Passed1.14) kitob (type="") gen_sg_possessive_1sgkitobimningkitobimning
Passed1.15) kitob (type="") dat_sg_possessive_1sgkitobimgakitobimga
Passed1.16) kitob (type="") acc_sg_possessive_1sgkitobimnikitobimni
Passed1.17) kitob (type="") loc_sg_possessive_1sgkitobimdakitobimda
Passed1.18) kitob (type="") abl_sg_possessive_1sgkitobimdankitobimdan
Passed1.19) kitob (type="") nom_sg_possessive_2sgkitobingkitobing
Passed1.20) kitob (type="") gen_sg_possessive_2sgkitobingningkitobingning
Passed1.21) kitob (type="") dat_sg_possessive_2sgkitobinggakitobingga
Passed1.22) kitob (type="") acc_sg_possessive_2sgkitobingnikitobingni
Passed1.23) kitob (type="") loc_sg_possessive_2sgkitobingdakitobingda
Passed1.24) kitob (type="") abl_sg_possessive_2sgkitobingdankitobingdan
Passed1.25) kitob (type="") nom_sg_possessive_3sgkitobikitobi
Passed1.26) kitob (type="") gen_sg_possessive_3sgkitobiningkitobining
Passed1.27) kitob (type="") dat_sg_possessive_3sgkitobigakitobiga
Passed1.28) kitob (type="") acc_sg_possessive_3sgkitobinikitobini
Passed1.29) kitob (type="") loc_sg_possessive_3sgkitobidakitobida
Passed1.30) kitob (type="") abl_sg_possessive_3sgkitobidankitobidan
Passed1.31) kitob (type="") nom_sg_possessive_1plkitobimizkitobimiz
Passed1.32) kitob (type="") gen_sg_possessive_1plkitobimizningkitobimizning
Passed1.33) kitob (type="") dat_sg_possessive_1plkitobimizgakitobimizga
Passed1.34) kitob (type="") acc_sg_possessive_1plkitobimiznikitobimizni
Passed1.35) kitob (type="") loc_sg_possessive_1plkitobimizdakitobimizda
Passed1.36) kitob (type="") abl_sg_possessive_1plkitobimizdankitobimizdan
Passed1.37) kitob (type="") nom_sg_possessive_2plkitobingizkitobingiz
Passed1.38) kitob (type="") gen_sg_possessive_2plkitobingizningkitobingizning
Passed1.39) kitob (type="") dat_sg_possessive_2plkitobingizgakitobingizga
Passed1.40) kitob (type="") acc_sg_possessive_2plkitobingiznikitobingizni
Passed1.41) kitob (type="") loc_sg_possessive_2plkitobingizdakitobingizda
Passed1.42) kitob (type="") abl_sg_possessive_2plkitobingizdankitobingizdan
Passed1.43) kitob (type="") nom_sg_possessive_3plkitobikitobi
Passed1.44) kitob (type="") gen_sg_possessive_3plkitobiningkitobining
Passed1.45) kitob (type="") dat_sg_possessive_3plkitobigakitobiga
Passed1.46) kitob (type="") acc_sg_possessive_3plkitobinikitobini
Passed1.47) kitob (type="") loc_sg_possessive_3plkitobidakitobida
Passed1.48) kitob (type="") abl_sg_possessive_3plkitobidankitobidan
Passed1.49) kitob (type="") nom_pl_possessive_1sgkitoblarimkitoblarim
Passed1.50) kitob (type="") gen_pl_possessive_1sgkitoblarimningkitoblarimning
Passed1.51) kitob (type="") dat_pl_possessive_1sgkitoblarimgakitoblarimga
Passed1.52) kitob (type="") acc_pl_possessive_1sgkitoblarimnikitoblarimni
Passed1.53) kitob (type="") loc_pl_possessive_1sgkitoblarimdakitoblarimda
Passed1.54) kitob (type="") abl_pl_possessive_1sgkitoblarimdankitoblarimdan
Passed1.55) kitob (type="") nom_pl_possessive_2sgkitoblaringkitoblaring
Passed1.56) kitob (type="") gen_pl_possessive_2sgkitoblaringningkitoblaringning
Passed1.57) kitob (type="") dat_pl_possessive_2sgkitoblaringgakitoblaringga
Passed1.58) kitob (type="") acc_pl_possessive_2sgkitoblaringnikitoblaringni
Passed1.59) kitob (type="") loc_pl_possessive_2sgkitoblaringdakitoblaringda
Passed1.60) kitob (type="") abl_pl_possessive_2sgkitoblaringdankitoblaringdan
Passed1.61) kitob (type="") nom_pl_possessive_3sgkitoblarikitoblari
Passed1.62) kitob (type="") gen_pl_possessive_3sgkitoblariningkitoblarining
Passed1.63) kitob (type="") dat_pl_possessive_3sgkitoblarigakitoblariga
Passed1.64) kitob (type="") acc_pl_possessive_3sgkitoblarinikitoblarini
Passed1.65) kitob (type="") loc_pl_possessive_3sgkitoblaridakitoblarida
Passed1.66) kitob (type="") abl_pl_possessive_3sgkitoblaridankitoblaridan
Passed1.67) kitob (type="") nom_pl_possessive_1plkitoblarimizkitoblarimiz
Passed1.68) kitob (type="") gen_pl_possessive_1plkitoblarimizningkitoblarimizning
Passed1.69) kitob (type="") dat_pl_possessive_1plkitoblarimizgakitoblarimizga
Passed1.70) kitob (type="") acc_pl_possessive_1plkitoblarimiznikitoblarimizni
Passed1.71) kitob (type="") loc_pl_possessive_1plkitoblarimizdakitoblarimizda
Passed1.72) kitob (type="") abl_pl_possessive_1plkitoblarimizdankitoblarimizdan
Passed1.73) kitob (type="") nom_pl_possessive_2plkitoblaringizkitoblaringiz
Passed1.74) kitob (type="") gen_pl_possessive_2plkitoblaringizningkitoblaringizning
Passed1.75) kitob (type="") dat_pl_possessive_2plkitoblaringizgakitoblaringizga
Passed1.76) kitob (type="") acc_pl_possessive_2plkitoblaringiznikitoblaringizni
Passed1.77) kitob (type="") loc_pl_possessive_2plkitoblaringizdakitoblaringizda
Passed1.78) kitob (type="") abl_pl_possessive_2plkitoblaringizdankitoblaringizdan
Passed1.79) kitob (type="") nom_pl_possessive_3plkitoblarikitoblari
Passed1.80) kitob (type="") gen_pl_possessive_3plkitoblariningkitoblarining
Passed1.81) kitob (type="") dat_pl_possessive_3plkitoblarigakitoblariga
Passed1.82) kitob (type="") acc_pl_possessive_3plkitoblarinikitoblarini
Passed1.83) kitob (type="") loc_pl_possessive_3plkitoblaridakitoblarida
Passed1.84) kitob (type="") abl_pl_possessive_3plkitoblaridankitoblaridan
Passed2.01) mavzu (type="yisi") nom_sgmavzumavzu
Passed2.02) mavzu (type="yisi") gen_sgmavzuningmavzuning
Passed2.03) mavzu (type="yisi") dat_sgmavzugamavzuga
Passed2.04) mavzu (type="yisi") acc_sgmavzunimavzuni
Passed2.05) mavzu (type="yisi") loc_sgmavzudamavzuda
Passed2.06) mavzu (type="yisi") abl_sgmavzudanmavzudan
Passed2.07) mavzu (type="yisi") nom_plmavzularmavzular
Passed2.08) mavzu (type="yisi") gen_plmavzularningmavzularning
Passed2.09) mavzu (type="yisi") dat_plmavzulargamavzularga
Passed2.10) mavzu (type="yisi") acc_plmavzularnimavzularni
Passed2.11) mavzu (type="yisi") loc_plmavzulardamavzularda
Passed2.12) mavzu (type="yisi") abl_plmavzulardanmavzulardan
Passed2.13) mavzu (type="yisi") nom_sg_possessive_1sgmavzuyimmavzuyim
Passed2.14) mavzu (type="yisi") nom_sg_possessive_3sgmavzusimavzusi
Passed3.01) parvo (type="yiyi") nom_sgparvoparvo
Passed3.02) parvo (type="yiyi") gen_sgparvoningparvoning
Passed3.03) parvo (type="yiyi") dat_sgparvogaparvoga
Passed3.04) parvo (type="yiyi") acc_sgparvoniparvoni
Passed3.05) parvo (type="yiyi") loc_sgparvodaparvoda
Passed3.06) parvo (type="yiyi") abl_sgparvodanparvodan
Passed3.07) parvo (type="yiyi") nom_plparvolarparvolar
Passed3.08) parvo (type="yiyi") gen_plparvolarningparvolarning
Passed3.09) parvo (type="yiyi") dat_plparvolargaparvolarga
Passed3.10) parvo (type="yiyi") acc_plparvolarniparvolarni
Passed3.11) parvo (type="yiyi") loc_plparvolardaparvolarda
Passed3.12) parvo (type="yiyi") abl_plparvolardanparvolardan
Passed3.13) parvo (type="yiyi") nom_sg_possessive_1sgparvoyimparvoyim
Passed3.14) parvo (type="yiyi") nom_sg_possessive_3sgparvoyiparvoyi
Passed4.01) ishtirok (type="kq") nom_sgishtirokishtirok
Passed4.02) ishtirok (type="kq") gen_sgishtirokningishtirokning
Passed4.03) ishtirok (type="kq") dat_sgishtirokkaishtirokka
Passed4.04) ishtirok (type="kq") acc_sgishtirokniishtirokni
Passed4.05) ishtirok (type="kq") loc_sgishtirokdaishtirokda
Passed4.06) ishtirok (type="kq") abl_sgishtirokdanishtirokdan
Passed4.07) ishtirok (type="kq") nom_plishtiroklarishtiroklar
Passed4.08) ishtirok (type="kq") gen_plishtiroklarningishtiroklarning
Passed4.09) ishtirok (type="kq") dat_plishtiroklargaishtiroklarga
Passed4.10) ishtirok (type="kq") acc_plishtiroklarniishtiroklarni
Passed4.11) ishtirok (type="kq") loc_plishtiroklardaishtiroklarda
Passed4.12) ishtirok (type="kq") abl_plishtiroklardanishtiroklardan
Passed4.13) ishtirok (type="kq") nom_sg_possessive_1sgishtirokimishtirokim
Passed4.14) ishtirok (type="kq") nom_sg_possessive_3sgishtirokiishtiroki
Passed5.01) huquq (type="kq") nom_sghuquqhuquq
Passed5.02) huquq (type="kq") gen_sghuquqninghuquqning
Passed5.03) huquq (type="kq") dat_sghuquqqahuquqqa
Passed5.04) huquq (type="kq") acc_sghuquqnihuquqni
Passed5.05) huquq (type="kq") loc_sghuquqdahuquqda
Passed5.06) huquq (type="kq") abl_sghuquqdanhuquqdan
Passed5.07) huquq (type="kq") nom_plhuquqlarhuquqlar
Passed5.08) huquq (type="kq") gen_plhuquqlarninghuquqlarning
Passed5.09) huquq (type="kq") dat_plhuquqlargahuquqlarga
Passed5.10) huquq (type="kq") acc_plhuquqlarnihuquqlarni
Passed5.11) huquq (type="kq") loc_plhuquqlardahuquqlarda
Passed5.12) huquq (type="kq") abl_plhuquqlardanhuquqlardan
Passed5.13) huquq (type="kq") nom_sg_possessive_1sghuquqimhuquqim
Passed5.14) huquq (type="kq") nom_sg_possessive_3sghuquqihuquqi
Passed6.01) qorin (type="reduced") nom_sgqorinqorin
Passed6.02) qorin (type="reduced") gen_sgqorinningqorinning
Passed6.03) qorin (type="reduced") dat_sgqoringaqoringa
Passed6.04) qorin (type="reduced") acc_sgqorinniqorinni
Passed6.05) qorin (type="reduced") loc_sgqorindaqorinda
Passed6.06) qorin (type="reduced") abl_sgqorindanqorindan
Passed6.07) qorin (type="reduced") nom_plqorinlarqorinlar
Passed6.08) qorin (type="reduced") gen_plqorinlarningqorinlarning
Passed6.09) qorin (type="reduced") dat_plqorinlargaqorinlarga
Passed6.10) qorin (type="reduced") acc_plqorinlarniqorinlarni
Passed6.11) qorin (type="reduced") loc_plqorinlardaqorinlarda
Passed6.12) qorin (type="reduced") abl_plqorinlardanqorinlardan
Passed6.13) qorin (type="reduced") nom_sg_possessive_1sgqornimqornim
Passed6.14) qorin (type="reduced") nom_sg_possessive_3sgqorniqorni
Passed7.01) metall (type="") nom_sgmetallmetall
Passed7.02) metall (type="") gen_sgmetallningmetallning
Passed7.03) metall (type="") dat_sgmetallgametallga
Passed7.04) metall (type="") acc_sgmetallnimetallni
Passed7.05) metall (type="") loc_sgmetalldametallda
Passed7.06) metall (type="") abl_sgmetalldanmetalldan
Passed7.07) metall (type="") nom_plmetallarmetallar
Passed7.08) metall (type="") gen_plmetallarningmetallarning
Passed7.09) metall (type="") dat_plmetallargametallarga
Passed7.10) metall (type="") acc_plmetallarnimetallarni
Passed7.11) metall (type="") loc_plmetallardametallarda
Passed7.12) metall (type="") abl_plmetallardanmetallardan
Passed7.13) metall (type="") nom_sg_possessive_1sgmetallimmetallim
Passed7.14) metall (type="") nom_sg_possessive_3sgmetallimetalli
Passed8.01) bobo (type="std") nom_sgbobobobo
Passed8.02) bobo (type="std") gen_sgboboningboboning
Passed8.03) bobo (type="std") dat_sgbobogaboboga
Passed8.04) bobo (type="std") acc_sgboboniboboni
Passed8.05) bobo (type="std") loc_sgbobodaboboda
Passed8.06) bobo (type="std") abl_sgbobodanbobodan
Passed8.07) bobo (type="std") nom_plbobolarbobolar
Passed8.08) bobo (type="std") gen_plbobolarningbobolarning
Passed8.09) bobo (type="std") dat_plbobolargabobolarga
Passed8.10) bobo (type="std") acc_plbobolarnibobolarni
Passed8.11) bobo (type="std") loc_plbobolardabobolarda
Passed8.12) bobo (type="std") abl_plbobolardanbobolardan
Passed8.13) bobo (type="std") nom_sg_possessive_1sgbobombobom
Passed8.14) bobo (type="std") nom_sg_possessive_3sgbobosibobosi
Passed9.01) tilak (type="std") nom_sgtilaktilak
Passed9.02) tilak (type="std") gen_sgtilakningtilakning
Passed9.03) tilak (type="std") dat_sgtilakkatilakka
Passed9.04) tilak (type="std") acc_sgtilaknitilakni
Passed9.05) tilak (type="std") loc_sgtilakdatilakda
Passed9.06) tilak (type="std") abl_sgtilakdantilakdan
Passed9.07) tilak (type="std") nom_pltilaklartilaklar
Passed9.08) tilak (type="std") gen_pltilaklarningtilaklarning
Passed9.09) tilak (type="std") dat_pltilaklargatilaklarga
Passed9.10) tilak (type="std") acc_pltilaklarnitilaklarni
Passed9.11) tilak (type="std") loc_pltilaklardatilaklarda
Passed9.12) tilak (type="std") abl_pltilaklardantilaklardan
Passed9.13) tilak (type="std") nom_sg_possessive_1sgtilagimtilagim
Passed9.14) tilak (type="std") nom_sg_possessive_3sgtilagitilagi
Passed10.01) tayoq (type="std") nom_sgtayoqtayoq
Passed10.02) tayoq (type="std") gen_sgtayoqningtayoqning
Passed10.03) tayoq (type="std") dat_sgtayoqqatayoqqa
Passed10.04) tayoq (type="std") acc_sgtayoqnitayoqni
Passed10.05) tayoq (type="std") loc_sgtayoqdatayoqda
Passed10.06) tayoq (type="std") abl_sgtayoqdantayoqdan
Passed10.07) tayoq (type="std") nom_pltayoqlartayoqlar
Passed10.08) tayoq (type="std") gen_pltayoqlarningtayoqlarning
Passed10.09) tayoq (type="std") dat_pltayoqlargatayoqlarga
Passed10.10) tayoq (type="std") acc_pltayoqlarnitayoqlarni
Passed10.11) tayoq (type="std") loc_pltayoqlardatayoqlarda
Passed10.12) tayoq (type="std") abl_pltayoqlardantayoqlardan
Passed10.13) tayoq (type="std") nom_sg_possessive_1sgtayogʻimtayogʻim
Passed10.14) tayoq (type="std") nom_sg_possessive_3sgtayogʻitayogʻi
Passed11.01) obroʻ (type="yiyi") nom_sgobroʻobroʻ
Passed11.02) obroʻ (type="yiyi") gen_sgobroʻningobroʻning
Passed11.03) obroʻ (type="yiyi") dat_sgobroʻgaobroʻga
Passed11.04) obroʻ (type="yiyi") acc_sgobroʻniobroʻni
Passed11.05) obroʻ (type="yiyi") loc_sgobroʻdaobroʻda
Passed11.06) obroʻ (type="yiyi") abl_sgobroʻdanobroʻdan
Passed11.07) obroʻ (type="yiyi") nom_plobroʻlarobroʻlar
Passed11.08) obroʻ (type="yiyi") gen_plobroʻlarningobroʻlarning
Passed11.09) obroʻ (type="yiyi") dat_plobroʻlargaobroʻlarga
Passed11.10) obroʻ (type="yiyi") acc_plobroʻlarniobroʻlarni
Passed11.11) obroʻ (type="yiyi") loc_plobroʻlardaobroʻlarda
Passed11.12) obroʻ (type="yiyi") abl_plobroʻlardanobroʻlardan
Passed11.13) obroʻ (type="yiyi") nom_sg_possessive_1sgobroʻyimobroʻyim
Passed11.14) obroʻ (type="yiyi") nom_sg_possessive_3sgobroʻyiobroʻyi
Passed12.01) dohiy (type="") nom_sgdohiydohiy
Passed12.02) dohiy (type="") gen_sgdohiyningdohiyning
Passed12.03) dohiy (type="") dat_sgdohiygadohiyga
Passed12.04) dohiy (type="") acc_sgdohiynidohiyni
Passed12.05) dohiy (type="") loc_sgdohiydadohiyda
Passed12.06) dohiy (type="") abl_sgdohiydandohiydan
Passed12.07) dohiy (type="") nom_pldohiylardohiylar
Passed12.08) dohiy (type="") gen_pldohiylarningdohiylarning
Passed12.09) dohiy (type="") dat_pldohiylargadohiylarga
Passed12.10) dohiy (type="") acc_pldohiylarnidohiylarni
Passed12.11) dohiy (type="") loc_pldohiylardadohiylarda
Passed12.12) dohiy (type="") abl_pldohiylardandohiylardan
Passed12.13) dohiy (type="") nom_sg_possessive_1sgdohiyimdohiyim
Passed12.14) dohiy (type="") nom_sg_possessive_3sgdohiysidohiysi

local dev_prefix = 'uz-'
-- dev_prefix = 'User:Vitalik/'  -- comment this on active version

local tests = require('Module:UnitTests')
local inflection = require('Module:' .. dev_prefix .. 'inflection')
local m_links = require('Module:links')

local unit_name = 'uz-noun'
local lang = require('Module:languages').getByCode('uz')

local n = 0
local average = 0

function tests:check_full_inflection(base, possessive_type, expected, comment)
	return self:check_inflection(base, possessive_type, expected, comment, true)
end

function tests:check_inflection(base, possessive_type, expected, comment, full)
	n = n + 1

	local start = os.clock()
	local forms = inflection.test(unit_name, base, {possessive_type=possessive_type})
	local finished = os.clock()
	local delta = finished - start
	mw.log('time delta = ' .. delta)
	average = ((average * (n - 1)) + delta) / n
	mw.log('time average = ' .. average)
	
	local forms_keys
	if full == nil then
		forms_keys = {
			'nom_sg', 'gen_sg', 'dat_sg', 'acc_sg', 'loc_sg', 'abl_sg', 'nom_pl', 'gen_pl', 'dat_pl', 'acc_pl', 'loc_pl', 'abl_pl',
			'nom_sg_possessive_1sg', 'nom_sg_possessive_3sg',
		}
	else
		forms_keys = {
			'nom_sg', 'gen_sg', 'dat_sg', 'acc_sg', 'loc_sg', 'abl_sg', 'nom_pl', 'gen_pl', 'dat_pl', 'acc_pl', 'loc_pl', 'abl_pl',
			'nom_sg_possessive_1sg', 'gen_sg_possessive_1sg', 'dat_sg_possessive_1sg', 'acc_sg_possessive_1sg', 'loc_sg_possessive_1sg', 'abl_sg_possessive_1sg',
			'nom_sg_possessive_2sg', 'gen_sg_possessive_2sg', 'dat_sg_possessive_2sg', 'acc_sg_possessive_2sg', 'loc_sg_possessive_2sg', 'abl_sg_possessive_2sg',
			'nom_sg_possessive_3sg', 'gen_sg_possessive_3sg', 'dat_sg_possessive_3sg', 'acc_sg_possessive_3sg', 'loc_sg_possessive_3sg', 'abl_sg_possessive_3sg',
			'nom_sg_possessive_1pl', 'gen_sg_possessive_1pl', 'dat_sg_possessive_1pl', 'acc_sg_possessive_1pl', 'loc_sg_possessive_1pl', 'abl_sg_possessive_1pl',
			'nom_sg_possessive_2pl', 'gen_sg_possessive_2pl', 'dat_sg_possessive_2pl', 'acc_sg_possessive_2pl', 'loc_sg_possessive_2pl', 'abl_sg_possessive_2pl',
			'nom_sg_possessive_3pl', 'gen_sg_possessive_3pl', 'dat_sg_possessive_3pl', 'acc_sg_possessive_3pl', 'loc_sg_possessive_3pl', 'abl_sg_possessive_3pl',
			'nom_pl_possessive_1sg', 'gen_pl_possessive_1sg', 'dat_pl_possessive_1sg', 'acc_pl_possessive_1sg', 'loc_pl_possessive_1sg', 'abl_pl_possessive_1sg',
			'nom_pl_possessive_2sg', 'gen_pl_possessive_2sg', 'dat_pl_possessive_2sg', 'acc_pl_possessive_2sg', 'loc_pl_possessive_2sg', 'abl_pl_possessive_2sg',
			'nom_pl_possessive_3sg', 'gen_pl_possessive_3sg', 'dat_pl_possessive_3sg', 'acc_pl_possessive_3sg', 'loc_pl_possessive_3sg', 'abl_pl_possessive_3sg',
			'nom_pl_possessive_1pl', 'gen_pl_possessive_1pl', 'dat_pl_possessive_1pl', 'acc_pl_possessive_1pl', 'loc_pl_possessive_1pl', 'abl_pl_possessive_1pl',
			'nom_pl_possessive_2pl', 'gen_pl_possessive_2pl', 'dat_pl_possessive_2pl', 'acc_pl_possessive_2pl', 'loc_pl_possessive_2pl', 'abl_pl_possessive_2pl',
			'nom_pl_possessive_3pl', 'gen_pl_possessive_3pl', 'dat_pl_possessive_3pl', 'acc_pl_possessive_3pl', 'loc_pl_possessive_3pl', 'abl_pl_possessive_3pl',
		}
	end
	local link = m_links.full_link({term = base, lang = lang, tr = '-'}, nil, true)
	local expected_list = mw.text.split(expected, ' / ')
	for i, form_key in pairs(forms_keys) do
		local zero = i < 10 and '0' or ''
		local text = n .. '.' .. zero .. i .. ') ' .. link .. ' (type="' .. (possessive_type or '-') .. '") <b>' .. form_key .. '</b>'
		if comment then
			text = text .. " <small style='color: gray;'>" .. comment .. "</small>"
		end
		actual = forms[form_key]
		expected = expected_list[i]
		self:equals(text, actual, expected)
	end
end

function tests:test_inflection()
	self:check_full_inflection('kitob', '', 
		'kitob / kitobning / kitobga / kitobni / kitobda / kitobdan / kitoblar / kitoblarning / kitoblarga / kitoblarni / kitoblarda / kitoblardan / ' ..
		'kitobim / kitobimning / kitobimga / kitobimni / kitobimda / kitobimdan / ' ..
		'kitobing / kitobingning / kitobingga / kitobingni / kitobingda / kitobingdan / ' ..
		'kitobi / kitobining / kitobiga / kitobini / kitobida / kitobidan / ' ..
		'kitobimiz / kitobimizning / kitobimizga / kitobimizni / kitobimizda / kitobimizdan / ' ..
		'kitobingiz / kitobingizning / kitobingizga / kitobingizni / kitobingizda / kitobingizdan / ' ..
		'kitobi / kitobining / kitobiga / kitobini / kitobida / kitobidan / ' ..
		'kitoblarim / kitoblarimning / kitoblarimga / kitoblarimni / kitoblarimda / kitoblarimdan / ' ..
		'kitoblaring / kitoblaringning / kitoblaringga / kitoblaringni / kitoblaringda / kitoblaringdan / ' ..
		'kitoblari / kitoblarining / kitoblariga / kitoblarini / kitoblarida / kitoblaridan / ' ..
		'kitoblarimiz / kitoblarimizning / kitoblarimizga / kitoblarimizni / kitoblarimizda / kitoblarimizdan / ' .. 
		'kitoblaringiz / kitoblaringizning / kitoblaringizga / kitoblaringizni / kitoblaringizda / kitoblaringizdan / ' ..
		'kitoblari / kitoblarining / kitoblariga / kitoblarini / kitoblarida / kitoblaridan')
	self:check_inflection('mavzu', 'yisi', 'mavzu / mavzuning / mavzuga / mavzuni / mavzuda / mavzudan / mavzular / mavzularning / mavzularga / mavzularni / mavzularda / mavzulardan / mavzuyim / mavzusi')
	self:check_inflection('parvo', 'yiyi', 'parvo / parvoning / parvoga / parvoni / parvoda / parvodan / parvolar / parvolarning / parvolarga / parvolarni / parvolarda / parvolardan / parvoyim / parvoyi')
	self:check_inflection('ishtirok', 'kq', 'ishtirok / ishtirokning / ishtirokka / ishtirokni / ishtirokda / ishtirokdan / ishtiroklar / ishtiroklarning / ishtiroklarga / ishtiroklarni / ishtiroklarda / ishtiroklardan / ishtirokim / ishtiroki')
	self:check_inflection('huquq', 'kq', 'huquq / huquqning / huquqqa / huquqni / huquqda / huquqdan / huquqlar / huquqlarning / huquqlarga / huquqlarni / huquqlarda / huquqlardan / huquqim / huquqi')
	self:check_inflection('qorin', 'reduced', 'qorin / qorinning / qoringa / qorinni / qorinda / qorindan / qorinlar / qorinlarning / qorinlarga / qorinlarni / qorinlarda / qorinlardan / qornim / qorni')
	self:check_inflection('metall', '', 'metall / metallning / metallga / metallni / metallda / metalldan / metallar / metallarning / metallarga / metallarni / metallarda / metallardan / metallim / metalli')
	self:check_inflection('bobo', 'std', 'bobo / boboning / boboga / boboni / boboda / bobodan / bobolar / bobolarning / bobolarga / bobolarni / bobolarda / bobolardan / bobom / bobosi')
	self:check_inflection('tilak', 'std', 'tilak / tilakning / tilakka / tilakni / tilakda / tilakdan / tilaklar / tilaklarning / tilaklarga / tilaklarni / tilaklarda / tilaklardan / tilagim / tilagi')
	self:check_inflection('tayoq', 'std', 'tayoq / tayoqning / tayoqqa / tayoqni / tayoqda / tayoqdan / tayoqlar / tayoqlarning / tayoqlarga / tayoqlarni / tayoqlarda / tayoqlardan / tayogʻim / tayogʻi')
	self:check_inflection('obroʻ', 'yiyi', 'obroʻ / obroʻning / obroʻga / obroʻni / obroʻda / obroʻdan / obroʻlar / obroʻlarning / obroʻlarga / obroʻlarni / obroʻlarda / obroʻlardan / obroʻyim / obroʻyi')
	self:check_inflection('dohiy', '', 'dohiy / dohiyning / dohiyga / dohiyni / dohiyda / dohiydan / dohiylar / dohiylarning / dohiylarga / dohiylarni / dohiylarda / dohiylardan / dohiyim / dohiysi')
end

return tests