Module:Number table sorting/testcases

local mNts = require('Module:Number table sorting') -- 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

function suite:testSortKeys()
	suite:assertSortKeyEquals('7009123456789000000♠', {'1234567890'})
	suite:assertSortKeyEquals('7010123456789010000♠', {'12345678901'})
	suite:assertSortKeyEquals('7011123456789012000♠', {'123456789012'})
	suite:assertSortKeyEquals('7012123456789012300♠', {'1234567890123'})
	suite:assertSortKeyEquals('7013123456789012340♠', {'12345678901234'})
	suite:assertSortKeyEquals('7014123456789012345♠', {'123456789012345'})
	suite:assertSortKeyEquals('7015123456789012345♠', {'1234567890123456'})
	suite:assertSortKeyEquals('7016123456789012345♠', {'12345678901234567'})
	suite:assertSortKeyEquals('7017123456789012345♠', {'123456789012345678'})
	suite:assertSortKeyEquals('7018123456789012345♠', {'1234567890123456789'})
	suite:assertSortKeyEquals('7019123456789012345♠', {'12345678901234567890'})
	suite:assertSortKeyEquals('7002456123456000000♠', {'456.123456'})
--	suite:assertSortKeyEquals('2997543876544099999♠', {'-456.123456'}) incorrect original testvalue
	suite:assertSortKeyEquals('2997543876543999999♠', {'-456.123456'}) -- still incorrect, should be 2997543876544000000
	suite:assertSortKeyEquals('7015234567890123456♠', {'2,345,678,901,234,567'})
	suite:assertSortKeyEquals('7005123456000000000♠', {'123.456e3'})
	suite:assertSortKeyEquals('7005123456000000000♠', {'123,456'})
	suite:assertSortKeyEquals('6999543210000000000♠', {'54321e-5'})
	suite:assertSortKeyEquals('6989543210000000000♠', {'54321e-15'})
	suite:assertSortKeyEquals('6899543210000000000♠', {'54321e-105'})
--	suite:assertSortKeyEquals('6799543219999999999♠', {'54321e-205'}) original incorrect test value
	suite:assertSortKeyEquals('6799543209999999999♠', {'54321e-205'}) -- still incorrect
--	suite:assertSortKeyEquals('6699543200000000000♠', {'54321e-305'})
	suite:assertSortKeyEquals('7010543210000000000♠', {'5.4321e10'})
	suite:assertSortKeyEquals('7020543210000000000♠', {'5.4321e20'})
--	suite:assertSortKeyEquals('7030543210000000000♠', {'5.4321e30'}) original correct test value
	suite:assertSortKeyEquals('7030543209999999999♠', {'5.4321e30'}) -- no longer correct value
--	suite:assertSortKeyEquals('7100543200000000000♠', {'5.4321e100'}) original incorrect test value
	suite:assertSortKeyEquals('7100543210000000000♠', {'5.4321e100'})
--	suite:assertSortKeyEquals('7200543210000099999♠', {'5.4321e200'}) original test value
	suite:assertSortKeyEquals('7200543209999999999♠', {'5.4321e200'}) -- almost correct
	suite:assertSortKeyEquals('7300543210000000000♠', {'5.4321e300'})
	suite:assertSortKeyEquals('9000000000000000000♠', {'5.4321e400'})
	suite:assertSortKeyEquals('2989456790000000000♠', {'-5.4321e10'})
	suite:assertSortKeyEquals('2979456790000000000♠', {'-5.4321e20'})
--	suite:assertSortKeyEquals('2969456789999999999♠', {'-5.4321e30'}) original test value
	suite:assertSortKeyEquals('2969456790000000000♠', {'-5.4321e30'}) -- correct
--	suite:assertSortKeyEquals('2899456780000000000♠', {'-5.4321e100'}) original test value
	suite:assertSortKeyEquals('2899456790000000000♠', {'-5.4321e100'}) -- correct
--	suite:assertSortKeyEquals('2799456789999999999♠', {'-5.4321e200'}) original test value
	suite:assertSortKeyEquals('2799456790000000000♠', {'-5.4321e200'}) -- correct
	suite:assertSortKeyEquals('2699456790000000000♠', {'-5.4321e300'}) 
	suite:assertSortKeyEquals('1000000000000000000♠', {'-5.4321e400'})
	suite:assertSortKeyEquals('6990543210000000000♠', {'5.4321e-10'})
	suite:assertSortKeyEquals('6980543210000000000♠', {'5.4321e-20'})
	suite:assertSortKeyEquals('6970543210000000000♠', {'5.4321e-30'})
	suite:assertSortKeyEquals('6900543210000000000♠', {'5.4321e-100'})
	suite:assertSortKeyEquals('6800543210000000000♠', {'5.4321e-200'})
--	suite:assertSortKeyEquals('6700543210000000000♠', {'5.4321e-300'})
	suite:assertSortKeyEquals('5000000000000000000♠', {'5.4321e-400'})
	suite:assertSortKeyEquals('3009456790000000000♠', {'-5.4321e-10'})
	suite:assertSortKeyEquals('3019456789999999999♠', {'-5.4321e-20'})
--	suite:assertSortKeyEquals('3029456790000000000♠', {'-5.4321e-30'}) original test value
	suite:assertSortKeyEquals('3029456789999999999♠', {'-5.4321e-30'}) -- almost
--	suite:assertSortKeyEquals('3099456789999999999♠', {'-5.4321e-100'}) original test value
	suite:assertSortKeyEquals('3099456790000000000♠', {'-5.4321e-100'}) -- correct
--	suite:assertSortKeyEquals('3199456780000099999♠', {'-5.4321e-200'}) original test value
	suite:assertSortKeyEquals('3199456789999999999♠', {'-5.4321e-200'}) -- almost
	suite:assertSortKeyEquals('3299456780000000000♠', {'-5.4321e-300'})
	suite:assertSortKeyEquals('5000000000000000000♠', {'-5.4321e-400'})
	suite:assertSortKeyEquals('6993100000000000000♠', {'0.0000001'})
	suite:assertSortKeyEquals('6993600000000000000♠', {'0.0000006'})
	suite:assertSortKeyEquals('6993300000000000000♠', {'0.0000003'})
	suite:assertSortKeyEquals('6993900000000000000♠', {'0.0000009'})
	suite:assertSortKeyEquals('6993200000000000000♠', {'0.0000002'})
	suite:assertSortKeyEquals('6993500000000000000♠', {'0.0000005'})
	suite:assertSortKeyEquals('6993400000000000000♠', {'0.0000004'})
	suite:assertSortKeyEquals('6993700000000000000♠', {'0.0000007'})
	suite:assertSortKeyEquals('6993800000000000000♠', {'0.0000008'})
	suite:assertSortKeyEquals('5000000000000000000♠', {'0.0000000'})
	suite:assertSortKeyEquals('3006900000000000000♠', {'-0.0000001'})
	suite:assertSortKeyEquals('3006400000000000000♠', {'-0.0000006'})
	suite:assertSortKeyEquals('3006700000000000000♠', {'-0.0000003'})
	suite:assertSortKeyEquals('3006100000000000000♠', {'-0.0000009'})
	suite:assertSortKeyEquals('3006800000000000000♠', {'-0.0000002'})
	suite:assertSortKeyEquals('3006500000000000000♠', {'-0.0000005'})
	suite:assertSortKeyEquals('3006600000000000000♠', {'-0.0000004'})
	suite:assertSortKeyEquals('3006300000000000000♠', {'-0.0000007'})
	suite:assertSortKeyEquals('3006200000000000000♠', {'-0.0000008'})
end


function suite:testSortKeys2()
	suite:assertSortKeyEquals('3000900000000000000♠', {'-0.1'})
	suite:assertSortKeyEquals('3000800000000000000♠', {'-0.2'})
	suite:assertSortKeyEquals('3000700000000000000♠', {'-0.3'})
	suite:assertSortKeyEquals('3000600000000000000♠', {'-0.4'})
	suite:assertSortKeyEquals('3000500000000000000♠', {'-0.5'})
	suite:assertSortKeyEquals('3000400000000000000♠', {'-0.6'})
	suite:assertSortKeyEquals('3000300000000000000♠', {'-0.7'})
	suite:assertSortKeyEquals('3000199999999999999♠', {'-0.8'})
	suite:assertSortKeyEquals('3000099999999999999♠', {'-0.9'})
	suite:assertSortKeyEquals('2999900000000000000♠', {'-1'})
	suite:assertSortKeyEquals('2999800000000000000♠', {'-2'})
	suite:assertSortKeyEquals('2999700000000000000♠', {'-3'})
	suite:assertSortKeyEquals('2999600000000000000♠', {'-4'})
	suite:assertSortKeyEquals('2999500000000000000♠', {'-5'})
	suite:assertSortKeyEquals('2999400000000000000♠', {'-6'})
	suite:assertSortKeyEquals('2999300000000000000♠', {'-7'})
	suite:assertSortKeyEquals('2999200000000000000♠', {'-8'})
	suite:assertSortKeyEquals('2999100000000000000♠', {'-9'})
	suite:assertSortKeyEquals('2983896543210987654♠', {'-10345678901234567'})
	suite:assertSortKeyEquals('7016103456789012345♠', {'10345678901234567'})
	suite:assertSortKeyEquals('2983896543210987654♠', {'-10,345,678,901,234,567'})
	suite:assertSortKeyEquals('7016103456789012345♠', {'10,345,678,901,234,567'})
	suite:assertSortKeyEquals('5000000000000000000♠', {'0.000000'})
	suite:assertSortKeyEquals('6994900000000000000♠', {'0.000009'})
	suite:assertSortKeyEquals('3005099999999999999♠', {'-0.000009'})
	suite:assertSortKeyEquals('3005899999999999999♠', {'-0.000001'})
	suite:assertSortKeyEquals('3005800000000000000♠', {'-0.000002'})
	suite:assertSortKeyEquals('3005699999999999999♠', {'-0.000003'})
	suite:assertSortKeyEquals('3005599999999999999♠', {'-0.000004'})
	suite:assertSortKeyEquals('6994100000000000000♠', {'0.000001'})
	suite:assertSortKeyEquals('6994200000000000000♠', {'0.000002'})
	suite:assertSortKeyEquals('6994300000000000000♠', {'0.000003'})
	suite:assertSortKeyEquals('6994400000000000000♠', {'0.000004'})
	suite:assertSortKeyEquals('3005499999999999999♠', {'-0.000005'})
	suite:assertSortKeyEquals('3005399999999999999♠', {'-0.000006'})
	suite:assertSortKeyEquals('3005299999999999999♠', {'-0.000007'})
	suite:assertSortKeyEquals('3005199999999999999♠', {'-0.000008'})
	suite:assertSortKeyEquals('6993100000000000000♠', {'0.0000001'})
	suite:assertSortKeyEquals('3006900000000000000♠', {'-0.0000001'})
end
	
function suite:testSortKeys3()
	suite:assertSortKeyEquals('7016103456789012345♠', {'10345678901234567.12345678'})
	suite:assertSortKeyEquals('7015123456789012345♠', {'1234567890123456.12345678'})
	suite:assertSortKeyEquals('7014234567890123456♠', {'234567890123456.12345678'})
	suite:assertSortKeyEquals('7013345678901234561♠', {'34567890123456.12345678'})
	suite:assertSortKeyEquals('7012456789012345612♠', {'4567890123456.12345678'})
	suite:assertSortKeyEquals('7011567890123456123♠', {'567890123456.12345678'})
	suite:assertSortKeyEquals('7010678901234561234♠', {'67890123456.12345678'})
	suite:assertSortKeyEquals('7009789012345612345♠', {'7890123456.12345678'})
	suite:assertSortKeyEquals('7008890123456123456♠', {'890123456.12345678'})
	suite:assertSortKeyEquals('7007901234561234567♠', {'90123456.12345678'})
	suite:assertSortKeyEquals('7005123456123456780♠', {'0123456.12345678'})
	suite:assertSortKeyEquals('7005123456123456780♠', {'123456.12345678'})
	suite:assertSortKeyEquals('7004234561234567799♠', {'23456.12345678'})
	suite:assertSortKeyEquals('7002456123456780000♠', {'3456.12345678'})
	suite:assertSortKeyEquals('7002456123456780000♠', {'456.12345678'})
	suite:assertSortKeyEquals('7001561234567800000♠', {'56.12345678'})
	suite:assertSortKeyEquals('7000612345678000000♠', {'6.12345678'})
	suite:assertSortKeyEquals('6999123456780000000♠', {'.12345678'})
	suite:assertSortKeyEquals('6998234567800000000♠', {'.02345678'})
	suite:assertSortKeyEquals('6997345678000000000♠', {'.00345678'})
	suite:assertSortKeyEquals('6996456780000000000♠', {'.00045678'})
	suite:assertSortKeyEquals('6995567800000000000♠', {'.00005678'})
	suite:assertSortKeyEquals('6994678000000000000♠', {'.00000678'})
	suite:assertSortKeyEquals('6993780000000000000♠', {'.00000078'})
	suite:assertSortKeyEquals('6992800000000000000♠', {'.00000008'})
	suite:assertSortKeyEquals('5000000000000000000♠', {'0'})
end

function suite:testSortKeys4()
	suite:assertSortKeyEquals('2995570330657900000♠', {'-42966.93421'})
	suite:assertSortKeyEquals('2995177810931299999♠', {'-82218.90687'})
	suite:assertSortKeyEquals('2995065526236800000♠', {'-93447.37632'})
	suite:assertSortKeyEquals('2995466138667300000♠', {'-53386.13327'})
	suite:assertSortKeyEquals('2995091138906600000♠', {'-90886.10934'})
	suite:assertSortKeyEquals('2995154034088099999♠', {'-84596.59119'})
	suite:assertSortKeyEquals('2995661456718600000♠', {'-33854.32814'})
	suite:assertSortKeyEquals('2995673280039000000♠', {'-32671.9961'})
	suite:assertSortKeyEquals('2995718586477700000♠', {'-28141.35223'})
	suite:assertSortKeyEquals('2995202294885999999♠', {'-79770.5114'})
	suite:assertSortKeyEquals('2997809315340000000♠', {'-190.68466'})
	suite:assertSortKeyEquals('2995091747332400000♠', {'-90825.26676'})
	suite:assertSortKeyEquals('2995510976267400000♠', {'-48902.37326'})
	suite:assertSortKeyEquals('2995791525201400000♠', {'-20847.47986'})
	suite:assertSortKeyEquals('2995123912722499999♠', {'-87608.72775'})
	suite:assertSortKeyEquals('2995383526155000000♠', {'-61647.38450'})
	suite:assertSortKeyEquals('2995550423144800000♠', {'-44957.68552'})
	suite:assertSortKeyEquals('2995202547700000000♠', {'-79745.23'})
	suite:assertSortKeyEquals('2995740762353599999♠', {'-25923.76464'})
	suite:assertSortKeyEquals('2995749101706400000♠', {'-25089.82936'})
	suite:assertSortKeyEquals('2995176594059399999♠', {'-82340.59406'})
	suite:assertSortKeyEquals('2995163690872899999♠', {'-83630.91271'})
	suite:assertSortKeyEquals('2996391353068000000♠', {'-6086.46932'})
	suite:assertSortKeyEquals('2996410357428000000♠', {'-5896.42572'})
	suite:assertSortKeyEquals('2995625007539900000♠', {'-37499.24601'})
	suite:assertSortKeyEquals('2995315611006100000♠', {'-68438.89938'})
	suite:assertSortKeyEquals('2995234538459600000♠', {'-76546.15404'})
	suite:assertSortKeyEquals('2995847035011900000♠', {'-15296.49881'})
	suite:assertSortKeyEquals('2995050162076899999♠', {'-94983.79231'})
	suite:assertSortKeyEquals('2995173355225999999♠', {'-82664.4774'})
	suite:assertSortKeyEquals('2995260183535100000♠', {'-73981.64649'})
	suite:assertSortKeyEquals('2995685583524500000♠', {'-31441.64754'})
	suite:assertSortKeyEquals('2995664270381399999♠', {'-33572.96186'})
	suite:assertSortKeyEquals('2995003711925900000♠', {'-99628.80741'})
	suite:assertSortKeyEquals('2995221633013899999♠', {'-77836.69861'})
	suite:assertSortKeyEquals('2995606940241900000♠', {'-39305.97581'})
	suite:assertSortKeyEquals('2995471664011200000♠', {'-52833.59888'})
	suite:assertSortKeyEquals('2995785717570800000♠', {'-21428.24292'})
	suite:assertSortKeyEquals('2996687889733000000♠', {'-3121.10267'})
	suite:assertSortKeyEquals('2995242622296899999♠', {'-75737.77031'})
	suite:assertSortKeyEquals('2995829690357700000♠', {'-17030.96423'})
	suite:assertSortKeyEquals('2995172258038300000♠', {'-82774.19617'})
	suite:assertSortKeyEquals('2995290690594000000♠', {'-70930.94060'})
	suite:assertSortKeyEquals('2995496251367300000♠', {'-50374.86327'})
	suite:assertSortKeyEquals('2995816441484899999♠', {'-18355.85151'})
	suite:assertSortKeyEquals('2995120977784899999♠', {'-87902.22151'})
	suite:assertSortKeyEquals('2995788823580399999♠', {'-21117.64196'})
	suite:assertSortKeyEquals('2995618778317100000♠', {'-38122.16829'})
	suite:assertSortKeyEquals('2995135661813300000♠', {'-86433.81867'})
	suite:assertSortKeyEquals('2995612055930500000♠', {'-38794.40695'})
	suite:assertSortKeyEquals('2995433812230900000♠', {'-56618.77691'})
	suite:assertSortKeyEquals('2995361018723200000♠', {'-63898.12768'})
	suite:assertSortKeyEquals('2995039541404999999♠', {'-96045.8595'})
	suite:assertSortKeyEquals('2995621235553700000♠', {'-37876.44463'})
	suite:assertSortKeyEquals('2995661802405900000♠', {'-33819.75941'})
	suite:assertSortKeyEquals('2995746574052000000♠', {'-25342.5948'})
	suite:assertSortKeyEquals('2995499660990100000♠', {'-50033.90099'})
	suite:assertSortKeyEquals('2995265784360199999♠', {'-73421.56398'})
	suite:assertSortKeyEquals('2995615201132500000♠', {'-38479.88675'})
	suite:assertSortKeyEquals('2995757863575100000♠', {'-24213.64249'})
	suite:assertSortKeyEquals('2995606655783700000♠', {'-39334.42163'})
	suite:assertSortKeyEquals('2995791518093100000♠', {'-20848.19069'})
	suite:assertSortKeyEquals('2995883846089400000♠', {'-11615.39106'})
	suite:assertSortKeyEquals('2996785472460000000♠', {'-2145.2754'})
	suite:assertSortKeyEquals('2996290858233000000♠', {'-7091.41767'})
	suite:assertSortKeyEquals('2995818685550600000♠', {'-18131.44494'})
	suite:assertSortKeyEquals('2995851615712600000♠', {'-14838.42874'})
	suite:assertSortKeyEquals('2996850468655000000♠', {'-1495.31345'})
	suite:assertSortKeyEquals('2995311846582300000♠', {'-68815.34177'})
	suite:assertSortKeyEquals('2995014981580300000♠', {'-98501.84197'})
	suite:assertSortKeyEquals('2995504418167000000♠', {'-49558.18330'})
	suite:assertSortKeyEquals('2995030306243499999♠', {'-96969.37565'})
	suite:assertSortKeyEquals('2995344834291700000♠', {'-65516.57083'})
	suite:assertSortKeyEquals('2995113341914899999♠', {'-88665.80851'})
	suite:assertSortKeyEquals('2995304474922700000♠', {'-69552.50773'})
	suite:assertSortKeyEquals('2995312737139100000♠', {'-68726.28609'})
	suite:assertSortKeyEquals('2995482001318200000♠', {'-51799.86818'})
	suite:assertSortKeyEquals('2996425812187000000♠', {'-5741.87813'})
	suite:assertSortKeyEquals('2995486912181300000♠', {'-51308.78187'})
	suite:assertSortKeyEquals('2995873101875300000♠', {'-12689.81247'})
	suite:assertSortKeyEquals('2995541646323200000♠', {'-45835.36768'})
	suite:assertSortKeyEquals('2995888963210700000♠', {'-11103.67893'})
	suite:assertSortKeyEquals('2995883740891000000♠', {'-11625.91090'})
	suite:assertSortKeyEquals('2996126726483000000♠', {'-8732.73517'})
	suite:assertSortKeyEquals('2995067993695799999♠', {'-93200.63042'})
	suite:assertSortKeyEquals('2996565823180000000♠', {'-4341.7682'})
	suite:assertSortKeyEquals('2995130823596700000♠', {'-86917.64033'})
	suite:assertSortKeyEquals('2995075340298500000♠', {'-92465.97015'})
	suite:assertSortKeyEquals('2995785054254300000♠', {'-21494.57457'})
	suite:assertSortKeyEquals('2995344501236999999♠', {'-65549.8763'})
	suite:assertSortKeyEquals('2995863453863500000♠', {'-13654.61365'})
	suite:assertSortKeyEquals('2996867826386099999♠', {'-1321.73614'})
	suite:assertSortKeyEquals('2995122546703500000♠', {'-87745.32965'})
	suite:assertSortKeyEquals('2995208635786300000♠', {'-79136.42137'})
	suite:assertSortKeyEquals('2995255631518499999♠', {'-74436.84815'})
	suite:assertSortKeyEquals('2995093547457100000♠', {'-90645.25429'})
	suite:assertSortKeyEquals('2995545146845400000♠', {'-45485.31546'})
	suite:assertSortKeyEquals('2995026372281199999♠', {'-97362.77188'})
	suite:assertSortKeyEquals('2995009034451700000♠', {'-99096.55483'})
	suite:assertSortKeyEquals('2995595212813000000♠', {'-40478.71870'})
	suite:assertSortKeyEquals('2995164790310000000♠', {'-83520.9690'})
	suite:assertSortKeyEquals('2995731907846900000♠', {'-26809.21531'})
	suite:assertSortKeyEquals('2995646535218000000♠', {'-35346.47820'})
	suite:assertSortKeyEquals('2995012364740000000♠', {'-98763.52600'})
	suite:assertSortKeyEquals('2995867041849099999♠', {'-13295.81510'})
	suite:assertSortKeyEquals('2995540136696000000♠', {'-45986.33040'})
	suite:assertSortKeyEquals('2995716328184200000♠', {'-28367.18158'})
	suite:assertSortKeyEquals('2995683537669999999♠', {'-31646.233'})
	suite:assertSortKeyEquals('2996316675407900000♠', {'-6833.24592'})
	suite:assertSortKeyEquals('2995127360958200000♠', {'-87263.90418'})
	suite:assertSortKeyEquals('2995261710460599999♠', {'-73828.95394'})
	suite:assertSortKeyEquals('2995233938840300000♠', {'-76606.11597'})
	suite:assertSortKeyEquals('2995878032135000000♠', {'-12196.78650'})
	suite:assertSortKeyEquals('2995586436638800000♠', {'-41356.33612'})
	suite:assertSortKeyEquals('2995662247362600000♠', {'-33775.26373'})
	suite:assertSortKeyEquals('2995809130860900000♠', {'-19086.91391'})
	suite:assertSortKeyEquals('2995015830794699999♠', {'-98416.92053'})
	suite:assertSortKeyEquals('2995324488958200000♠', {'-67551.10418'})
	suite:assertSortKeyEquals('2995701520640600000♠', {'-29847.93594'})
	suite:assertSortKeyEquals('2995616363294200000♠', {'-38363.67058'})
	suite:assertSortKeyEquals('2996314603680000000♠', {'-6853.96320'})
	suite:assertSortKeyEquals('2995821290940900000♠', {'-17870.90591'})
	suite:assertSortKeyEquals('2995467305223800000♠', {'-53269.47762'})
	suite:assertSortKeyEquals('2995066810127499999♠', {'-93318.98725'})
	suite:assertSortKeyEquals('2995890568634800000♠', {'-10943.13652'})
	suite:assertSortKeyEquals('2996160066205000000♠', {'-8399.33795'})
	suite:assertSortKeyEquals('2995439227718799999♠', {'-56077.22813'})
	suite:assertSortKeyEquals('2995561466700300000♠', {'-43853.32997'})
	suite:assertSortKeyEquals('2995887377241700000♠', {'-11262.27583'})
	suite:assertSortKeyEquals('2995040447727199999♠', {'-95955.22728'})
	suite:assertSortKeyEquals('2995869727404100000♠', {'-13027.25959'})
	suite:assertSortKeyEquals('2995713722551700000♠', {'-28627.74483'})
	suite:assertSortKeyEquals('2995821082818500000♠', {'-17891.71815'})
	suite:assertSortKeyEquals('2995566890226800000♠', {'-43310.97732'})
	suite:assertSortKeyEquals('2995313537965500000♠', {'-68646.20345'})
	suite:assertSortKeyEquals('2995551732617000000♠', {'-44826.73830'})
	suite:assertSortKeyEquals('2995029818266200000♠', {'-97018.17338'})
	suite:assertSortKeyEquals('2995188054577200000♠', {'-81194.54228'})
	suite:assertSortKeyEquals('2996113357107999999♠', {'-8866.42892'})
	suite:assertSortKeyEquals('2997333438560000000♠', {'-666.56144'})
	suite:assertSortKeyEquals('2995162803710100000♠', {'-83719.62899'})
	suite:assertSortKeyEquals('2997772106860000000♠', {'-227.89314'})
	suite:assertSortKeyEquals('2995782877509400000♠', {'-21712.24906'})
	suite:assertSortKeyEquals('2995636526141500000♠', {'-36347.38585'})
	suite:assertSortKeyEquals('2995120894110999999♠', {'-87910.58890'})
	suite:assertSortKeyEquals('2995689491176000000♠', {'-31050.8824'})
	suite:assertSortKeyEquals('2995635191971000000♠', {'-36480.8029'})
	suite:assertSortKeyEquals('2995658748901100000♠', {'-34125.10989'})
	suite:assertSortKeyEquals('2995546278024700000♠', {'-45372.19753'})
	suite:assertSortKeyEquals('2995042026878699999♠', {'-95797.31213'})
	suite:assertSortKeyEquals('7000300000000000000♠', {'3'})
	suite:assertSortKeyEquals('7000200000000000000♠', {'2'})
	suite:assertSortKeyEquals('7000100000000000000♠', {'1'})
	suite:assertSortKeyEquals('2999874199000000000♠', {'-1.25801'})
	suite:assertSortKeyEquals('2999874200000000000♠', {'-1.2580'})
	suite:assertSortKeyEquals('2999821280000000000♠', {'-1.7872'})
	suite:assertSortKeyEquals('2999809348000000000♠', {'-1.90652'})
	suite:assertSortKeyEquals('2999837282000000000♠', {'-1.62718'})
	suite:assertSortKeyEquals('3000410540000000000♠', {'-.58946'})
	suite:assertSortKeyEquals('3000322860000000000♠', {'-.67714'})
	suite:assertSortKeyEquals('3000870210000000000♠', {'-.12979'})
	suite:assertSortKeyEquals('3000293239999999999♠', {'-.70676'})
	suite:assertSortKeyEquals('2999856690000000000♠', {'-1.4331'})
	suite:assertSortKeyEquals('2999847054999999999♠', {'-1.52945'})
	suite:assertSortKeyEquals('2999821013999999999♠', {'-1.78986'})
	suite:assertSortKeyEquals('2999843150000000000♠', {'-1.56850'})
	suite:assertSortKeyEquals('2999862558000099999♠', {'-1.37442'})
	suite:assertSortKeyEquals('2999871973000000000♠', {'-1.28027'})
	suite:assertSortKeyEquals('2999815739999999999♠', {'-1.84270'})
	suite:assertSortKeyEquals('2999889440000000000♠', {'-1.10560'})
	suite:assertSortKeyEquals('2999871439000000000♠', {'-1.28561'})
	suite:assertSortKeyEquals('3000527490000000000♠', {'-0.47251'})
	suite:assertSortKeyEquals('2999851303000000000♠', {'-1.48697'})
	suite:assertSortKeyEquals('2999830204999900000♠', {'-1.69795'})
	suite:assertSortKeyEquals('2999815187000000000♠', {'-1.84813'})
	suite:assertSortKeyEquals('3000674140000000000♠', {'-0.32586'})
	suite:assertSortKeyEquals('2999841400999999999♠', {'-1.58599'})
	suite:assertSortKeyEquals('2999861921000000000♠', {'-1.38079'})
	suite:assertSortKeyEquals('3000867630000000000♠', {'-0.13237'})
	suite:assertSortKeyEquals('2999847899999999999♠', {'-1.5210'})
	suite:assertSortKeyEquals('2999804997000000000♠', {'-1.95003'})
	suite:assertSortKeyEquals('2999850277000000000♠', {'-1.49723'})
	suite:assertSortKeyEquals('2999826150999900000♠', {'-1.73849'})
	suite:assertSortKeyEquals('2999873981000000000♠', {'-1.26019'})
	suite:assertSortKeyEquals('2999807748000000000♠', {'-1.92252'})
	suite:assertSortKeyEquals('2999855587000000000♠', {'-1.44413'})
	suite:assertSortKeyEquals('2999808098000000000♠', {'-1.91902'})
	suite:assertSortKeyEquals('2999859255000099999♠', {'-1.40745'})
	suite:assertSortKeyEquals('2999843736000000000♠', {'-1.56264'})
	suite:assertSortKeyEquals('2999827169999900000♠', {'-1.72840'})
	suite:assertSortKeyEquals('2999883714000000000♠', {'-1.16286'})
	suite:assertSortKeyEquals('2999868761000000000♠', {'-1.31239'})
	suite:assertSortKeyEquals('2999852838000000000♠', {'-1.47162'})
	suite:assertSortKeyEquals('2999868770000000000♠', {'-1.31230'})
	suite:assertSortKeyEquals('2999830765000000000♠', {'-1.69235'})
	suite:assertSortKeyEquals('2999853891000000000♠', {'-1.46109'})
	suite:assertSortKeyEquals('2999802909000000000♠', {'-1.97091'})
	suite:assertSortKeyEquals('2999885366000000000♠', {'-1.14634'})
	suite:assertSortKeyEquals('2999868503000099999♠', {'-1.31497'})
	suite:assertSortKeyEquals('2999878958000000000♠', {'-1.21042'})
	suite:assertSortKeyEquals('2999809164000000000♠', {'-1.90836'})
	suite:assertSortKeyEquals('2999813730999900000♠', {'-1.86269'})
	suite:assertSortKeyEquals('2999853354000000000♠', {'-1.46646'})
	suite:assertSortKeyEquals('2999879520000000000♠', {'-1.2048'})
	suite:assertSortKeyEquals('2999815849000000000♠', {'-1.84151'})
	suite:assertSortKeyEquals('2999816592999900000♠', {'-1.83407'})
	suite:assertSortKeyEquals('2999816199999999999♠', {'-1.8380'})
	suite:assertSortKeyEquals('2999846745999999999♠', {'-1.53254'})
	suite:assertSortKeyEquals('2999827244000000000♠', {'-1.72756'})
	suite:assertSortKeyEquals('2999880946000000000♠', {'-1.19054'})
	suite:assertSortKeyEquals('2999884517000000000♠', {'-1.15483'})
	suite:assertSortKeyEquals('2999835007000000000♠', {'-1.64993'})
	suite:assertSortKeyEquals('2999846484000000000♠', {'-1.53516'})
	suite:assertSortKeyEquals('2999806955999999999♠', {'-1.93044'})
	suite:assertSortKeyEquals('2999859477000000000♠', {'-1.40523'})
	suite:assertSortKeyEquals('2999822357000000000♠', {'-1.77643'})
	suite:assertSortKeyEquals('2999861380000000000♠', {'-1.38620'})
	suite:assertSortKeyEquals('2999803785000000000♠', {'-1.96215'})
	suite:assertSortKeyEquals('2999839579000000000♠', {'-1.60421'})
	suite:assertSortKeyEquals('2999880180000000000♠', {'-1.1982'})
	suite:assertSortKeyEquals('2999806631999999999♠', {'-1.93368'})
	suite:assertSortKeyEquals('2999823021999999999♠', {'-1.76978'})
	suite:assertSortKeyEquals('2999860285000000000♠', {'-1.39715'})
	suite:assertSortKeyEquals('2999852208000000000♠', {'-1.47792'})
	suite:assertSortKeyEquals('2999831273000000000♠', {'-1.68727'})
	suite:assertSortKeyEquals('2999859169000000000♠', {'-1.40831'})
	suite:assertSortKeyEquals('2999859386999999999♠', {'-1.40613'})
	suite:assertSortKeyEquals('2999830962000000000♠', {'-1.69038'})
	suite:assertSortKeyEquals('2999809106000000000♠', {'-1.90894'})
	suite:assertSortKeyEquals('2999829698000000000♠', {'-1.70302'})
	suite:assertSortKeyEquals('2999842112000000000♠', {'-1.57888'})
	suite:assertSortKeyEquals('2999803866000000000♠', {'-1.96134'})
	suite:assertSortKeyEquals('2999848160000000000♠', {'-1.51840'})
	suite:assertSortKeyEquals('2999814706999999999♠', {'-1.85293'})
	suite:assertSortKeyEquals('2999858808000000000♠', {'-1.41192'})
	suite:assertSortKeyEquals('2999846336000000000♠', {'-1.53664'})
	suite:assertSortKeyEquals('2999882794000000000♠', {'-1.17206'})
	suite:assertSortKeyEquals('2999888027000000000♠', {'-1.11973'})
	suite:assertSortKeyEquals('2999827434000000000♠', {'-1.72566'})
	suite:assertSortKeyEquals('2999844643999999999♠', {'-1.55356'})
	suite:assertSortKeyEquals('2999869137000099999♠', {'-1.30863'})
	suite:assertSortKeyEquals('2999807900000000000♠', {'-1.92100'})
	suite:assertSortKeyEquals('2999887309000000000♠', {'-1.12691'})
	suite:assertSortKeyEquals('2999872792000099999♠', {'-1.27208'})
	suite:assertSortKeyEquals('2999850895000000000♠', {'-1.49105'})
	suite:assertSortKeyEquals('2999855922000000000♠', {'-1.44078'})
	suite:assertSortKeyEquals('2999884101000000000♠', {'-1.15899'})
	suite:assertSortKeyEquals('2999865620000000000♠', {'-1.34380'})
	suite:assertSortKeyEquals('2999818348999999999♠', {'-1.81651'})
	suite:assertSortKeyEquals('2999817932000000000♠', {'-1.82068'})
	suite:assertSortKeyEquals('2999859042000000000♠', {'-1.40958'})
	suite:assertSortKeyEquals('2999822241000000000♠', {'-1.77759'})
	suite:assertSortKeyEquals('2999848484000000000♠', {'-1.51516'})
	suite:assertSortKeyEquals('2999889907000000000♠', {'-1.10093'})
	suite:assertSortKeyEquals('2999847636000000000♠', {'-1.52364'})
	suite:assertSortKeyEquals('2999817887000000000♠', {'-1.82113'})
	suite:assertSortKeyEquals('2999888719000000000♠', {'-1.11281'})
	suite:assertSortKeyEquals('2999865609000000000♠', {'-1.34391'})
	suite:assertSortKeyEquals('2999884844000000000♠', {'-1.15156'})
	suite:assertSortKeyEquals('2999880704000000000♠', {'-1.19296'})
	suite:assertSortKeyEquals('2999830570000000000♠', {'-1.69430'})
	suite:assertSortKeyEquals('2999820888000000000♠', {'-1.79112'})
	suite:assertSortKeyEquals('2999864803000000000♠', {'-1.35197'})
	suite:assertSortKeyEquals('2999802825000000000♠', {'-1.97175'})
	suite:assertSortKeyEquals('2999812877999999999♠', {'-1.87122'})
	suite:assertSortKeyEquals('2999851981000000000♠', {'-1.48019'})
	suite:assertSortKeyEquals('2999813588000000000♠', {'-1.86412'})
	suite:assertSortKeyEquals('2999802195000000000♠', {'-1.97805'})
	suite:assertSortKeyEquals('2999868210000000000♠', {'-1.3179'})
	suite:assertSortKeyEquals('2999852021000000000♠', {'-1.47979'})
	suite:assertSortKeyEquals('2999803342000000000♠', {'-1.96658'})
	suite:assertSortKeyEquals('2999833189000000000♠', {'-1.66811'})
	suite:assertSortKeyEquals('2999866984000000000♠', {'-1.33016'})
	suite:assertSortKeyEquals('2999821213000000000♠', {'-1.78787'})
	suite:assertSortKeyEquals('2999865300000000000♠', {'-1.34700'})
	suite:assertSortKeyEquals('2999859967000000000♠', {'-1.40033'})
	suite:assertSortKeyEquals('2999834131000000000♠', {'-1.65869'})
	suite:assertSortKeyEquals('2999801709999999999♠', {'-1.98290'})
	suite:assertSortKeyEquals('2999847819000000000♠', {'-1.52181'})
	suite:assertSortKeyEquals('2999856814999999999♠', {'-1.43185'})
	suite:assertSortKeyEquals('2999846078000000000♠', {'-1.53922'})
	suite:assertSortKeyEquals('2999808230000000000♠', {'-1.91770'})
	suite:assertSortKeyEquals('2999813456000000000♠', {'-1.86544'})
	suite:assertSortKeyEquals('2999884378000000000♠', {'-1.15622'})
	suite:assertSortKeyEquals('2999853206000000000♠', {'-1.46794'})
	suite:assertSortKeyEquals('2999889793000000000♠', {'-1.10207'})
	suite:assertSortKeyEquals('3000764860000000000♠', {'-0.23514'})
	suite:assertSortKeyEquals('2999809736000000000♠', {'-1.90264'})
	suite:assertSortKeyEquals('2999824682999999999♠', {'-1.75317'})
	suite:assertSortKeyEquals('2999806694000000000♠', {'-1.93306'})
	suite:assertSortKeyEquals('2999848903000000000♠', {'-1.51097'})
	suite:assertSortKeyEquals('2999817080000000000♠', {'-1.8292'})
	suite:assertSortKeyEquals('3000703210000000000♠', {'-0.29679'})
	suite:assertSortKeyEquals('2999839945999900000♠', {'-1.60054'})
	suite:assertSortKeyEquals('2999889102000099999♠', {'-1.10898'})
	suite:assertSortKeyEquals('2999840518999999999♠', {'-1.59481'})
	suite:assertSortKeyEquals('3000128000000000000♠', {'-0.8720'})
	suite:assertSortKeyEquals('2999867865000099999♠', {'-1.32135'})
	suite:assertSortKeyEquals('3000327959999999999♠', {'-0.67205'})
	suite:assertSortKeyEquals('2999883204000099999♠', {'-1.16796'})
end


return suite