<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARoman%2Ftestcases</id>
	<title>Module:Roman/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ARoman%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Roman/testcases&amp;action=history"/>
	<updated>2026-04-17T04:26:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Roman/testcases&amp;diff=144926&amp;oldid=prev</id>
		<title>imported&gt;ASiplas: Withdrawing sandbox code / request for edit—duplicate of Module:ConvertNumeric&#039;s roman_to_numeral</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Roman/testcases&amp;diff=144926&amp;oldid=prev"/>
		<updated>2018-02-20T22:05:06Z</updated>

		<summary type="html">&lt;p&gt;Withdrawing sandbox code / request for edit—duplicate of &lt;a href=&quot;/research/Module:ConvertNumeric&quot; title=&quot;Module:ConvertNumeric&quot;&gt;Module:ConvertNumeric&lt;/a&gt;&amp;#039;s roman_to_numeral&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Unit tests for [[Module:Roman/sandbox]]. Click talk page to run tests.&lt;br /&gt;
&lt;br /&gt;
local moduleName = &amp;#039;Roman/sandbox&amp;#039; -- assigning this to a variable as it is later used to generate an #invoke statement.&lt;br /&gt;
local mainFuncName = &amp;#039;main&amp;#039;&lt;br /&gt;
local mm = require(&amp;#039;Module:&amp;#039; .. moduleName)&lt;br /&gt;
local suite = require(&amp;#039;Module:UnitTests&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function suite.buildInvocation(funcName, args)&lt;br /&gt;
    args = args or {}&lt;br /&gt;
    local argsClone = mw.clone(args)&lt;br /&gt;
    -- Build a module invocation equivalent to the args table. Taken from [[Module:Unsubst]].&lt;br /&gt;
    -- Numbered args first.&lt;br /&gt;
    local ret = &amp;#039;{{#invoke:&amp;#039; .. moduleName .. &amp;#039;|&amp;#039; .. funcName&lt;br /&gt;
    for k, v in ipairs(argsClone) do&lt;br /&gt;
        v = tostring(v)&lt;br /&gt;
        if string.find(v, &amp;#039;=&amp;#039;, 1, true) then&lt;br /&gt;
            -- likely something like 1=foo=bar, we need to do it as a named arg&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
        ret = ret .. &amp;#039;|&amp;#039; .. v&lt;br /&gt;
        argsClone[k] = nil&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs(argsClone) do&lt;br /&gt;
        k = tostring(k)&lt;br /&gt;
        v = tostring(v)&lt;br /&gt;
        ret = ret .. &amp;#039;|&amp;#039; .. k .. &amp;#039;=&amp;#039; .. v&lt;br /&gt;
    end&lt;br /&gt;
    return ret .. &amp;#039;}}&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:getInvokeResult(funcName, args, convertNumber) -- Unless convertNumber is false, the number is converted to a number, if possible, on re-entry to Lua.&lt;br /&gt;
    args = args or {}&lt;br /&gt;
    local invocation = self.buildInvocation(funcName, args)&lt;br /&gt;
    local result = self.frame:preprocess(invocation)&lt;br /&gt;
    if convertNumber ~= false and tonumber(result) then&lt;br /&gt;
        return tonumber(result)&lt;br /&gt;
    else&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:assertInvokeEquals(expected, funcName, args, convertNumber)&lt;br /&gt;
    args = args or {}&lt;br /&gt;
    local invokeResult = self:getInvokeResult(funcName, args, convertNumber)&lt;br /&gt;
    self:preprocess_equals(invokeResult, expected)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:assertInvokeEqual(funcName, testTable, convertNumber)&lt;br /&gt;
    testTable = testTable or {}&lt;br /&gt;
    local expected = testTable[1]&lt;br /&gt;
    local args = testTable[2] or {}&lt;br /&gt;
    self:assertInvokeEquals(expected, funcName, args, convertNumber)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:assertInvokeEqualMany(funcName, testTables, convertNumber)&lt;br /&gt;
    for i, testTable in ipairs(testTables) do&lt;br /&gt;
        self:assertInvokeEqual(funcName, testTable, convertNumber)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_genericNumbers()&lt;br /&gt;
    local args = {&lt;br /&gt;
        {&amp;#039;N&amp;#039;, {&amp;#039;0&amp;#039;}}, {&amp;#039;I&amp;#039;, {&amp;#039;1&amp;#039;}}, {&amp;#039;II&amp;#039;, {&amp;#039;2&amp;#039;}}, {&amp;#039;IV&amp;#039;, {&amp;#039;4&amp;#039;}}, {&amp;#039;V&amp;#039;, {&amp;#039;5&amp;#039;}},&lt;br /&gt;
        {&amp;#039;VI&amp;#039;, {&amp;#039;6&amp;#039;}}, {&amp;#039;VIII&amp;#039;, {&amp;#039;8&amp;#039;}}, {&amp;#039;IX&amp;#039;, {&amp;#039;9&amp;#039;}}, {&amp;#039;X&amp;#039;, {&amp;#039;10&amp;#039;}},&lt;br /&gt;
        {&amp;#039;XI&amp;#039;, {&amp;#039;11&amp;#039;}}, {&amp;#039;XIV&amp;#039;, {&amp;#039;14&amp;#039;}}, {&amp;#039;XV&amp;#039;, {&amp;#039;15&amp;#039;}}, {&amp;#039;XVI&amp;#039;, {&amp;#039;16&amp;#039;}},&lt;br /&gt;
        {&amp;#039;XIX&amp;#039;, {&amp;#039;19&amp;#039;}}, {&amp;#039;XX&amp;#039;, {&amp;#039;20&amp;#039;}}, {&amp;#039;XXI&amp;#039;, {&amp;#039;21&amp;#039;}}, {&amp;#039;XXIV&amp;#039;, {&amp;#039;24&amp;#039;}},&lt;br /&gt;
        {&amp;#039;XXV&amp;#039;, {&amp;#039;25&amp;#039;}}, {&amp;#039;XXVI&amp;#039;, {&amp;#039;26&amp;#039;}}, {&amp;#039;XXXIV&amp;#039;, {&amp;#039;34&amp;#039;}}, {&amp;#039;XXXV&amp;#039;, {&amp;#039;35&amp;#039;}},&lt;br /&gt;
        {&amp;#039;XXXVIII&amp;#039;, {&amp;#039;38&amp;#039;}}, {&amp;#039;XXXIX&amp;#039;, {&amp;#039;39&amp;#039;}}, {&amp;#039;XL&amp;#039;, {&amp;#039;40&amp;#039;}}, {&amp;#039;XLI&amp;#039;, {&amp;#039;41&amp;#039;}},&lt;br /&gt;
        {&amp;#039;XLIV&amp;#039;, {&amp;#039;44&amp;#039;}}, {&amp;#039;XLV&amp;#039;, {&amp;#039;45&amp;#039;}}, {&amp;#039;XLIX&amp;#039;, {&amp;#039;49&amp;#039;}}, {&amp;#039;L&amp;#039;, {&amp;#039;50&amp;#039;}},&lt;br /&gt;
        {&amp;#039;LXXXVIII&amp;#039;, {&amp;#039;88&amp;#039;}}, {&amp;#039;LXXXIX&amp;#039;, {&amp;#039;89&amp;#039;}}, {&amp;#039;XC&amp;#039;, {&amp;#039;90&amp;#039;}}, {&amp;#039;XCI&amp;#039;, {&amp;#039;91&amp;#039;}},&lt;br /&gt;
        {&amp;#039;XCIV&amp;#039;, {&amp;#039;94&amp;#039;}}, {&amp;#039;XCV&amp;#039;, {&amp;#039;95&amp;#039;}}, {&amp;#039;XCVIII&amp;#039;, {&amp;#039;98&amp;#039;}}, {&amp;#039;XCIX&amp;#039;, {&amp;#039;99&amp;#039;}},&lt;br /&gt;
        {&amp;#039;C&amp;#039;, {&amp;#039;100&amp;#039;}}, {&amp;#039;CI&amp;#039;, {&amp;#039;101&amp;#039;}}, {&amp;#039;CIV&amp;#039;, {&amp;#039;104&amp;#039;}}, {&amp;#039;CV&amp;#039;, {&amp;#039;105&amp;#039;}},&lt;br /&gt;
        {&amp;#039;CIX&amp;#039;, {&amp;#039;109&amp;#039;}}, {&amp;#039;CX&amp;#039;, {&amp;#039;110&amp;#039;}},&lt;br /&gt;
        {&amp;#039;MCCXXXIV&amp;#039;, {&amp;#039;1234&amp;#039;}},&lt;br /&gt;
        {&amp;#039;MDCXLVIII&amp;#039;, {&amp;#039;1648&amp;#039;}},&lt;br /&gt;
        {&amp;#039;MMCMXCIX&amp;#039;, {&amp;#039;2999&amp;#039;}},&lt;br /&gt;
        {&amp;#039;MMM&amp;#039;, {&amp;#039;3000&amp;#039;}},&lt;br /&gt;
    }&lt;br /&gt;
    -- unsure how to test cases with overline&lt;br /&gt;
    self:assertInvokeEqualMany(&amp;#039;main&amp;#039;, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_outOfRangeNumbers()&lt;br /&gt;
    local args = {&lt;br /&gt;
        {&amp;#039;N/A&amp;#039;, {&amp;#039;5000000&amp;#039;}},&lt;br /&gt;
        {&amp;#039;N/A&amp;#039;, {&amp;#039;5000010&amp;#039;}},&lt;br /&gt;
        {&amp;#039;N/A&amp;#039;, {&amp;#039;3000000000&amp;#039;}},&lt;br /&gt;
    }&lt;br /&gt;
    self:assertInvokeEqualMany(&amp;#039;main&amp;#039;, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_MessageArg()&lt;br /&gt;
    local args = {&lt;br /&gt;
        {&amp;#039;N&amp;#039;, {&amp;#039;0&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;I&amp;#039;, {&amp;#039;1&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;V&amp;#039;, {&amp;#039;5&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;X&amp;#039;, {&amp;#039;10&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;L&amp;#039;, {&amp;#039;50&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;C&amp;#039;, {&amp;#039;100&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;D&amp;#039;, {&amp;#039;500&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;M&amp;#039;, {&amp;#039;1000&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;too big&amp;#039;, {&amp;#039;5000000&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;too big&amp;#039;, {&amp;#039;5000010&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
        {&amp;#039;too big&amp;#039;, {&amp;#039;3000000000&amp;#039;, &amp;#039;too big&amp;#039;}},&lt;br /&gt;
    }&lt;br /&gt;
    self:assertInvokeEqualMany(&amp;#039;main&amp;#039;, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_MessageArgWithFractionArg()&lt;br /&gt;
    -- Note, &amp;#039;fraction=yes&amp;#039; before &amp;#039;too big&amp;#039; cannot happen with the template&lt;br /&gt;
    local args = {&lt;br /&gt;
        {&amp;#039;N&amp;#039;, {&amp;#039;0&amp;#039;, &amp;#039;too big&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;I&amp;#039;, {&amp;#039;1&amp;#039;, &amp;#039;too big&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;M&amp;#039;, {&amp;#039;1000&amp;#039;, &amp;#039;too big&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;too big&amp;#039;, {&amp;#039;5000000&amp;#039;, &amp;#039;too big&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;too big&amp;#039;, {&amp;#039;5000010&amp;#039;, &amp;#039;too big&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;too big&amp;#039;, {&amp;#039;3000000000&amp;#039;, &amp;#039;too big&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
    }&lt;br /&gt;
    self:assertInvokeEqualMany(&amp;#039;main&amp;#039;, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
function suite:test_decimalsBetweenZeroAndOne()&lt;br /&gt;
    local args = {&lt;br /&gt;
        {&amp;#039;»&amp;#039;, {&amp;#039;0.0001&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;»&amp;#039;, {&amp;#039;0.0005&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;»&amp;#039;, {&amp;#039;0.000578703&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;»&amp;#039;, {&amp;#039;0.000578704&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;℈&amp;#039;, {&amp;#039;0.00347222&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;℈&amp;#039;, {&amp;#039;0.00347223&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;ƻ&amp;#039;, {&amp;#039;0.007&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;Ƨ&amp;#039;, {&amp;#039;0.0139&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;Ɔ&amp;#039;, {&amp;#039;0.02084&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;ƧƧ&amp;#039;, {&amp;#039;0.0278&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;Є&amp;#039;, {&amp;#039;0.04167&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;•&amp;#039;, {&amp;#039;0.08334&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;•ЄƧ℈»&amp;#039;, {&amp;#039;0.142858&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;quot;&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;&amp;quot;, {&amp;#039;0.1667&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;quot;&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;•&amp;quot;, {&amp;#039;0.25&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;quot;&amp;#039;&amp;#039;&amp;#039;::&amp;#039;&amp;#039;&amp;#039;&amp;quot;, {&amp;#039;0.3333&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;quot;&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;•&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;&amp;quot;, {&amp;#039;0.41666&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;#039;S&amp;#039;, {0.5, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;quot;S&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;•&amp;quot;, {&amp;#039;0.75&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
        {&amp;quot;S&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;•&amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039;ЄƧƧƻ℈»»»»&amp;quot;, {&amp;#039;0.9999&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;fraction=yes&amp;#039;}},&lt;br /&gt;
    }&lt;br /&gt;
    self:assertInvokeEqualMany(&amp;#039;main&amp;#039;, args)&lt;br /&gt;
end&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
function suite:test_fractionsBetweenZeroAndOne()&lt;br /&gt;
    local args = {&lt;br /&gt;
        {&amp;#039;S&amp;#039;, {&amp;#039;1/2&amp;#039;, &amp;#039;hi&amp;#039;, &amp;#039;fraction=yes&amp;#039;}}&lt;br /&gt;
    }&lt;br /&gt;
    self:assertInvokeEqualMany(&amp;#039;main&amp;#039;, args)&lt;br /&gt;
end&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>imported&gt;ASiplas</name></author>
	</entry>
</feed>