Jump to content

Module:Exponential search/testcases: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
more tests
simplify the test functions - no need to bother with arrays
Line 3: Line 3:
local suite = ScribuntoUnit:new()
local suite = ScribuntoUnit:new()


local function makeArrayTest(len)
local function makeTest(n)
local array = {}
for i = 1, len do
array[i] = true
end
return function (i)
return function (i)
return array[i]
return i <= n
end
end
end
end

local arrayTests = {}
setmetatable(arrayTests, {
__index = function (t, key)
local func = makeArrayTest(key)
arrayTests[key] = func
return func
end
})


function suite:assertError(func, ...)
function suite:assertError(func, ...)
Line 42: Line 29:


function suite:testInitType()
function suite:testInitType()
self:assertError(search, arrayTests[0], 'foo')
self:assertError(search, makeTest(0), 'foo')
self:assertError(search, arrayTests[0], arrayTests[0])
self:assertError(search, makeTest(0), makeTest(0))
self:assertError(search, arrayTests[0], true)
self:assertError(search, makeTest(0), true)
self:assertError(search, arrayTests[0], {})
self:assertError(search, makeTest(0), {})
self:assertError(search, arrayTests[1], 'foo')
self:assertError(search, makeTest(1), 'foo')
end
end
Line 52: Line 39:
self:assertErrorMsg(
self:assertErrorMsg(
"invalid init value '0' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
"invalid init value '0' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
search, arrayTests[0], 0
search, makeTest(0), 0
)
)
self:assertErrorMsg(
self:assertErrorMsg(
"invalid init value '1.5' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
"invalid init value '1.5' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
search, arrayTests[0], 1.5
search, makeTest(0), 1.5
)
)
self:assertErrorMsg(
self:assertErrorMsg(
"invalid init value '-3' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
"invalid init value '-3' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
search, arrayTests[0], -3
search, makeTest(0), -3
)
)
self:assertErrorMsg(
self:assertErrorMsg(
"invalid init value 'inf' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
"invalid init value 'inf' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
search, arrayTests[0], math.huge
search, makeTest(0), math.huge
)
)
self:assertErrorMsg(
self:assertErrorMsg(
"invalid init value '-nan' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
"invalid init value '-nan' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
search, arrayTests[0], 0/0
search, makeTest(0), 0/0
)
)
end
end


function suite:testKeyNotFound()
function suite:testKeyNotFound()
self:assertEquals(nil, search(arrayTests[0]))
self:assertEquals(nil, search(makeTest(0)))
end
end


function suite:testKeyNotFoundInit()
function suite:testKeyNotFoundInit()
self:assertEquals(nil, search(arrayTests[0], 5))
self:assertEquals(nil, search(makeTest(0), 5))
end
end


function suite:test1()
function suite:test1()
self:assertEquals(1, search(arrayTests[1]))
self:assertEquals(1, search(makeTest(1)))
end
end


function suite:test1Init1()
function suite:test1Init1()
self:assertEquals(1, search(arrayTests[1], 1))
self:assertEquals(1, search(makeTest(1), 1))
end
end


function suite:test1Init2()
function suite:test1Init2()
self:assertEquals(1, search(arrayTests[1], 2))
self:assertEquals(1, search(makeTest(1), 2))
end
end


function suite:test1Init3()
function suite:test1Init3()
self:assertEquals(1, search(arrayTests[1], 3))
self:assertEquals(1, search(makeTest(1), 3))
end
end


function suite:test2()
function suite:test2()
self:assertEquals(2, search(arrayTests[2]))
self:assertEquals(2, search(makeTest(2)))
end
end


function suite:test2Init1()
function suite:test2Init1()
self:assertEquals(2, search(arrayTests[2], 1))
self:assertEquals(2, search(makeTest(2), 1))
end
end


function suite:test2Init2()
function suite:test2Init2()
self:assertEquals(2, search(arrayTests[2], 2))
self:assertEquals(2, search(makeTest(2), 2))
end
end


function suite:test2Init3()
function suite:test2Init3()
self:assertEquals(2, search(arrayTests[2], 3))
self:assertEquals(2, search(makeTest(2), 3))
end
end


function suite:test3()
function suite:test3()
self:assertEquals(3, search(arrayTests[3]))
self:assertEquals(3, search(makeTest(3)))
end
end


function suite:test3Init1()
function suite:test3Init1()
self:assertEquals(3, search(arrayTests[3], 1))
self:assertEquals(3, search(makeTest(3), 1))
end
end


function suite:test3Init2()
function suite:test3Init2()
self:assertEquals(3, search(arrayTests[3], 2))
self:assertEquals(3, search(makeTest(3), 2))
end
end


function suite:test3Init3()
function suite:test3Init3()
self:assertEquals(3, search(arrayTests[3], 3))
self:assertEquals(3, search(makeTest(3), 3))
end
end


function suite:testLargeArray()
function suite:testLargeArray()
self:assertEquals(12345, search(arrayTests[12345]))
self:assertEquals(12345, search(makeTest(12345)))
end
end


function suite:testLargeInit()
function suite:testLargeInit()
self:assertEquals(3, search(arrayTests[3], 12345))
self:assertEquals(3, search(makeTest(3), 12345))
end
end



Revision as of 13:27, 27 February 2015

local search = require('Module:Exponential search')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

local function makeTest(n)
	return function (i)
		return i <= n
	end
end

function suite:assertError(func, ...)
	local success, ret = pcall(func, ...)
	self:assertFalse(success)
	return ret
end

function suite:assertErrorMsg(msg, func, ...)
	local ret = self:assertError(func, ...)
	self:assertStringContains(msg, ret, true)
end

function suite:testFuncType()
	self:assertError(search, 5)
	self:assertError(search, 'foo')
	self:assertError(search, true)
	self:assertError(search, {})
	self:assertError(search, nil)
end

function suite:testInitType()
	self:assertError(search, makeTest(0), 'foo')
	self:assertError(search, makeTest(0), makeTest(0))
	self:assertError(search, makeTest(0), true)
	self:assertError(search, makeTest(0), {})
	self:assertError(search, makeTest(1), 'foo')
end
 
function suite:testInitIntegerCheck()
	self:assertErrorMsg(
		"invalid init value '0' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
		search, makeTest(0), 0
	)
	self:assertErrorMsg(
		"invalid init value '1.5' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
		search, makeTest(0), 1.5
	)
	self:assertErrorMsg(
		"invalid init value '-3' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
		search, makeTest(0), -3
	)
	self:assertErrorMsg(
		"invalid init value 'inf' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
		search, makeTest(0), math.huge
	)
	self:assertErrorMsg(
		"invalid init value '-nan' detected in argument #2 to 'Exponential search' (init values must be a positive integer)",
		search, makeTest(0), 0/0
	)
end

function suite:testKeyNotFound()
	self:assertEquals(nil, search(makeTest(0)))
end

function suite:testKeyNotFoundInit()
	self:assertEquals(nil, search(makeTest(0), 5))
end

function suite:test1()
	self:assertEquals(1, search(makeTest(1)))
end

function suite:test1Init1()
	self:assertEquals(1, search(makeTest(1), 1))
end

function suite:test1Init2()
	self:assertEquals(1, search(makeTest(1), 2))
end

function suite:test1Init3()
	self:assertEquals(1, search(makeTest(1), 3))
end

function suite:test2()
	self:assertEquals(2, search(makeTest(2)))
end

function suite:test2Init1()
	self:assertEquals(2, search(makeTest(2), 1))
end

function suite:test2Init2()
	self:assertEquals(2, search(makeTest(2), 2))
end

function suite:test2Init3()
	self:assertEquals(2, search(makeTest(2), 3))
end

function suite:test3()
	self:assertEquals(3, search(makeTest(3)))
end

function suite:test3Init1()
	self:assertEquals(3, search(makeTest(3), 1))
end

function suite:test3Init2()
	self:assertEquals(3, search(makeTest(3), 2))
end

function suite:test3Init3()
	self:assertEquals(3, search(makeTest(3), 3))
end

function suite:testLargeArray()
	self:assertEquals(12345, search(makeTest(12345)))
end

function suite:testLargeInit()
	self:assertEquals(3, search(makeTest(3), 12345))
end

return suite