মডিউল:pi-conj/verb/testcases
এই মডিউলের জন্য মডিউল:pi-conj/verb/testcases/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে
local tests = require('Module:UnitTests')
local m_conj_verb = require('Module:pi-conj/verb')
local to_script = require("Module:pi-Latn-translit").tr
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local sub = mw.ustring.sub
local u = mw.ustring.char
-- tests.sc="Lana"
tests.sc = "Latn"
tests.option = {impl="yes"}
local spaceJoin = function(vals)
output = ""
for i, v in ipairs(vals) do
if output == "" then
output = v
else
output = output.." "..v
end
end
return output
end
local empty6 = {{}, {}, {}, {}, {}, {}}
local num = {[1] = 1, [3] = 2, [5] = 3}
local comp_lists = function(vref, vgot, label, tablet1, tablet2)
local exp, got
if tablet2 then
exp = spaceJoin(vref[tablet1] or {})..' ; '..
spaceJoin(vref[tablet2] or {})
got = spaceJoin(vgot[tablet1] or {})..' ; '..
spaceJoin(vgot[tablet2] or {})
else
exp = spaceJoin(vref[tablet1] or {})
got = spaceJoin(vgot[tablet1] or {})
end
tests:equals(label, got, to_script(exp, tests.sc, tests.option))
end
local pass_through = function(x) return x end
local knockout = function(forms)
retval = {}
for _, v in pairs(forms) do
if not match(v, "[โเໂເ][มวມວ]["..u(0x0e3a)..u(0x0eba)..']') then
table.insert(retval, v)
end
end
return retval
end
local compare = function(vref, vgot, label, tablet1, tablet2)
local exp, got
local r1 = vref[tablet1] or empty6
local g1 = vgot[tablet1] or empty6
local r2, g2
if tablet2 then
r2 = vref[tablet2] or empty6
g2 = vgot[tablet2] or empty6
end
local f
if (tests.sc == "Thai" or tests.sc == "Laoo") and
tests.option.impl ~= "no" then
f = knockout
else
f = pass_through
end
for i = 1, 5, 2 do
if tablet2 then
exp = spaceJoin(r1[i])..' ; '..spaceJoin(r1[i+1])
..' ; '..spaceJoin(r2[i])..' ; '..spaceJoin(r2[i+1])
got = spaceJoin(f(g1[i]))..' ; '..spaceJoin(f(g1[i+1]))
..' ; '..spaceJoin(f(g2[i]))..' ; '..spaceJoin(f(g2[i+1]))
else
exp = spaceJoin(r1[i])..' ; '..spaceJoin(r1[i+1])
got = spaceJoin(f(g1[i]))..' ; '..spaceJoin(f(g1[i+1]))
end
tests:equals(label..num[i], got, to_script(exp, tests.sc, tests.option))
end
end
local pacati_ref = {
presa = {
{"pacāmi"}, {"pacāma"}, {"pacasi"}, {"pacatha"},
{"pacati"}, {"pacanti"}
},
presm = {
{"pace"}, {"pacāmhe"}, {"pacase"}, {"pacavhe"},
{"pacate"}, {"pacante", "pacare"}
},
impfa = {
{"apaca", "apacaṃ"}, {"apacamhā"},
{"apaco"}, {"apacattha"},
{"apaca", "apacā"}, {"apacu", "apacū"}
},
impfm = {
{"apaciṃ"}, {"apacāmhase", "apacamhase"},
{"apacase"}, {"apacavhaṃ"},
{"apacattha"}, {"apacatthuṃ"}
},
impra = {
{"pacāmi"}, {"pacāma"}, {"paca", "pacāhi"}, {"pacatha"},
{"pacatu"}, {"pacantu"}
},
imprm = {
{"pace"}, {"pacāmase"}, {"pacassu"}, {"pacavho"},
{"pacataṃ"}, {"pacantaṃ"}
},
optaa = {
{"paceyyāmi", "paceyyaṃ", "pace"}, {"paceyyāma"},
{"paceyyāsi", "pace"}, {"paceyyātha"},
{"paceyya", "pace"}, {"paceyyuṃ"}
},
optaa_irr = {
{"paceyyāmi", "paceyyaṃ"}, {"paceyyāma"},
{"paceyyāsi"}, {"paceyyātha"},
{"paceyya"}, {"paceyyuṃ"}
},
optam = {
{"paceyyaṃ"}, {"paceyyāmhe"}, {"pacetho"}, {"paceyyavho"},
{"pacetha"}, {"paceraṃ"}
},
pap = {"pacant"},
pmp = {"pacamāna"},
}
local corayati_ref = {
presa = {
{"corayāmi"}, {"corayāma"}, {"corayasi"}, {"corayatha"},
{"corayati"}, {"corayanti"}
},
presm = {
{"coraye"}, {"corayāmhe"}, {"corayase"}, {"corayavhe"},
{"corayate"}, {"corayante", "corayare"}
},
impfa = {
{"coraya", "corayaṃ"}, {"corayamhā"},
{"corayo"}, {"corayattha"},
{"coraya", "corayā"}, {"corayu", "corayū"}
},
impfm = {
{"corayiṃ"}, {"corayāmhase", "corayamhase"},
{"corayase"}, {"corayavhaṃ"},
{"corayattha"}, {"corayatthuṃ"}
},
impra = {
{"corayāmi"}, {"corayāma"}, {"corayāhi"}, {"corayatha"},
{"corayatu"}, {"corayantu"}
},
imprm = {
{"coraye"}, {"corayāmase"}, {"corayassu"}, {"corayavho"},
{}, {"corayantaṃ"} -- 3s deleted pending review!
},
optaa = {
{"corayeyyāmi", "corayeyyaṃ"}, {"corayeyyāma"}, --aye 1s & 2s needs
{"corayeyyāsi"}, {"corayeyyātha"}, -- attestation.
{"corayeyya", "coraye"}, {"corayeyyuṃ"}
},
optam = {
{"corayeyyaṃ"}, {"corayeyyāmhe"}, {"corayetho"}, {"corayeyyavho"},
{"corayetha"}, {"corayeraṃ"}
},
pap = {"corayant"},
pmp = {"corayamāna"},
}
local coreti_ref = {
presa = {
{"coremi"}, {"corema"}, {"coresi"}, {"coretha"},
{"coreti"}, {"corenti"}
},
impra = {
{"coremi"}, {"corema"}, {"corehi"}, {"coretha"},
{"coretu"}, {"corentu"}
},
optaa = {
{"coreyyāmi", "coreyyaṃ"}, {"coreyyāma"}, --aye 1s & 2s needs
{"coreyyāsi"}, {"coreyyātha"}, -- attestation.
{"coreyya"}, {"coreyyuṃ"}
},
optam = {
{"coreyyaṃ"}, {"coreyyāmhe"}, {"coretho"}, {"coreyyavho"},
{"coretha"}, {"coreraṃ"}
},
pap = {"corent"},
}
local corete_ref = {
presm = {
{"coraye"}, {"corayāmhe"}, {"corayase"}, {"corayavhe"},
{"corayate"}, {"corayante", "corayare"}
},
imprm = {
{"coraye"}, {"corayāmase"}, {"corayassu"}, {"corayavho"},
{}, {"corayantaṃ"} -- 3s deleted pending review!
},
optaa = coreti_ref.optaa,
optam = coreti_ref.optam,
pmp = {"corayamāna"},
}
local tanoti_ref = { -- Middle forms
presa = {
{"tanomi"}, {"tanoma"}, {"tanosi"}, {"tanotha"},
{"tanoti"}, {"tanonti"}
},
presm = {
{"tanve"}, {"tanumhe"}, {"tanuse"}, {"tanuvhe"},
{"tanute"}, {"tanunte", "tanure"}
},
impra = {
{"tanomi"}, {"tanoma"}, {"tanohi"}, {"tanotha"},
{"tanotu"}, {"tanontu"}
},
imprm = {
{"tanve"}, {"tanvāmase"}, {"tanussu"}, {"tanuvho"},
{"tanutaṃ"}, {"tanuntaṃ"}
},
optaa = {
{"taneyyāmi", "taneyyaṃ"}, {"taneyyāma"},
{"taneyyāsi"}, {"taneyyātha"},
{"taneyya"}, {"taneyyuṃ"}
},
optam = {
{"taneyyaṃ"}, {"taneyyāmhe"}, {"tanetho"}, {"taneyyavho"},
{"tanetha"}, {"taneraṃ"}
},
pap = {"tanont"},
}
local dadati_ref = {
presa = {
{"dadāmi"}, {"dadāma"}, {"dadāsi"}, {"dadātha"},
{"dadāti"}, {"dadanti"}
},
presm = {
{"dade"}, {"dadāmhe"}, {"dadāse"}, {"dadavhe"},
{"dadāte"}, {"dadante", "dadāre"}
},
impfa = {
{"adada", "adadaṃ"}, {"adadamhā"},
{"adado"}, {"adadattha"},
{"adada", "adadā"}, {"adadu", "adadū"}
},
impfm_disabled = {
{"adadiṃ"}, {"adadāmhase", "adadamhase"},
{"adadase"}, {"adadavhaṃ"},
{"adadattha"}, {"adadatthuṃ"}
},
impra = {
{"dadāmi"}, {"dadāma"}, {"dadā", "dadāhi"}, {"dadātha"},
{"dadātu"}, {"dadantu"}
},
optaa = {
{"dadeyyāmi", "dadeyyaṃ"}, {"dadeyyāma"}, -- "dade" is exceptional.
{"dadeyyāsi"}, {"dadeyyātha"}, -- "dade" is exceptional.
{"dadeyya", "dade"}, {"dadeyyuṃ"}
},
optam = {
{"dadeyyaṃ"}, {"dadeyyāmhe"}, {"dadetho"}, {"dadeyyavho"},
{"dadetha"}, {"daderaṃ"}
},
pap = {"dadant"},
pmp = {"dadamāna"},
}
local dajja_ref = {
optaa = {
{"dajjāmi"}, {"dajjāma"}, {"dajjāsi"}, {"dajjātha"},
{"dajjā"}, {"dajjuṃ"}},
}
-- function tests:test_basic_tables()
function tests:test_ati()
local impl = tests.option.impl or "yes"
local pacati = to_script("pacati", tests.sc, tests.option)
local pacati_got = m_conj_verb.special_forms(pacati,
{augment="with_made", impf_voice="both", impl = impl})
compare(pacati_ref, pacati_got, "pacati pres ", "presa", "presm")
compare(pacati_ref, pacati_got, "pacati impf ", "impfa", "impfm")
compare(pacati_ref, pacati_got, "pacati impr ", "impra", "imprm")
compare(pacati_ref, pacati_got, "pacati opt ", "optaa", "optam")
comp_lists(pacati_ref, pacati_got, "pacati part ", "pap", "pmp")
local pacate = to_script("pacate", tests.sc, tests.option)
local pacate_got = m_conj_verb.special_forms(pacate,
{ augment="with_made", impf_voice="both", opta_voice = "both",
impl = impl })
compare(pacati_ref, pacate_got, "pacate pres ", "presm")
compare(pacati_ref, pacate_got, "pacate impf ", "impfm")
compare(pacati_ref, pacate_got, "pacate impr ", "imprm")
compare(pacati_ref, pacate_got, "pacate opt ", "optaa", "optam")
comp_lists(pacati_ref, pacate_got, "pacate part ", "pmp")
local namati = to_script("namati", tests.sc, tests.option)
local apaca = to_script("apaca", tests.sc, tests.option)
local apaca_got = m_conj_verb.special_forms(namati,
{ impf_voice="both", impf=apaca, impf2=apaca, augment="with_given",
impl = impl })
compare(pacati_ref, apaca_got, "apaca impf ", "impfa", "impfm")
local namate = to_script("namate", tests.sc, tests.option)
local nama = to_script("nama", tests.sc, tests.option)
local apacattha = to_script("apacattha", tests.sc, tests.option)
local apacattha_got = m_conj_verb.special_forms(namati,
{midl=namate, impf_voice="midl", impl = impl,
impf=nama, impf_midl=apacattha, augment="with_given"})
compare(pacati_ref, apacattha_got, "apacattha impf m", "impfm")
-- if nil then -- Unusability is a deliberate, documented feature, not a bug.
-- local pace = to_script("pace", tests.sc, tests.option)
-- local pace_got = m_conj_verb.special_forms("namati", {
-- opta_mod="replace", opta=pace})
-- compare(pacati_ref, pace_got, "pace opt ", "optaa", "optam")
-- end
local paceyya = to_script("paceyya", tests.sc, tests.option)
local paceyya_got = m_conj_verb.special_forms(namati, {
opta_mod="replace", opta=paceyya, impl = impl})
local paceyya_ref = { optaa = pacati_ref.optaa_irr,
optam = pacati_ref.optam }
compare(paceyya_ref, paceyya_got, "paceyya opt ", "optaa", "optam")
local pacetha = to_script("pacetha", tests.sc, tests.option)
local pacetha_got = m_conj_verb.special_forms(namati, {
opta_midl=pacetha, impl = impl})
if nil then -- This is useful as a selectional test.
compare(pacati_ref, pacetha_got, "pacetha opt ", "optaa", "optam")
end
compare(pacati_ref, pacetha_got, "pacetha opt m", "optam")
end
-- Stems in -ayati have differences from -ati that aren't captured by -eti.
function tests:test_ayati()
local impl = tests.option.impl or "yes"
local corayati = to_script("corayati", tests.sc, tests.option)
local corayati_got = m_conj_verb.special_forms(corayati,
{impf_voice="both", augment="without", impl = impl})
compare(corayati_ref, corayati_got, "corayati pres ", "presa", "presm")
compare(corayati_ref, corayati_got, "corayati impf ", "impfa", "impfm")
compare(corayati_ref, corayati_got, "corayati impr ", "impra", "imprm")
compare(corayati_ref, corayati_got, "corayati opt ", "optaa", "optam")
comp_lists(corayati_ref, corayati_got, "corayati part ", "pap", "pmp")
corayate = to_script("corayate", tests.sc, tests.option)
local corayate_got = m_conj_verb.special_forms(corayate,
{impf_voice="both", augment="without", opta_voice = "both", impl = impl})
compare(corayati_ref, corayate_got, "corayate pres ", "presm")
compare(corayati_ref, corayate_got, "corayate impf ", "impfm")
compare(corayati_ref, corayate_got, "corayate impr ", "imprm")
compare(corayati_ref, corayate_got, "corayate opt ", "optaa", "optam")
comp_lists(corayati_ref, corayate_got, "corayate part ", "pmp")
namati = to_script("namati", tests.sc, tests.option)
coraya = to_script("coraya", tests.sc, tests.option)
local coraya_got = m_conj_verb.special_forms(namati,
{impf_voice="both", impf=coraya, augment="with_given", impl = impl})
compare(corayati_ref, coraya_got, "coraya impf ", "impfa", "impfm")
nama = to_script("nama", tests.sc, tests.option)
namate = to_script("namate", tests.sc, tests.option)
corayattha = to_script("corayattha", tests.sc, tests.option)
local corayattha_got = m_conj_verb.special_forms(namati,
{midl=namate, impf_voice="midl",
impf=nama, impf_midl=corayattha, augment="with_given"})
compare(corayati_ref, corayattha_got, "corayattha impf m", "impfm")
end
function tests:test_eti()
local impl = tests.option.impl or "yes"
local coreti = to_script("coreti", tests.sc, tests.option)
local coreti_got = m_conj_verb.special_forms(coreti,
{augment="without", impf_voice="both", impl = impl})
compare(coreti_ref, coreti_got, "coreti pres ", "presa", "presm")
compare(coreti_ref, coreti_got, "coreti impf ", "impfa", "impfm")
compare(coreti_ref, coreti_got, "coreti impr ", "impra", "imprm")
compare(coreti_ref, coreti_got, "coreti opt ", "optaa", "optam")
comp_lists(coreti_ref, coreti_got, "coreti part ", "pap", "pmp")
local corete = to_script("corete", tests.sc, tests.option)
local corete_got = m_conj_verb.special_forms(corete,
{ augment="without", impf_voice="both", opta_voice="both",
impl=impl })
compare(corete_ref, corete_got, "corete pres ", "presm")
compare(corete_ref, corete_got, "corete impf ", "impfm")
compare(corete_ref, corete_got, "corete impr ", "imprm")
compare(corete_ref, corete_got, "corete opt ", "optaa", "optam")
comp_lists(corete_ref, corete_got, "corete part ", "pmp")
end
function tests:test_oti()
local impl = tests.option.impl or "yes"
local tanoti = to_script("tanoti", tests.sc, tests.option)
local tanoti_got = m_conj_verb.special_forms(tanoti,
{augment="without", impf_voice="both", impl=impl})
compare(tanoti_ref, tanoti_got, "tanoti pres ", "presa", "presm")
compare(tanoti_ref, tanoti_got, "tanoti impf ", "impfa", "impfm")
compare(tanoti_ref, tanoti_got, "tanoti impr ", "impra", "imprm")
compare(tanoti_ref, tanoti_got, "tanoti opt ", "optaa", "optam")
comp_lists(tanoti_ref, tanoti_got, "tanoti part ", "pap", "pmp")
local tanute = to_script("tanute", tests.sc, tests.option)
local tanute_got = m_conj_verb.special_forms(tanute,
{ augment="without", impf_voice="both", opta_voice = "both",
impl=impl })
compare(tanoti_ref, tanute_got, "tanute pres ", "presm")
compare(tanoti_ref, tanute_got, "tanute impf ", "impfm")
compare(tanoti_ref, tanute_got, "tanute impr ", "imprm")
compare(tanoti_ref, tanute_got, "tanute opt ", "optaa", "optam")
comp_lists(tanoti_ref, tanute_got, "tanute part ", "pmp")
end
function tests:test_aati()
local impl = tests.option.impl or "yes"
local dadati = to_script("dadāti", tests.sc, tests.option)
local dadati_got = m_conj_verb.special_forms(dadati,
{augment="with_made", impf_voice="both", impl=impl})
compare(dadati_ref, dadati_got, "dadāti pres ", "presa", "presm")
compare(dadati_ref, dadati_got, "dadāti impf ", "impfa", "impfm")
compare(dadati_ref, dadati_got, "dadāti impr ", "impra", "imprm")
compare(dadati_ref, dadati_got, "dadāti opt ", "optaa", "optam")
comp_lists(dadati_ref, dadati_got, "dadāti part ", "pap", "pmp")
local dadate = to_script("dadāte", tests.sc, tests.option)
local dadate_got = m_conj_verb.special_forms(dadate,
{ augment="without", impf_voice="both", opta_voice="both",
impl = impl })
compare(dadati_ref, dadate_got, "dadāte pres ", "presm")
compare(dadati_ref, dadate_got, "dadāte impf ", "impfm")
compare(dadati_ref, dadate_got, "dadāte impr ", "imprm")
compare(dadati_ref, dadate_got, "dadāte opt ", "optaa", "optam")
comp_lists(dadati_ref, dadate_got, "dadāte part ", "pmp")
local dajja = to_script("dajjā", tests.sc, tests.option)
local dajja_got = m_conj_verb.special_forms(dadati,
{ voice="none", opta_voice="act", opta_mod="replace", opta=dajja,
impl=impl})
compare(dajja_ref, dajja_got, "dadāti alt opt a", "optaa")
end
return tests