<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Asa-convert%2Ftestcases</id>
	<title>Module:sa-convert/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://linguifex.com/w/index.php?action=history&amp;feed=atom&amp;title=Module%3Asa-convert%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:sa-convert/testcases&amp;action=history"/>
	<updated>2026-04-21T19:56:27Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:sa-convert/testcases&amp;diff=496483&amp;oldid=prev</id>
		<title>Sware: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:sa-convert/testcases&amp;diff=496483&amp;oldid=prev"/>
		<updated>2026-04-21T12:46:42Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:46, 21 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key mediawiki-mw_:diff:1.41:old-496482:rev-496483 --&gt;
&lt;/table&gt;</summary>
		<author><name>Sware</name></author>
	</entry>
	<entry>
		<id>https://linguifex.com/w/index.php?title=Module:sa-convert/testcases&amp;diff=496482&amp;oldid=prev</id>
		<title>wikt&gt;RichardW57: Support wikitext in reasons.  Added evidence-based Tamil tests.</title>
		<link rel="alternate" type="text/html" href="https://linguifex.com/w/index.php?title=Module:sa-convert/testcases&amp;diff=496482&amp;oldid=prev"/>
		<updated>2024-01-28T09:47:35Z</updated>

		<summary type="html">&lt;p&gt;Support wikitext in reasons.  Added evidence-based Tamil tests.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local tests = require(&amp;#039;Module:UnitTests&amp;#039;)&lt;br /&gt;
local tr = require(&amp;#039;Module:sa-convert&amp;#039;).tr&lt;br /&gt;
local m_languages = require(&amp;quot;Module:languages&amp;quot;)&lt;br /&gt;
local lang = m_languages.getByCode(&amp;quot;sa&amp;quot;)&lt;br /&gt;
local m_scripts = require(&amp;quot;Module:scripts&amp;quot;)&lt;br /&gt;
local deva_sc = m_scripts.getByCode(&amp;quot;Deva&amp;quot;)&lt;br /&gt;
local pali_fallback -- for transliteration.&lt;br /&gt;
local taml_fallback -- for transliteration.&lt;br /&gt;
&lt;br /&gt;
-- The cases are defined by the following fields:&lt;br /&gt;
-- Deva: The Devanagari form of the word; this is the input to the transliteration.&lt;br /&gt;
-- Beng etc.: The result of transliterating to that script code.  The following special script codes are&lt;br /&gt;
--            used: as-Beng.  The special value &amp;quot;except&amp;quot; may be used to suppress the use of this test when&lt;br /&gt;
--            the field all is supplied.  The special value &amp;quot;fakeit&amp;quot; will result in a test for that&lt;br /&gt;
--            script as though the field all had been supplied.&lt;br /&gt;
-- all: If this field is defined, the test is performed for all &amp;#039;supported&amp;#039; scripts.  In this case, if the&lt;br /&gt;
--      test result is not defined for a script, the&lt;br /&gt;
--      test is the usually weaker test that the Devanagari and the transliteration transliterate to the&lt;br /&gt;
--      Latin script the same.  Note that this fallback test may wrongly fail for the Bengali and Lao&lt;br /&gt;
--      scripts, so the required value of &amp;quot;except&amp;quot; exceptionally disables the test.&lt;br /&gt;
-- Beng_why etc.: Justification for the required result being what it is.&lt;br /&gt;
-- Beng_whynot etc.: Counter-argument.  This is intended for setting out an argument for the test being&lt;br /&gt;
--                     wrong until the some form of consensus is arrived at.&lt;br /&gt;
-- link: Whether the non-Latin forms should be made into links.&lt;br /&gt;
-- aborts: Whether there is a significant link of a conversion error causing the test as a whole&lt;br /&gt;
--         to halt.  Such cases are processed after the others.&lt;br /&gt;
&lt;br /&gt;
local cases = {&lt;br /&gt;
-- The first case, which may get commented out, is an example of how the test cases are set out.&lt;br /&gt;
	{&lt;br /&gt;
		Deva=&amp;quot;निर्वाण&amp;quot;, all=1, link = true,&lt;br /&gt;
		Beng=&amp;quot;নির্ব্বাণ&amp;quot;,&lt;br /&gt;
		Beng_why=&amp;quot;Commenting on Mason&amp;#039;s citation of the spelling of the word as निरव्वान on p10 of &amp;quot;..&lt;br /&gt;
		&amp;quot;Kaccayano&amp;#039;s Pali Gramar, Mazard comments in a footnote in his edition of the work, &amp;quot;..&lt;br /&gt;
		&amp;#039;&amp;quot;Mason here follows the Bangladeshi convention, doubling the v in nirvana. This is not &amp;#039;..&lt;br /&gt;
		&amp;#039;commonly found today in either Romanized or Devanagari Sanskrit, but remains the norm &amp;#039;..&lt;br /&gt;
		&amp;#039;in the classical Bengali typeset (Sadhubasa)--a relatively recent development in the &amp;#039;..&lt;br /&gt;
		&amp;quot;presses of Mason&amp;#039;s day (owed to Sir Charles Wilkins).&amp;quot;..&amp;#039;&amp;quot;&amp;#039;,&lt;br /&gt;
		Beng_whynot=&amp;quot;Modern Bengali writes নির্বাণ.&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
-- Burmese spelling of the above is rare and highly variable on the web!&lt;br /&gt;
	{ Deva = &amp;quot;गङ्गा&amp;quot;, all=1, Mymr=&amp;quot;ဂင်္ဂါ&amp;quot;, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;वीर&amp;quot;, [&amp;quot;as-Beng&amp;quot;]=&amp;quot;ৱীৰ&amp;quot;, Beng=&amp;quot;বীর&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;आचार्यैः&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;व्यञ्जन&amp;quot;, [&amp;quot;as-Beng&amp;quot;]=&amp;quot;fakeit&amp;quot;, Beng=&amp;quot;except&amp;quot;, Mymr=&amp;quot;fakeit&amp;quot;, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;गोपन&amp;quot;, all=1, link=true, Mymr=&amp;quot;ဂေါပန&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;प्राक्&amp;quot;, all=1, link=true, Mymr=&amp;quot;ပြာက်&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;क्रोध&amp;quot;, all=1, link=true, Thai=&amp;quot;โกฺรธ&amp;quot;,&lt;br /&gt;
		Thai_why=&amp;#039;RID gives etymology of โกรธ as &amp;quot;ส. โกฺรธ&amp;quot;.&amp;#039; },&lt;br /&gt;
	{ Deva=&amp;quot;आस्ये&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;#039;सऋक्ष&amp;#039;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;संस्कृतम्&amp;quot;, all=1, Java=&amp;quot;ꦱꦁꦱ꧀ꦏꦽꦠꦩ꧀&amp;quot;, link=true,&lt;br /&gt;
		Java_why=&amp;quot;See side panel at https://jv.wikipedia.org/wiki/Basa_Sangsekerta&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;नीळ&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;विद्वांस्&amp;quot;, link=true, Sinh=&amp;quot;විද්‍වාංස්&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;आक्रोशति&amp;quot;, link=true, Sinh=&amp;quot;ආක්‍රොශති&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;अवोचत्&amp;quot;, link=true, Sinh=&amp;quot;අවොචත්&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;अत्र&amp;quot;, link=true, Sinh=&amp;quot;අත්‍ර&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;उपनह्यन्ते&amp;quot;, link=true, Sinh=&amp;quot;උපනහ්‍යන‍්තෙ&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;प्रशाम्यति&amp;quot;, link=true, Sinh=&amp;quot;ප්‍රශාම්‍යති&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;क्षान्त्या&amp;quot;, link=true, Sinh=&amp;quot;ක්‍ෂාන‍්ත්‍යා&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;प्रज्ञा&amp;quot;, all=1, link=true, Sinh=&amp;quot;ප්‍රඥා&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;प्रभङ्गुर&amp;quot;, link=true, Sinh=&amp;quot;ප්‍රභඞ‍්ගුර&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;पण्डित&amp;quot;, link=true, Sinh=&amp;quot;පණ‍්ඩිත&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;स्पन्दन&amp;quot;, link=true, Sinh=&amp;quot;ස‍්පන්‍දන&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;तम्बुद्धमनन्तगोचरं&amp;quot;, link=true, Sinh=&amp;quot;තම‍්බුද‍්ධමනන‍්තගොචරං&amp;quot;,&lt;br /&gt;
		Sinh_why=&amp;quot;See quotation for [[බුද‍්ධ]]&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;मांस&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;अंहु&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;दुःख&amp;quot;, Taml=&amp;quot;fakeit&amp;quot;, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;जिघांसा&amp;quot;, Taml=&amp;quot;fakeit&amp;quot;, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;हिंस&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;शत&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ all=1, link=true, Deva=&amp;quot;दान&amp;quot;}, -- fields Taml and Taml_why would be useful.&lt;br /&gt;
	{ Deva=&amp;quot;झञ्झा&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;यौवन&amp;quot;, all=1, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;गौतम&amp;quot;, all=1, link=true},&lt;br /&gt;
	{&lt;br /&gt;
		Deva=&amp;quot;भावम्&amp;quot;, link=true,&lt;br /&gt;
		Taml=&amp;quot;ப⁴ாவம்&amp;quot;,&lt;br /&gt;
		Taml_why=&amp;quot;This is the form displayed on p3 of https://www.unicode.org/L2/L2010/10379--extended-tamil.pdf &amp;quot;..&lt;br /&gt;
				&amp;quot;and in https://www.unicode.org/L2/L2010/10407-ext-tamil-follow2.pdf we have the statement &amp;quot;..&lt;br /&gt;
				&amp;#039;&amp;quot;in most forms of Extended Tamil (including the Gita book mentioned previously running to almost &amp;#039;..&lt;br /&gt;
				&amp;quot;420,000 copies) &amp;quot;..&lt;br /&gt;
				&amp;#039;the diacritics are placed between the consonant and any vowel signs placed to the right&amp;quot;.&amp;#039;,&lt;br /&gt;
		Taml_whynot=&amp;quot;Google search only finds பா⁴வம். -&amp;quot;..&lt;br /&gt;
				&amp;quot;https://corp.unicode.org/pipermail/unicode/2024-January/010740.html.  Moroever, the form with &amp;quot;..&lt;br /&gt;
				&amp;quot;right matra last doesn&amp;#039;t render properly.&amp;quot;&lt;br /&gt;
	},&lt;br /&gt;
	{ Deva=&amp;quot;धर्म&amp;quot;, Taml=&amp;quot;த⁴ர்ம&amp;quot;, link=true},&lt;br /&gt;
	{ Deva=&amp;quot;एकं&amp;quot;, link=true,&lt;br /&gt;
		Taml=&amp;quot;ஏகம்²&amp;quot;,&lt;br /&gt;
		Taml_why=&amp;quot;See quotation at {{m|sa|ஏக}}.&amp;quot;,&lt;br /&gt;
		Taml_whynot=&amp;quot;Or use Grantha anusvara!&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	{Deva=&amp;quot;पापेभ्यो&amp;quot;, Taml=&amp;quot;பாபேப்⁴யோ&amp;quot;, link=false,&lt;br /&gt;
		Taml_why=&amp;quot;See quotation at {{m|sa|பாப}}.&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;शुचः&amp;quot;, all=1, link=false, Taml=&amp;quot;ஶுச𑌃&amp;quot;,&lt;br /&gt;
		Taml_why=&amp;quot;See injunctive form in quotation at {{m|sa|அஶுசத்}}&amp;quot;},&lt;br /&gt;
	{ Deva=&amp;quot;सर्व&amp;quot;, Taml=&amp;quot;ஸர்வ&amp;quot;, link=true},&lt;br /&gt;
--	{ Deva=&amp;quot;&amp;quot;, all=1, link=true},&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--[[ here be the tests ]]&lt;br /&gt;
local function sc_xlit(text, sc_obj, sc_name)&lt;br /&gt;
	local sc_romn = (lang:transliterate(res, sc)) or &amp;quot;&amp;quot;&lt;br /&gt;
	if sc_romn == &amp;quot;&amp;quot; then&lt;br /&gt;
		pali_fallback = pali_fallback or require(&amp;quot;Module:pi-translit&amp;quot;).tr&lt;br /&gt;
		sc_romn = pali_fallback(res, lang, sc_name) or &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if sc_name == &amp;quot;Taml&amp;quot; then&lt;br /&gt;
		taml_fallback = taml_fallback or require(&amp;quot;Module:sa-Taml-translit&amp;quot;).tr&lt;br /&gt;
		sc_romn = taml_fallback(res, lang, sc_name) or &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return sc_romn&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tests:one_script(sc_name, risk_end)&lt;br /&gt;
	local sc = m_scripts.getByCode(sc_name)&lt;br /&gt;
	risk_end = not not risk_end -- Canonicalise&lt;br /&gt;
	for _, case in pairs(cases) do&lt;br /&gt;
		if risk_end == not not case.aborts then&lt;br /&gt;
			local name, should, doit, just, counter, nocando&lt;br /&gt;
			should = case[sc_name]&lt;br /&gt;
			if should then&lt;br /&gt;
				if should == &amp;quot;except&amp;quot; then&lt;br /&gt;
					doit = false&lt;br /&gt;
				elseif should == &amp;quot;fakeit&amp;quot; then&lt;br /&gt;
					doit = true&lt;br /&gt;
					should = nil&lt;br /&gt;
				else&lt;br /&gt;
					doit = true&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				doit = case.all&lt;br /&gt;
			end&lt;br /&gt;
			if doit then&lt;br /&gt;
				local lp&lt;br /&gt;
				just = case[sc_name..&amp;quot;_why&amp;quot;]&lt;br /&gt;
				counter = case[sc_name..&amp;quot;_whynot&amp;quot;]&lt;br /&gt;
				res = tr(case.Deva, sc_name)&lt;br /&gt;
				if case.link then&lt;br /&gt;
					lp = &amp;quot;{{l|sa|tr=-|&amp;quot;&lt;br /&gt;
				else&lt;br /&gt;
					lp = &amp;quot;{{lang|sa|&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
-- equals(name, actual, expected, options)&lt;br /&gt;
				if res == nil or res == &amp;quot;&amp;quot; then&lt;br /&gt;
					doit = false&lt;br /&gt;
				elseif should then&lt;br /&gt;
					name = self.frame:preprocess(lp..case.Deva..&amp;quot;}}&amp;quot;)&lt;br /&gt;
					should = self.frame:preprocess(lp..should..&amp;quot;}}&amp;quot;)&lt;br /&gt;
					res = self.frame:preprocess(lp..res..&amp;quot;}}&amp;quot;)&lt;br /&gt;
				else&lt;br /&gt;
					local deva_romn = (lang:transliterate(case.Deva, deva_sc)) or &amp;quot;&amp;quot;&lt;br /&gt;
					local sc_romn   = (deva_romn ~= &amp;quot;&amp;quot;) and sc_xlit(res, sc, sc_name)&lt;br /&gt;
										or &amp;quot;&amp;quot;&lt;br /&gt;
					if sc_romn == &amp;quot;&amp;quot; and deva_romn ~= &amp;quot;&amp;quot; then&lt;br /&gt;
						doit = false; -- silently don&amp;#039;t apply a test.&lt;br /&gt;
					else&lt;br /&gt;
						name = self.frame:preprocess(&lt;br /&gt;
							lp..case.Deva..&amp;quot;}} &amp;quot;..sc_name..&amp;quot;: &amp;quot;..lp..res..&amp;quot;}}&amp;quot;)&lt;br /&gt;
						res = sc_romn&lt;br /&gt;
						should = deva_romn&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if doit then&lt;br /&gt;
					if res ~= should then&lt;br /&gt;
						if just then&lt;br /&gt;
							should = should..&amp;quot;&amp;lt;br&amp;gt;(&amp;quot;..self.frame:preprocess(just)..&amp;quot;)&amp;quot;&lt;br /&gt;
						end&lt;br /&gt;
						if counter then&lt;br /&gt;
							res = res..&amp;quot;&amp;lt;br&amp;gt;(&amp;quot;..self.frame:preprocess(counter)..&amp;quot;)&amp;quot;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					tests:equals(name, res, should)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tests:test_all()&lt;br /&gt;
	local availableScripts = lang:getScripts()&lt;br /&gt;
	local scripts = {}&lt;br /&gt;
	for _, script in pairs(availableScripts) do&lt;br /&gt;
		scripts[script:getCode()] = 1;&lt;br /&gt;
	end&lt;br /&gt;
-- New scripts can be added here.&lt;br /&gt;
--	{Beng = 1, Mymr = 1, Thai = 1, [&amp;quot;as-Beng&amp;quot;] = 1}&lt;br /&gt;
	scripts.Deva = nil; -- Pointless and unsupported to boot.&lt;br /&gt;
	for _, risk_all in pairs({false, true}) do&lt;br /&gt;
		for sc, _ in pairs(scripts) do&lt;br /&gt;
			tests:one_script(sc, risk_all)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return tests&lt;/div&gt;</summary>
		<author><name>wikt&gt;RichardW57</name></author>
	</entry>
</feed>