Jump to content

Module:Number table sorting/testcases

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by TheDJ (talk | contribs) at 21:40, 6 July 2018. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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