local Test = require("tests/factorio_luaunit") local math = require("__flib__/math") -- FIXME: Use Factorio testing framework --- @diagnostic disable-next-line math.randomseed(os.clock()) --- @diagnostic disable: undefined-field function Test_radians() for i = 1, 90 do Test.assertAlmostEquals(i * math.deg_to_rad, math.rad(i), 0.1) end end function Test_degrees() for i = 1, 90 do Test.assertAlmostEquals(i * math.rad_to_deg, math.deg(i), 0.1) end end function Test_round() Test.assertEquals(math.round(3.51), 4) Test.assertEquals(math.round(3.51, 0.1), 3.5) end function Test_ceiled() Test.assertEquals(math.ceiled(3.7), 4) Test.assertEquals(math.ceiled(3.7), math.ceil(3.7)) Test.assertEquals(math.ceiled(-3.7), -3) Test.assertEquals(math.ceiled(-3.7), math.ceil(-3.7)) Test.assertAlmostEquals(math.ceiled(-3.75, 0.1), -3.8, 0.1) end function Test_floored() Test.assertEquals(math.floored(3.7), 3) Test.assertEquals(math.floored(3.7), math.floor(3.7)) Test.assertEquals(math.floored(-3.7), -4) Test.assertEquals(math.floored(-3.7), math.floor(-3.7)) Test.assertAlmostEquals(math.floored(-3.75, 0.1), -3.8, 0.1) end function Test_clamp() Test.assertEquals(math.clamp(0, 1, 2), 1) Test.assertEquals(math.clamp(0, 0, 2), 0) Test.assertEquals(math.clamp(0, 0, 0), 0) Test.assertEquals(math.clamp(0, -10, 10), 0) Test.assertEquals(math.clamp(-100, -10, 10), -10) Test.assertEquals(math.clamp(100, -10, 10), 10) Test.assertEquals(math.clamp(-2), 0) Test.assertEquals(math.clamp(0.5), 0.5) Test.assertEquals(math.clamp(3), 1) --- Max is smaller than min Test.assertEquals(math.clamp(0, 1, 0), 1) Test.assertEquals(math.clamp(2, 1, 0), 0) Test.assertEquals(math.clamp(1, 1, 0), 0) end local values1 = { 25, 25, 25, 25 } local values2 = { 10, 25, 40, 45, 50 } local values3 = { 10, 25, 40, -50, -45 } local values4 = { -23, -12, -50, -10, -33 } function Test_maximum() Test.assertEquals(math.maximum(values1), 25) Test.assertEquals(math.maximum(values2), 50) Test.assertEquals(math.maximum(values3), 40) Test.assertEquals(math.maximum(values4), -10) for _ = 1, 5 do local rando = {} while #rando < 11 do rando[#rando + 1] = math.random(-50, 50) end Test.assertEquals(math.maximum(rando), math.max(table.unpack(rando))) end end function Test_minimum() Test.assertEquals(math.minimum(values1), 25) Test.assertEquals(math.minimum(values2), 10) Test.assertEquals(math.minimum(values3), -50) Test.assertEquals(math.minimum(values4), -50) for _ = 1, 5 do local rando = {} while #rando < 11 do rando[#rando + 1] = math.random(-50, 50) end Test.assertEquals(math.minimum(rando), math.min(table.unpack(rando))) end end function Test_sum() Test.assertEquals(math.sum(values1), 100) Test.assertEquals(math.sum(values2), 185) Test.assertEquals(math.sum(values3), -5) Test.assertEquals(math.sum(values4), -117) end function Test_mean() Test.assertEquals(math.mean(values1), 25) Test.assertEquals(math.mean(values2), 37) Test.assertEquals(math.mean(values3), -1) Test.assertEquals(math.mean(values4), -23.4) end function Test_midrange() Test.assertEquals(math.midrange(values1), 25) Test.assertEquals(math.midrange(values2), 30) Test.assertEquals(math.midrange(values3), -5) Test.assertEquals(math.midrange(values4), -30) end function Test_range() Test.assertEquals(math.range(values1), 0) Test.assertEquals(math.range(values2), 40) Test.assertEquals(math.range(values3), 90) Test.assertEquals(math.range(values4), 40) end function Test_sign() Test.assertEquals(math.sign(0), 1) Test.assertEquals(math.sign(1), 1) Test.assertEquals(math.sign(-1), -1) end function Test_lerp() Test.assertEquals(math.lerp(1, 2, 0.5), 1.5) Test.assertEquals(math.lerp(0, 10, 0.25), 2.5) end Test.Run()