Перейти до вмісту

Модуль:math/testcases

Неперевірена версія
Матеріал з Вікісловника

Документацію для цього модуля можна створити у Модуль:math/testcases/документація

local tests = require("Module:UnitTests")
local m_math = require("Module:math")

local concat = table.concat
local dump = mw.dumpObject
local gcd = m_math.gcd
local highlight = require("Module:debug").highlight
local lcm = m_math.lcm
local sign = m_math.sign
local tonumber = tonumber
local unpack = unpack or table.unpack -- Lua 5.2 compatibility

local INF = math.huge
local NEG_INF = -INF
local NAN = tonumber("nan")
local NEG_NAN = tonumber("-nan")

local function do_test(func, args, expected, name)
	if name == nil then
		name = {}
		for i, v in ipairs(args) do
			name[i] = dump(v)
		end
		name = highlight("(" .. concat(name, ", ") .. ")")
	end
	tests:equals(name, func(unpack(args)), expected)
end

function tests:check_sign(args, expected, name)
	return do_test(sign, args, expected, name)
end

function tests:test_sign()
	self:iterate({
		{{1}, 1},
		{{5}, 1},
		{{1.3}, 1},
		{{0.8}, 1},
		{{100}, 1},
		{{1e308}, 1},
		{{INF}, 1},
		{{NAN}, 1},
		{{"1"}, 1},
		{{"2.5"}, 1},
		{{"inf"}, 1},
		{{"nan"}, 1},
		{{0}, 0},
		{{"0"}, 0},
		{{0, true}, 1},
		{{"0", true}, 1},
		{{-1}, -1},
		{{-5}, -1},
		{{-1.3}, -1},
		{{-0.8}, -1},
		{{-100}, -1},
		{{-1e308}, -1},
		{{NEG_INF}, -1},
		{{NEG_NAN}, -1},
		{{"-1"}, -1},
		{{"-2.5"}, -1},
		{{"-inf"}, -1},
		{{"-nan"}, -1},
		{{tonumber("-0")}, 0},
		{{"-0"}, 0},
		{{tonumber("-0"), true}, -1},
		{{"-0", true}, -1},
		
	}, "check_sign")
end

function tests:check_gcd(args, expected, name)
	return do_test(gcd, args, expected, name)
end

function tests:test_gcd()
	self:iterate({
		{{1}, 1},
		{{-1}, 1},
		{{0}, 0},
		{{0, 0}, 0},
		{{1, 0}, 1},
		{{0, 1}, 1},
		{{1, 1}, 1},
		{{6, 4}, 2},
		{{6, -4}, 2},
		{{-6, -4}, 2},
		{{2, 8}, 2},
		{{15, 20}, 5},
		{{20, 15}, 5},
		{{35, -21}, 7},
		{{48, 18}, 6},
		{{8, 12, 16}, 4},
		{{25, -35, 95}, 5},
		{{95, -35, 25}, 5},
		{{1500, 750, 150000, 625}, 125},
		{{186028, 193052, 144624}, 4},
		{{2^100, 2^53}, 2^53, "2^100, 2^53"},
	}, "check_gcd")
end

function tests:check_lcm(args, expected, name)
	return do_test(lcm, args, expected, name)
end

function tests:test_lcm()
	self:iterate({
		{{1}, 1},
		{{-1}, 1},
		{{0}, 0},
		{{0, 0}, 0},
		{{1, 0}, 0},
		{{0, 1}, 0},
		{{1, 1}, 1},
		{{6, 4}, 12},
		{{6, -4}, 12},
		{{-6, -4}, 12},
		{{2, 8}, 8},
		{{15, 20}, 60},
		{{20, 15}, 60},
		{{35, -21}, 105},
		{{48, 18}, 144},
		{{8, 12, 16}, 48},
		{{25, -35, 95}, 3325},
		{{95, -35, 25}, 3325},
		{{1500, 750, 150000, 625}, 150000},
		{{186028, 193052, 144624}, 324618307124784},
		{{2^100, 2^53}, 2^100, "2^100, 2^53"},
	}, "check_lcm")
end

return tests