وحدة:ar-verb/مختبر
المظهر
(بالتحويل من وحدة:ar-verb/testcases)
| هذه صفحة مختبر للوحدة وحدة:ar-verb. نتائج هذا الاختبار. |
-- Unit tests for [[Module:ar-verb]]. Click talk page to run tests.
-- اختبارات الوحدة. انقر على صفحة النقاش لعرض النتائج
-- 🚧 Work In Progress !!
local tests = require("Module:UnitTests")
local m_ar_verb = require("Module:ar-verb")
-- ═══════════════════════════════════════════════════════════
-- Utilities required for some tests
-- ═══════════════════════════════════════════════════════════
local m_string_utilities = require("Module:string utilities")
local u = m_string_utilities.char
-- ═══════════════════════════════════════════════════════════
function tests:test_conj_form_I()
local result = m_ar_verb.do_generate_forms({["جذر"] = "كتب", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("كتب، فعَل يفعُل، هو، الماضي", "كَتَبَ", result.forms.past_3ms[1].form)
self:equals("كتب، فعَل يفعُل، هو، المضارع", "يَكْتُبُ", result.forms.ind_3ms[1].form)
self:equals("كتب، فعَل يفعُل، أنتَ، الأمر", "اُكْتُبْ", result.forms.imp_2ms[1].form)
self:equals("كتب، فعَل يفعُل، اسم الفاعل", "كَاتِب", result.forms.ap[1].form)
self:equals("كتب، فعَل يفعُل، اسم المفعول", "مَكْتُوب", result.forms.pp[1].form)
self:equals("كتب، فعَل يفعُل، له معلوم", true, result.has_active)
self:equals("كتب، فعَل يفعُل، له مجهول", true, result.has_passive)
self:equals("كتب، فعَل يفعُل، الوزن I", "I", result.verb_forms[1])
end
function tests:test_conj_form_II()
local result = m_ar_verb.do_generate_forms({["جذر"] = "درس", ["وزن"] = "فعّل"}, "ar-conj")
self:equals("درس، فعّل، هو، الماضي", "دَرَّسَ", result.forms.past_3ms[1].form)
self:equals("درس، فعّل، هو، المضارع", "يُدَرِّسُ", result.forms.ind_3ms[1].form)
self:equals("درس، فعّل، أنتَ، الأمر", "دَرِّسْ", result.forms.imp_2ms[1].form)
self:equals("درس، فعّل، اسم الفاعل", "مُدَرِّس", result.forms.ap[1].form)
self:equals("درس، فعّل، اسم المفعول", "مُدَرَّس", result.forms.pp[1].form)
self:equals("درس، فعّل، المصدر", "تَدْرِيس", result.forms.vn[1].form)
end
function tests:test_conj_form_III()
local result = m_ar_verb.do_generate_forms({["جذر"] = "قتل", ["وزن"] = "فاعل"}, "ar-conj")
self:equals("قتل، فاعل، هو، الماضي", "قَاتَلَ", result.forms.past_3ms[1].form)
self:equals("قتل، فاعل، هو، المضارع", "يُقَاتِلُ", result.forms.ind_3ms[1].form)
self:equals("قتل، فاعل، أنتَ، الأمر", "قَاتِلْ", result.forms.imp_2ms[1].form)
self:equals("قتل، فاعل، اسم الفاعل", "مُقَاتِل", result.forms.ap[1].form)
self:equals("قتل، فاعل، اسم المفعول", "مُقَاتَل", result.forms.pp[1].form)
end
function tests:test_conj_form_IV()
local result = m_ar_verb.do_generate_forms({["جذر"] = "رسل", ["وزن"] = "أفعل"}, "ar-conj")
self:equals("رسل، أفعل، هو، الماضي", "أَرْسَلَ", result.forms.past_3ms[1].form)
self:equals("رسل، أفعل، هو، المضارع", "يُرْسِلُ", result.forms.ind_3ms[1].form)
self:equals("رسل، أفعل، أنتَ، الأمر", "أَرْسِلْ", result.forms.imp_2ms[1].form)
self:equals("رسل، أفعل، اسم الفاعل", "مُرْسِل", result.forms.ap[1].form)
self:equals("رسل، أفعل، اسم المفعول", "مُرْسَل", result.forms.pp[1].form)
local result_akhyala = m_ar_verb.do_generate_forms({["جذر"] = "خ_ي_ل", ["وزن"] = "أفعل"}, "ar-conj")
self:equals("خيل، أفعل، هو، الماضي", "أَخْيَلَ", result_akhyala.forms.past_3ms[1].form)
local result_atyaba = m_ar_verb.do_generate_forms({["جذر"] = "ط_ي_ب", ["وزن"] = "أفعل"}, "ar-conj")
self:equals("طيب، أفعل، هو، الماضي", "أَطْيَبَ", result_atyaba.forms.past_3ms[1].form)
end
function tests:test_conj_weak()
local result = m_ar_verb.do_generate_forms({["جذر"] = "قول", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("قول، فعَل يفعُل، هو، الماضي", "قَالَ", result.forms.past_3ms[1].form)
self:equals("قول، فعَل يفعُل، هو، المضارع", "يَقُولُ", result.forms.ind_3ms[1].form)
self:equals("قول، فعَل يفعُل، أنتَ، الأمر", "قُلْ", result.forms.imp_2ms[1].form)
local result = m_ar_verb.do_generate_forms({["جذر"] = "رمي", ["وزن"] = "فعَل يفعِل"}, "ar-conj")
self:equals("رمي، فعَل يفعِل، هو، الماضي", "رَمَى", result.forms.past_3ms[1].form)
self:equals("رمي، فعَل يفعِل، هو، المضارع", "يَرْمِي", result.forms.ind_3ms[1].form)
self:equals("رمي، فعَل يفعِل، أنتَ، الأمر", "اِرْمِ", result.forms.imp_2ms[1].form)
self:equals("رمي، فعَل يفعِل، اسم الفاعل", "رَامٍ", result.forms.ap[1].form)
local result = m_ar_verb.do_generate_forms({["جذر"] = "م_د_د", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("مدد، فعَل يفعُل، مضعَّف، هو، الماضي", "مَدَّ", result.forms.past_3ms[1].form)
local result = m_ar_verb.do_generate_forms({["جذر"] = "وصل", ["وزن"] = "فعَل يفعِل"}, "ar-conj")
self:equals("وصل، فعَل يفعِل، مثال، هو، الماضي", "وَصَلَ", result.forms.past_3ms[1].form)
self:equals("وصل، فعَل يفعِل، مثال، هو، المضارع", "يَصِلُ", result.forms.ind_3ms[1].form)
self:equals("وصل، فعَل يفعِل، مثال، أنت، الأمر", "صِلْ", result.forms.imp_2ms[1].form)
end
function tests:test_conj_with_underscores()
local result = m_ar_verb.do_generate_forms({["جذر"] = "ك_ت_ب", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("كتب، فعَل يفعُل، هو، الماضي", "كَتَبَ", result.forms.past_3ms[1].form)
self:equals("كتب، فعَل يفعُل، هو، المضارع", "يَكْتُبُ", result.forms.ind_3ms[1].form)
end
function tests:test_conj_with_spaces()
local result = m_ar_verb.do_generate_forms({["جذر"] = "ك ت ب", ["وزن"] = "فعَل يفعُل"}, "ar-conj")
self:equals("كتب، فعَل يفعُل، هو، الماضي", "كَتَبَ", result.forms.past_3ms[1].form)
self:equals("كتب، فعَل يفعُل، هو، المضارع", "يَكْتُبُ", result.forms.ind_3ms[1].form)
end
function tests:test_conj_passive_types()
local result_pass = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.pass>"}, "ar-conj")
self:equals("كتب، مبني للمجهول فقط", "pass", result_pass.passive)
local result_ipass = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.ipass>"}, "ar-conj")
self:equals("كتب، مجهول غير شخصي", "ipass", result_ipass.passive)
local result_nopass = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.nopass>"}, "ar-conj")
self:equals("كتب، بدون مجهول", "nopass", result_nopass.passive)
self:equals("كتب، بدون مجهول، has_passive خطأ", false, result_nopass.has_passive)
end
function tests:test_conj_overrides()
local result = m_ar_verb.do_generate_forms({[1] = "كتب<I/a~u.vn:كِتَابَة>"}, "ar-conj")
self:equals("كتب، تجاوز المصدر", "كِتَابَة", result.forms.vn[1].form)
end
function tests:test_infer_radicals()
local result = m_ar_verb.infer_radicals({
headword = "كتب",
vform = "I"
})
self:equals("كتب، نوع الضعف: صحيح", "sound", result.weakness)
self:equals("كتب، حرف الجذر الأول: ك", "ك", result.rad1)
self:equals("كتب، حرف الجذر الثاني: ت", "ت", result.rad2)
self:equals("كتب، حرف الجذر الثالث: ب", "ب", result.rad3)
local U = u(0x064F) -- ḍamma
local result = m_ar_verb.infer_radicals({
headword = "قال",
vform = "I",
nonpast_vowel = U
})
self:equals("قال، نوع الضعف: أجوف", "hollow", result.weakness)
self:equals("قال، حرف الجذر الأول: ق", "ق", result.rad1)
self:equals("قال، حرف الجذر الثاني: و (مستنتج)", "و", result.rad2)
self:equals("قال، حرف الجذر الثالث: ل", "ل", result.rad3)
local result = m_ar_verb.infer_radicals({
headword = "رمى",
vform = "I"
})
self:equals("رمى، نوع الضعف: ناقص", "final-weak", result.weakness)
self:equals("رمى، حرف الجذر الأول: ر", "ر", result.rad1)
self:equals("رمى، حرف الجذر الثاني: م", "م", result.rad2)
self:equals("رمى، حرف الجذر الثالث: ي", "ي", result.rad3)
end
function tests:test_infer_participle_vocalization()
local result = m_ar_verb.infer_participle_vocalization("كاتب", "I", "sound", true)
self:equals("كاتب، تشكيل اسم الفاعل", "كَاتِب", result)
local result = m_ar_verb.infer_participle_vocalization("مكتوب", "I", "sound", false)
self:equals("مكتوب، تشكيل اسم المفعول", "مَكْتُوب", result)
local result = m_ar_verb.infer_participle_vocalization("مدرس", "II", "sound", true)
self:equals("مدرس، فعّل، تشكيل اسم الفاعل", "مُدَرِّس", result)
end
-- ═══════════════════════════════════════════════════════════
-- Tests for classify_triliteral_verb function
-- ═══════════════════════════════════════════════════════════
-- الصحيح
function tests:test_verb_classify_sound()
self:equals("كتب", "صحيح سالم", m_ar_verb.classify_triliteral_verb("ك", "ت", "ب"))
self:equals("ذهب", "صحيح سالم", m_ar_verb.classify_triliteral_verb("ذ", "ه", "ب"))
self:equals("فعل", "صحيح سالم", m_ar_verb.classify_triliteral_verb("ف", "ع", "ل"))
self:equals("مدّ", "صحيح مُضعَّف", m_ar_verb.classify_triliteral_verb("م", "د", "د"))
self:equals("شدّ", "صحيح مُضعَّف", m_ar_verb.classify_triliteral_verb("ش", "د", "د"))
self:equals("عدّ", "صحيح مُضعَّف", m_ar_verb.classify_triliteral_verb("ع", "د", "د"))
self:equals("أخذ", "صحيح مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "خ", "ذ"))
self:equals("أكل", "صحيح مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "ك", "ل"))
self:equals("سأل", "صحيح مهموز العين", m_ar_verb.classify_triliteral_verb("س", "أ", "ل"))
self:equals("قرأ", "صحيح مهموز اللام", m_ar_verb.classify_triliteral_verb("ق", "ر", "أ"))
self:equals("أبأ", "صحيح مهموز الفاء واللام", m_ar_verb.classify_triliteral_verb("أ", "ب", "أ"))
end
-- المعتل
function tests:test_verb_classify_weak()
self:equals("وجد", "معتل مثال واوي", m_ar_verb.classify_triliteral_verb("و", "ج", "د"))
self:equals("وقف", "معتل مثال واوي", m_ar_verb.classify_triliteral_verb("و", "ق", "ف"))
self:equals("وضأ", "معتل مثال واوي مهموز اللام", m_ar_verb.classify_triliteral_verb("و", "ض", "أ"))
self:equals("يسر", "معتل مثال يائي", m_ar_verb.classify_triliteral_verb("ي", "س", "ر"))
self:equals("يئس", "معتل مثال يائي مهموز العين", m_ar_verb.classify_triliteral_verb("ي", "أ", "س"))
self:equals("قال", "معتل أجوف واوي", m_ar_verb.classify_triliteral_verb("ق", "و", "ل"))
self:equals("صام", "معتل أجوف واوي", m_ar_verb.classify_triliteral_verb("ص", "و", "م"))
self:equals("باع", "معتل أجوف يائي", m_ar_verb.classify_triliteral_verb("ب", "ي", "ع"))
self:equals("نام", "معتل أجوف واوي", m_ar_verb.classify_triliteral_verb("ن", "و", "م"))
self:equals("دعا", "معتل ناقص واوي", m_ar_verb.classify_triliteral_verb("د", "ع", "و"))
self:equals("سما", "معتل ناقص واوي", m_ar_verb.classify_triliteral_verb("س", "م", "و"))
self:equals("رمى", "معتل ناقص يائي", m_ar_verb.classify_triliteral_verb("ر", "م", "ي"))
self:equals("بكى", "معتل ناقص يائي", m_ar_verb.classify_triliteral_verb("ب", "ك", "ي"))
-- لفيف مقرون (adjacent weak letters)
self:equals("ويّ", "معتل لفيف مقرون", m_ar_verb.classify_triliteral_verb("و", "ي", "ي"))
self:equals("أوى", "معتل لفيف مقرون مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "و", "ي"))
-- لفيف مفروق (separated weak letters)
self:equals("وقى", "معتل لفيف مفروق", m_ar_verb.classify_triliteral_verb("و", "ق", "ي"))
self:equals("وأى", "معتل لفيف مفروق مهموز العين", m_ar_verb.classify_triliteral_verb("و", "أ", "ي"))
-- Combined weaknesses
self:equals("أول", "معتل أجوف واوي مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "و", "ل"))
self:equals("قوأ", "معتل أجوف واوي مهموز اللام", m_ar_verb.classify_triliteral_verb("ق", "و", "أ"))
self:equals("أيب", "معتل أجوف يائي مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "ي", "ب"))
self:equals("جيأ", "معتل أجوف يائي مهموز اللام", m_ar_verb.classify_triliteral_verb("ج", "ي", "أ"))
self:equals("رأو", "معتل ناقص واوي مهموز العين", m_ar_verb.classify_triliteral_verb("ر", "أ", "و"))
self:equals("شأي", "معتل ناقص يائي مهموز العين", m_ar_verb.classify_triliteral_verb("ش", "أ", "ي"))
self:equals("ودد", "معتل مثال واوي مُضعَّف", m_ar_verb.classify_triliteral_verb("و", "د", "د"))
self:equals("ينن", "معتل مثال يائي مُضعَّف", m_ar_verb.classify_triliteral_verb("ي", "ن", "ن"))
self:equals("وأب", "معتل مثال واوي مهموز العين", m_ar_verb.classify_triliteral_verb("و", "أ", "ب"))
self:equals("أبب", "صحيح مُضعَّف مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "ب", "ب"))
self:equals("أتى", "معتل ناقص يائي مهموز الفاء", m_ar_verb.classify_triliteral_verb("أ", "ت", "ي"))
self:equals("قلا", "معتل ناقص واوي", m_ar_verb.classify_triliteral_verb("ق", "ل", "و"))
self:equals("نما (و)", "معتل ناقص واوي", m_ar_verb.classify_triliteral_verb("ن", "م", "و"))
self:equals("نمى (ي)", "معتل ناقص يائي", m_ar_verb.classify_triliteral_verb("ن", "م", "ي"))
self:equals("يئس", "معتل مثال يائي مهموز العين", m_ar_verb.classify_triliteral_verb("ي", "أ", "س"))
end
return tests