Module:kum-decl/testcases

From Wiktionary, the free dictionary
Jump to navigation Jump to search

7 of 7 tests failed. (refresh)

TextExpectedActual
test_noun_declension:
Failedэл (el){abl_pl="эллерден", abl_sg="элден", acc_pl="эллени", acc_sg="элни", dat_pl="эллеге", dat_sg="элге", gen_pl="эллени", gen_sg="элни", loc_pl="эллерде", loc_sg="элде", nom_pl="эллер", nom_sg="эл"}{abl_pl="эллерден", abl_pl_1pl="эллерибизден", abl_pl_1sg="эллеримден", abl_pl_2pl="эллерибизден", abl_pl_2sg="эллерингден", abl_pl_3="эллеринден", abl_sg="элден", abl_sg_1pl="элибизден", abl_sg_1sg="элимден", abl_sg_2pl="элигизден", abl_sg_2sg="элингден", abl_sg_3="элинден", acc_pl="эллени", acc_pl_1pl="эллерибизни", acc_pl_1sg="эллеримни", acc_pl_2pl="эллеригизни", acc_pl_2sg="эллерингни", acc_pl_3="эллерин", acc_sg="элни", acc_sg_1pl="элибизни", acc_sg_1sg="элимни", acc_sg_2pl="элигизни", acc_sg_2sg="элингни", acc_sg_3="элин", dat_pl="эллеге", dat_pl_1pl="эллерибизге", dat_pl_1sg="эллериме", dat_pl_2pl="эллеригизге", dat_pl_2sg="эллеринге", dat_pl_3="эллерине", dat_sg="элге", dat_sg_1pl="элибизге", dat_sg_1sg="элимге", dat_sg_2pl="элигизге", dat_sg_2sg="элинге", dat_sg_3="элине", gen_pl="эллени", gen_pl_1pl="эллерибизни", gen_pl_1sg="эллеримни", gen_pl_2pl="эллеригизни", gen_pl_2sg="эллерингни", gen_pl_3="эллерини", gen_sg="элни", gen_sg_1pl="элибизни", gen_sg_1sg="элимни", gen_sg_2pl="элигизни", gen_sg_2sg="элингни", gen_sg_3="элини", loc_pl="эллерде", loc_pl_1pl="эллерибизде", loc_pl_1sg="эллеримде", loc_pl_2pl="эллеригизде", loc_pl_2sg="эллерингде", loc_pl_3="эллеринде", loc_sg="элде", loc_sg_1pl="элибизде", loc_sg_1sg="элимде", loc_sg_2pl="элигизде", loc_sg_2sg="элингде", loc_sg_3="элинде", nom_pl="эллер", nom_pl_1pl="эллерибиз", nom_pl_1sg="эллерим", nom_pl_2pl="эллеригиз", nom_pl_2sg="эллеринг", nom_pl_3="эллери", nom_sg="эл", nom_sg_1pl="элибиз", nom_sg_1sg="элим", nom_sg_2pl="элигиз", nom_sg_2sg="элинг", nom_sg_3="эли"}
Failedата (ata){abl_pl="аталардан", abl_sg="атадан", acc_pl="аталаны", acc_sg="атаны", dat_pl="аталагъа", dat_sg="атагъа", gen_pl="аталаны", gen_sg="атаны", loc_pl="аталарда", loc_sg="атада", nom_pl="аталар", nom_sg="ата"}{abl_pl="аталардан", abl_pl_1pl="аталарыбыздан", abl_pl_1sg="аталарымдан", abl_pl_2pl="аталарыбыздан", abl_pl_2sg="аталарынгъдан", abl_pl_3="аталарындан", abl_sg="атадан", abl_sg_1pl="атаыбыздан", abl_sg_1sg="атаымдан", abl_sg_2pl="атаыгъыздан", abl_sg_2sg="атаынгъдан", abl_sg_3="атаындан", acc_pl="аталаны", acc_pl_1pl="аталарыбызны", acc_pl_1sg="аталарымны", acc_pl_2pl="аталарыгъызны", acc_pl_2sg="аталарынгъны", acc_pl_3="аталарын", acc_sg="атаны", acc_sg_1pl="атаыбызны", acc_sg_1sg="атаымны", acc_sg_2pl="атаыгъызны", acc_sg_2sg="атаынгъны", acc_sg_3="атаын", dat_pl="аталагъа", dat_pl_1pl="аталарыбызгъа", dat_pl_1sg="аталарыма", dat_pl_2pl="аталарыгъызгъа", dat_pl_2sg="аталарынгъа", dat_pl_3="аталарына", dat_sg="атагъа", dat_sg_1pl="атаыбызгъа", dat_sg_1sg="атаымгъа", dat_sg_2pl="атаыгъызгъа", dat_sg_2sg="атаынгъа", dat_sg_3="атаына", gen_pl="аталаны", gen_pl_1pl="аталарыбызны", gen_pl_1sg="аталарымны", gen_pl_2pl="аталарыгъызны", gen_pl_2sg="аталарынгъны", gen_pl_3="аталарыны", gen_sg="атаны", gen_sg_1pl="атаыбызны", gen_sg_1sg="атаымны", gen_sg_2pl="атаыгъызны", gen_sg_2sg="атаынгъны", gen_sg_3="атаыны", loc_pl="аталарда", loc_pl_1pl="аталарыбызда", loc_pl_1sg="аталарымда", loc_pl_2pl="аталарыгъызда", loc_pl_2sg="аталарынгъда", loc_pl_3="аталарында", loc_sg="атада", loc_sg_1pl="атаыбызда", loc_sg_1sg="атаымда", loc_sg_2pl="атаыгъызда", loc_sg_2sg="атаынгъда", loc_sg_3="атаында", nom_pl="аталар", nom_pl_1pl="аталарыбыз", nom_pl_1sg="аталарым", nom_pl_2pl="аталарыгъыз", nom_pl_2sg="аталарынгъ", nom_pl_3="аталары", nom_sg="ата", nom_sg_1pl="атаыбыз", nom_sg_1sg="атаым", nom_sg_2pl="атаыгъыз", nom_sg_2sg="атаынгъ", nom_sg_3="атаы"}
Failedкъол (qol){abl_pl="къоллардан", abl_sg="къолдан", acc_pl="къолланы", acc_sg="къолну", dat_pl="къоллагъа", dat_sg="къолгъа", gen_pl="къолланы", gen_sg="къолну", loc_pl="къолларда", loc_sg="къолда", nom_pl="къоллар", nom_sg="къол"}{abl_pl="къоллардан", abl_pl_1pl="къолларыбыздан", abl_pl_1sg="къолларымдан", abl_pl_2pl="къолларыбыздан", abl_pl_2sg="къолларынгъдан", abl_pl_3="къолларындан", abl_sg="къолдан", abl_sg_1pl="къолубуздан", abl_sg_1sg="къолумдан", abl_sg_2pl="къолугъуздан", abl_sg_2sg="къолунгъдан", abl_sg_3="къолундан", acc_pl="къолланы", acc_pl_1pl="къолларыбызны", acc_pl_1sg="къолларымны", acc_pl_2pl="къолларыгъызны", acc_pl_2sg="къолларынгъны", acc_pl_3="къолларын", acc_sg="къолну", acc_sg_1pl="къолубузну", acc_sg_1sg="къолумну", acc_sg_2pl="къолугъузну", acc_sg_2sg="къолунгъну", acc_sg_3="къолун", dat_pl="къоллагъа", dat_pl_1pl="къолларыбызгъа", dat_pl_1sg="къолларыма", dat_pl_2pl="къолларыгъызгъа", dat_pl_2sg="къолларынгъа", dat_pl_3="къолларына", dat_sg="къолгъа", dat_sg_1pl="къолубузгъа", dat_sg_1sg="къолумгъа", dat_sg_2pl="къолугъузгъа", dat_sg_2sg="къолунгъа", dat_sg_3="къолуна", gen_pl="къолланы", gen_pl_1pl="къолларыбызны", gen_pl_1sg="къолларымны", gen_pl_2pl="къолларыгъызны", gen_pl_2sg="къолларынгъны", gen_pl_3="къолларыны", gen_sg="къолну", gen_sg_1pl="къолубузну", gen_sg_1sg="къолумну", gen_sg_2pl="къолугъузну", gen_sg_2sg="къолунгъну", gen_sg_3="къолуну", loc_pl="къолларда", loc_pl_1pl="къолларыбызда", loc_pl_1sg="къолларымда", loc_pl_2pl="къолларыгъызда", loc_pl_2sg="къолларынгъда", loc_pl_3="къолларында", loc_sg="къолда", loc_sg_1pl="къолубузда", loc_sg_1sg="къолумда", loc_sg_2pl="къолугъузда", loc_sg_2sg="къолунгъда", loc_sg_3="къолунда", nom_pl="къоллар", nom_pl_1pl="къолларыбыз", nom_pl_1sg="къолларым", nom_pl_2pl="къолларыгъыз", nom_pl_2sg="къолларынгъ", nom_pl_3="къоллары", nom_sg="къол", nom_sg_1pl="къолубуз", nom_sg_1sg="къолум", nom_sg_2pl="къолугъуз", nom_sg_2sg="къолунгъ", nom_sg_3="къолу"}
Failedуьй (üy){abl_pl="уьйлерден", abl_sg="уьйден", acc_pl="уьйлени", acc_sg="уьйню", dat_pl="уьйлеге", dat_sg="уьйге", gen_pl="уьйлени", gen_sg="уьйню", loc_pl="уьйлерде", loc_sg="уьйде", nom_pl="уьйлер", nom_sg="уьй"}{abl_pl="уьйлерден", abl_pl_1pl="уьйлерибизден", abl_pl_1sg="уьйлеримден", abl_pl_2pl="уьйлерибизден", abl_pl_2sg="уьйлерингден", abl_pl_3="уьйлеринден", abl_sg="уьйден", abl_sg_1pl="уьйюбюзден", abl_sg_1sg="уьйюмден", abl_sg_2pl="уьйюгюзден", abl_sg_2sg="уьйюнгден", abl_sg_3="уьйюнден", acc_pl="уьйлени", acc_pl_1pl="уьйлерибизни", acc_pl_1sg="уьйлеримни", acc_pl_2pl="уьйлеригизни", acc_pl_2sg="уьйлерингни", acc_pl_3="уьйлерин", acc_sg="уьйню", acc_sg_1pl="уьйюбюзню", acc_sg_1sg="уьйюмню", acc_sg_2pl="уьйюгюзню", acc_sg_2sg="уьйюнгню", acc_sg_3="уьйюн", dat_pl="уьйлеге", dat_pl_1pl="уьйлерибизге", dat_pl_1sg="уьйлериме", dat_pl_2pl="уьйлеригизге", dat_pl_2sg="уьйлеринге", dat_pl_3="уьйлерине", dat_sg="уьйге", dat_sg_1pl="уьйюбюзге", dat_sg_1sg="уьйюмге", dat_sg_2pl="уьйюгюзге", dat_sg_2sg="уьйюнге", dat_sg_3="уьйюне", gen_pl="уьйлени", gen_pl_1pl="уьйлерибизни", gen_pl_1sg="уьйлеримни", gen_pl_2pl="уьйлеригизни", gen_pl_2sg="уьйлерингни", gen_pl_3="уьйлерини", gen_sg="уьйню", gen_sg_1pl="уьйюбюзню", gen_sg_1sg="уьйюмню", gen_sg_2pl="уьйюгюзню", gen_sg_2sg="уьйюнгню", gen_sg_3="уьйюню", loc_pl="уьйлерде", loc_pl_1pl="уьйлерибизде", loc_pl_1sg="уьйлеримде", loc_pl_2pl="уьйлеригизде", loc_pl_2sg="уьйлерингде", loc_pl_3="уьйлеринде", loc_sg="уьйде", loc_sg_1pl="уьйюбюзде", loc_sg_1sg="уьйюмде", loc_sg_2pl="уьйюгюзде", loc_sg_2sg="уьйюнгде", loc_sg_3="уьйюнде", nom_pl="уьйлер", nom_pl_1pl="уьйлерибиз", nom_pl_1sg="уьйлерим", nom_pl_2pl="уьйлеригиз", nom_pl_2sg="уьйлеринг", nom_pl_3="уьйлери", nom_sg="уьй", nom_sg_1pl="уьйюбюз", nom_sg_1sg="уьйюм", nom_sg_2pl="уьйюгюз", nom_sg_2sg="уьйюнг", nom_sg_3="уьйю"}
Failedяш (yaş){abl_pl="яшлардан", abl_sg="яшдан", acc_pl="яшланы", acc_sg="яшны", dat_pl="яшлагъа", dat_sg="яшгъа", gen_pl="яшланы", gen_sg="яшны", loc_pl="яшларда", loc_sg="яшда", nom_pl="яшлар", nom_sg="яш"}{abl_pl="яшлардан", abl_pl_1pl="яшларыбыздан", abl_pl_1sg="яшларымдан", abl_pl_2pl="яшларыбыздан", abl_pl_2sg="яшларынгъдан", abl_pl_3="яшларындан", abl_sg="яшдан", abl_sg_1pl="яшыбыздан", abl_sg_1sg="яшымдан", abl_sg_2pl="яшыгъыздан", abl_sg_2sg="яшынгъдан", abl_sg_3="яшындан", acc_pl="яшланы", acc_pl_1pl="яшларыбызны", acc_pl_1sg="яшларымны", acc_pl_2pl="яшларыгъызны", acc_pl_2sg="яшларынгъны", acc_pl_3="яшларын", acc_sg="яшны", acc_sg_1pl="яшыбызны", acc_sg_1sg="яшымны", acc_sg_2pl="яшыгъызны", acc_sg_2sg="яшынгъны", acc_sg_3="яшын", dat_pl="яшлагъа", dat_pl_1pl="яшларыбызгъа", dat_pl_1sg="яшларыма", dat_pl_2pl="яшларыгъызгъа", dat_pl_2sg="яшларынгъа", dat_pl_3="яшларына", dat_sg="яшгъа", dat_sg_1pl="яшыбызгъа", dat_sg_1sg="яшымгъа", dat_sg_2pl="яшыгъызгъа", dat_sg_2sg="яшынгъа", dat_sg_3="яшына", gen_pl="яшланы", gen_pl_1pl="яшларыбызны", gen_pl_1sg="яшларымны", gen_pl_2pl="яшларыгъызны", gen_pl_2sg="яшларынгъны", gen_pl_3="яшларыны", gen_sg="яшны", gen_sg_1pl="яшыбызны", gen_sg_1sg="яшымны", gen_sg_2pl="яшыгъызны", gen_sg_2sg="яшынгъны", gen_sg_3="яшыны", loc_pl="яшларда", loc_pl_1pl="яшларыбызда", loc_pl_1sg="яшларымда", loc_pl_2pl="яшларыгъызда", loc_pl_2sg="яшларынгъда", loc_pl_3="яшларында", loc_sg="яшда", loc_sg_1pl="яшыбызда", loc_sg_1sg="яшымда", loc_sg_2pl="яшыгъызда", loc_sg_2sg="яшынгъда", loc_sg_3="яшында", nom_pl="яшлар", nom_pl_1pl="яшларыбыз", nom_pl_1sg="яшларым", nom_pl_2pl="яшларыгъыз", nom_pl_2sg="яшларынгъ", nom_pl_3="яшлары", nom_sg="яш", nom_sg_1pl="яшыбыз", nom_sg_1sg="яшым", nom_sg_2pl="яшыгъыз", nom_sg_2sg="яшынгъ", nom_sg_3="яшы"}
Failedюрт (yurt){abl_pl="юртлардан", abl_sg="юртдан", acc_pl="юртланы", acc_sg="юртну", dat_pl="юртлагъа", dat_sg="юртгъа", gen_pl="юртланы", gen_sg="юртну", loc_pl="юртларда", loc_sg="юртда", nom_pl="юртлар", nom_sg="юрт"}{abl_pl="юртлардан", abl_pl_1pl="юртларыбыздан", abl_pl_1sg="юртларымдан", abl_pl_2pl="юртларыбыздан", abl_pl_2sg="юртларынгъдан", abl_pl_3="юртларындан", abl_sg="юртдан", abl_sg_1pl="юртубуздан", abl_sg_1sg="юртумдан", abl_sg_2pl="юртугъуздан", abl_sg_2sg="юртунгъдан", abl_sg_3="юртундан", acc_pl="юртланы", acc_pl_1pl="юртларыбызны", acc_pl_1sg="юртларымны", acc_pl_2pl="юртларыгъызны", acc_pl_2sg="юртларынгъны", acc_pl_3="юртларын", acc_sg="юртну", acc_sg_1pl="юртубузну", acc_sg_1sg="юртумну", acc_sg_2pl="юртугъузну", acc_sg_2sg="юртунгъну", acc_sg_3="юртун", dat_pl="юртлагъа", dat_pl_1pl="юртларыбызгъа", dat_pl_1sg="юртларыма", dat_pl_2pl="юртларыгъызгъа", dat_pl_2sg="юртларынгъа", dat_pl_3="юртларына", dat_sg="юртгъа", dat_sg_1pl="юртубузгъа", dat_sg_1sg="юртумгъа", dat_sg_2pl="юртугъузгъа", dat_sg_2sg="юртунгъа", dat_sg_3="юртуна", gen_pl="юртланы", gen_pl_1pl="юртларыбызны", gen_pl_1sg="юртларымны", gen_pl_2pl="юртларыгъызны", gen_pl_2sg="юртларынгъны", gen_pl_3="юртларыны", gen_sg="юртну", gen_sg_1pl="юртубузну", gen_sg_1sg="юртумну", gen_sg_2pl="юртугъузну", gen_sg_2sg="юртунгъну", gen_sg_3="юртуну", loc_pl="юртларда", loc_pl_1pl="юртларыбызда", loc_pl_1sg="юртларымда", loc_pl_2pl="юртларыгъызда", loc_pl_2sg="юртларынгъда", loc_pl_3="юртларында", loc_sg="юртда", loc_sg_1pl="юртубузда", loc_sg_1sg="юртумда", loc_sg_2pl="юртугъузда", loc_sg_2sg="юртунгъда", loc_sg_3="юртунда", nom_pl="юртлар", nom_pl_1pl="юртларыбыз", nom_pl_1sg="юртларым", nom_pl_2pl="юртларыгъыз", nom_pl_2sg="юртларынгъ", nom_pl_3="юртлары", nom_sg="юрт", nom_sg_1pl="юртубуз", nom_sg_1sg="юртум", nom_sg_2pl="юртугъуз", nom_sg_2sg="юртунгъ", nom_sg_3="юрту"}
Failedёл (yol){abl_pl="ёллардан", abl_sg="ёлдан", acc_pl="ёлланы", acc_sg="ёлну", dat_pl="ёллагъа", dat_sg="ёлгъа", gen_pl="ёлланы", gen_sg="ёлну", loc_pl="ёлларда", loc_sg="ёлда", nom_pl="ёллар", nom_sg="ёл"}{abl_pl="ёллардан", abl_pl_1pl="ёлларыбыздан", abl_pl_1sg="ёлларымдан", abl_pl_2pl="ёлларыбыздан", abl_pl_2sg="ёлларынгъдан", abl_pl_3="ёлларындан", abl_sg="ёлдан", abl_sg_1pl="ёлубуздан", abl_sg_1sg="ёлумдан", abl_sg_2pl="ёлугъуздан", abl_sg_2sg="ёлунгъдан", abl_sg_3="ёлундан", acc_pl="ёлланы", acc_pl_1pl="ёлларыбызны", acc_pl_1sg="ёлларымны", acc_pl_2pl="ёлларыгъызны", acc_pl_2sg="ёлларынгъны", acc_pl_3="ёлларын", acc_sg="ёлну", acc_sg_1pl="ёлубузну", acc_sg_1sg="ёлумну", acc_sg_2pl="ёлугъузну", acc_sg_2sg="ёлунгъну", acc_sg_3="ёлун", dat_pl="ёллагъа", dat_pl_1pl="ёлларыбызгъа", dat_pl_1sg="ёлларыма", dat_pl_2pl="ёлларыгъызгъа", dat_pl_2sg="ёлларынгъа", dat_pl_3="ёлларына", dat_sg="ёлгъа", dat_sg_1pl="ёлубузгъа", dat_sg_1sg="ёлумгъа", dat_sg_2pl="ёлугъузгъа", dat_sg_2sg="ёлунгъа", dat_sg_3="ёлуна", gen_pl="ёлланы", gen_pl_1pl="ёлларыбызны", gen_pl_1sg="ёлларымны", gen_pl_2pl="ёлларыгъызны", gen_pl_2sg="ёлларынгъны", gen_pl_3="ёлларыны", gen_sg="ёлну", gen_sg_1pl="ёлубузну", gen_sg_1sg="ёлумну", gen_sg_2pl="ёлугъузну", gen_sg_2sg="ёлунгъну", gen_sg_3="ёлуну", loc_pl="ёлларда", loc_pl_1pl="ёлларыбызда", loc_pl_1sg="ёлларымда", loc_pl_2pl="ёлларыгъызда", loc_pl_2sg="ёлларынгъда", loc_pl_3="ёлларында", loc_sg="ёлда", loc_sg_1pl="ёлубузда", loc_sg_1sg="ёлумда", loc_sg_2pl="ёлугъузда", loc_sg_2sg="ёлунгъда", loc_sg_3="ёлунда", nom_pl="ёллар", nom_pl_1pl="ёлларыбыз", nom_pl_1sg="ёлларым", nom_pl_2pl="ёлларыгъыз", nom_pl_2sg="ёлларынгъ", nom_pl_3="ёллары", nom_sg="ёл", nom_sg_1pl="ёлубуз", nom_sg_1sg="ёлум", nom_sg_2pl="ёлугъуз", nom_sg_2sg="ёлунгъ", nom_sg_3="ёлу"}
TextExpectedActual
test_possessives:

local tests = require "Module:UnitTests"
local generate_forms = require "Module:kum-decl".generate_forms

local full_link = require "Module:links".full_link
local kum = require "Module:languages".getByCode("kum")
local function link(term)
	return full_link({ term = term, lang = kum })
end

local number_abbrs = { "sg", "pl" }
local case_abbrs = { "nom", "acc", "dat", "loc", "abl", "gen" }
local poss_abbrs = { "1_sg", "1_pl", "2_sg", "2_pl", "3" }

local function bare_ipairs(t)
	local i = 1
	return function()
		local v = t[i]
		if v then
			i = i + 1
			return v
		end
	end
end

function tests.parse_noun_forms(text)
	local forms = {}
	local number_iter = bare_ipairs(number_abbrs)
	local is_back = false
	if text:find "back%s*$" then
		text = text:match("^(.-)%s*back%s*$")
		is_back = true
	end
	for line in text:gmatch("[^\n]+") do
		local number = number_iter()
		assert(number)
		local case_iter = bare_ipairs(case_abbrs)
		for word in line:gmatch("%S+") do
			local case = case_iter()
			assert(case, "no case for " .. word)
			forms[case .. "_" .. number] = word
		end
	end
	return forms, is_back
end

local forms = [[
ата    атаны   атагъа   атада    атадан    атаны
аталар аталаны аталагъа аталарда аталардан аталаны]]

function tests:test_noun_declension()
	local examples = {
		[[эл    элни   элге   элде    элден    элни
          эллер эллени эллеге эллерде эллерден эллени]],
		
		[[ата    атаны   атагъа   атада    атадан    атаны
          аталар аталаны аталагъа аталарда аталардан аталаны]],
		
		[[къол    къолну   къолгъа   къолда    къолдан    къолну
          къоллар къолланы къоллагъа къолларда къоллардан къолланы]],
		
		[[уьй    уьйню   уьйге   уьйде    уьйден    уьйню
          уьйлер уьйлени уьйлеге уьйлерде уьйлерден уьйлени]],
		
		[[яш    яшны   яшгъа   яшда    яшдан    яшны
          яшлар яшланы яшлагъа яшларда яшлардан яшланы]],
        
        [[юрт    юртну   юртгъа   юртда    юртдан    юртну
          юртлар юртланы юртлагъа юртларда юртлардан юртланы
          back]],
        [[ёл    ёлну   ёлгъа   ёлда    ёлдан    ёлну
		  ёллар ёлланы ёллагъа ёлларда ёллардан ёлланы
		  back]],
	}
	
	for _, example in ipairs(examples) do
		local lemma = example:match("^%S+")
		local expected, is_back = self.parse_noun_forms(example)
		self:equals_deep(
			link(lemma),
			generate_forms(lemma, nil, is_back),
			expected)
	end
end

function tests.parse_possessives(text)
	local lemma, rest = text:match "^([^\n]+)\n(.+)$"
	if not lemma then error("invalid format") end
	lemma = mw.text.trim(lemma)
	
	local poss_paradigms = {}
	local poss_abbr = bare_ipairs(poss_abbrs)
	-- Find pairs of lines containing at least one non-whitespace character.
	for forms in rest:gmatch "[^\n]*%S[^\n]+\n[^\n]*%S[^\n]+" do
		poss_paradigms[poss_abbr()] = tests.parse_noun_forms(forms)
	end
	
	-- Check that we have the right number of possessive paradigms.
	assert(poss_abbr() == nil)
	
	poss_paradigms.lemma = lemma
	mw.logObject(poss_paradigms, "poss_paradigms")
	
	return poss_paradigms
end

function tests:test_possessives()
	local examples = {
		[[
		эл
		элим элимни элиме элимде элимден элимни
		эллерим эллеримни эллериме эллеримде эллеримден эллеримни
		
		элибиз элибизни элибизге элибизде элибизден элибизни
		эллерибиз эллерибизни эллерибизге эллерибизде эллерибизден эллерибизни
		
		элинг элингни элинге элингде элингден элингни
		эллеринг эллерингни эллеринге эллерингде эллерингден эллерингни
		
		элигиз элигизни элигизге элигизде элигизден элигизни
		эллеригиз эллеригизни эллеригизге эллеригизде эллеригизден эллеригизни
		
		эли элин элине элинде элинден элини
		эллери эллерин эллерине эллеринде эллеринден эллеринни]],
		[[
		яш
		яшым яшымны яшыма яшымда яшымдан яшымны
		яшларым яшларымны яшларыма яшларымда яшларымдан яшларым
		
		яшыбыз яшыбызны яшыбызгъа яшыбызда яшыбыздан яшыбызны
		яшларым яшларымны яшларыма яшларымда яшларымдан яшларым
		
		яшынг яшынгны яшынга яшынгда яшынгдан яшынгны
		яшларынг яшларынгны яшларынга яшларынгда яшларынгдан яшларынгны
		
		яшыгъыз яшыгъызны яшыгъызгъа яшыгъызда яшыгъыздан яшыгъызны
		яшларыгъыз яшларыгъызны яшларыгъызгъа яшларыгъызда яшларыгъыздан яшларыгъызны
		
		яшы яшын яшына яшында яшындан яшыны
		яшлары яшларын яшларына яшларында яшларындан яшларыны]]
	}
	
	for example in bare_ipairs(examples) do
		assert(tests.parse_possessives(example))
	end
end

function tests.show()
	return tests.parse_noun_forms(forms)
end

return tests