Module:Number table sorting/testcases
Appearance
![]() | This is the test cases page for the module Module:Number table sorting. Results of the test cases. |
local mNts = require('Module:Nts') -- the module to be tested
local Nts = mNts._exportClasses().Nts -- the Nts class
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
-------------------------------------------------------------------------------
-- Helper functions and values
-------------------------------------------------------------------------------
suite.offValues = {'off', 'no', 'NO', 'n', 'false', false}
suite.onValues = {'on', 'yes', 'YES', 'y', 'true', true}
local function makeOnOffAsserts(fragment)
suite['assert' .. fragment .. 'WhenOn'] = function (self, first, func, ...)
for i, on in ipairs(suite.onValues) do
self['assert' .. fragment](self, first, func(on), ...)
end
end
suite['assert' .. fragment .. 'WhenOff'] = function (self, first, func, ...)
for i, off in ipairs(suite.offValues) do
self['assert' .. fragment](self, first, func(off), ...)
end
end
end
makeOnOffAsserts('Equals')
makeOnOffAsserts('StringContains')
makeOnOffAsserts('NotStringContains')
function suite:assertErrorContains(pattern, func, plain)
local success, msg = pcall(func)
self:assertFalse(success)
self:assertStringContains(pattern, msg, plain)
end
function suite:assertParsedNumberEquals(expected,aString)
local ntsObj = Nts.new({aString})
ntsObj:parseNumber(aString)
self:assertEquals(expected, ntsObj.number)
end
function suite:assertSortKeyEquals(expected, args)
local ntsObj = Nts.new(args)
self:assertEquals(expected, ntsObj:makeSortKey())
end
function suite:assertDisplayEquals(expected, args)
local ntsObj = Nts.new(args)
self:assertEquals(expected, ntsObj:makeDisplay())
end
-------------------------------------------------------------------------------
-- parseNumber tests
-------------------------------------------------------------------------------
function suite:testParseNumbers()
suite:assertParsedNumberEquals(1, ' 1 ')
suite:assertParsedNumberEquals(1, '1')
suite:assertParsedNumberEquals(-1, '-1')
suite:assertParsedNumberEquals(0.1, '0.1')
suite:assertParsedNumberEquals(0.1, '.1')
suite:assertParsedNumberEquals(-0.1, '-0.1')
suite:assertParsedNumberEquals(-0.1, '-.1')
suite:assertParsedNumberEquals(1000,'1000')
suite:assertParsedNumberEquals(1000,'1,000')
suite:assertParsedNumberEquals(12345678901234567890, '12345678901234567890')
suite:assertParsedNumberEquals(12345678901234567890, '12,345,678,901,234,567,890')
suite:assertParsedNumberEquals(10345678901234567.12345678, '10345678901234567.12345678')
suite:assertParsedNumberEquals(-10345678901234567.12345678, '-10345678901234567.12345678')
suite:assertParsedNumberEquals(5.4321e10, '5.4321e10')
suite:assertParsedNumberEquals(-5.4321e10, '-5.4321e10')
suite:assertParsedNumberEquals(5.4321e-10, '5.4321e-10')
suite:assertParsedNumberEquals(-5.4321e-10, '-5.4321e-10')
suite:assertParsedNumberEquals(math.huge, '5.4321e308')
suite:assertParsedNumberEquals(-math.huge, '-5.4321e308')
end
function suite:testParseMinusSigns()
suite:assertParsedNumberEquals(-1, '−1')
suite:assertParsedNumberEquals(-1, '−1')
suite:assertParsedNumberEquals(1e-1, '1e−1')
suite:assertParsedNumberEquals(1e-1, '1e−1')
end
function suite:testInvalidNumbers()
suite:assertErrorContains("'a1' is not a valid number", function ()
Nts.new{'a1'}
end)
suite:assertErrorContains("Fractions are not supported", function ()
Nts.new{'1/2'}
end)
end
-------------------------------------------------------------------------------
-- Sort key tests
-------------------------------------------------------------------------------
function suite:testSortKeyLimits()
suite:assertSortKeyEquals('5000000000000000000♠', {'0'})
suite:assertSortKeyEquals('5000000000000000000♠', {'5.4321e-325'})
suite:assertSortKeyEquals('5000000000000000000♠', {'-5.4321e-325'})
suite:assertSortKeyEquals('9000000000000000000♠', {'5.4321e308'})
suite:assertSortKeyEquals('1000000000000000000♠', {'-5.4321e308'})
end
return suite