Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Module:Exponential search/testcases

From Wikipedia, the free encyclopedia
require[[strict]]
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:testFuncType()
	self:assertThrows(search, "bad argument #1 to 'Exponential search' (function expected, got number)", nil, 5)
	self:assertThrows(search, "bad argument #1 to 'Exponential search' (function expected, got string)", nil, 'foo')
	self:assertThrows(search, "bad argument #1 to 'Exponential search' (function expected, got boolean)", nil, true)
	self:assertThrows(search, "bad argument #1 to 'Exponential search' (function expected, got table)", nil, {})
	self:assertThrows(search, "bad argument #1 to 'Exponential search' (function expected, got nil)", nil, nil)
end

function suite:testInitType()
	self:assertThrows(search, "bad argument #2 to 'Exponential search' (number expected, got string)", nil, makeTest(0), 'foo')
	self:assertThrows(search, "bad argument #2 to 'Exponential search' (number expected, got function)", nil, makeTest(0), makeTest(0))
	self:assertThrows(search, "bad argument #2 to 'Exponential search' (number expected, got boolean)", nil, makeTest(0), true)
	self:assertThrows(search, "bad argument #2 to 'Exponential search' (number expected, got table)", nil, makeTest(0), {})
	self:assertThrows(search, "bad argument #2 to 'Exponential search' (number expected, got string)", nil, makeTest(1), 'foo')
end
 
function suite:testInitIntegerCheck()
	self:assertThrows(
		search, "invalid init value '0' detected in argument #2 to 'Exponential search' (init value must be a positive integer)",
		nil, makeTest(0), 0
	)
	self:assertThrows(
		search, "invalid init value '1.5' detected in argument #2 to 'Exponential search' (init value must be a positive integer)",
		nil, makeTest(0), 1.5
	)
	self:assertThrows(
		search, "invalid init value '-3' detected in argument #2 to 'Exponential search' (init value must be a positive integer)",
		nil, makeTest(0), -3
	)
	self:assertThrows(
		search, "invalid init value 'inf' detected in argument #2 to 'Exponential search' (init value must be a positive integer)",
		nil, makeTest(0), math.huge
	)
	self:assertThrows(
		search, "invalid init value '-nan' detected in argument #2 to 'Exponential search' (init value must be a positive integer)",
		nil, 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(1234567890, search(makeTest(1234567890)))
end

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

return suite