z_mirror/flib

git clone https://git.raiguard.me/z_mirror/flib

Caleb HeuerMerge remote-tracking branch 'github/master' into flibbd469be

trunk
3.8 KiB133 linesraw
1local Test = require("tests.factorio_luaunit")
2local math = require("__flib__.math")
3-- FIXME: Use Factorio testing framework
4--- @diagnostic disable-next-line
5math.randomseed(os.clock())
6
7--- @diagnostic disable: undefined-field
8
9function Test_radians()
10  for i = 1, 90 do
11    Test.assertAlmostEquals(i * math.deg_to_rad, math.rad(i), 0.1)
12  end
13end
14
15function Test_degrees()
16  for i = 1, 90 do
17    Test.assertAlmostEquals(i * math.rad_to_deg, math.deg(i), 0.1)
18  end
19end
20
21function Test_round()
22  Test.assertEquals(math.round(3.51), 4)
23  Test.assertEquals(math.round(3.51, 0.1), 3.5)
24end
25
26function Test_ceiled()
27  Test.assertEquals(math.ceiled(3.7), 4)
28  Test.assertEquals(math.ceiled(3.7), math.ceil(3.7))
29  Test.assertEquals(math.ceiled(-3.7), -3)
30  Test.assertEquals(math.ceiled(-3.7), math.ceil(-3.7))
31  Test.assertAlmostEquals(math.ceiled(-3.75, 0.1), -3.8, 0.1)
32end
33
34function Test_floored()
35  Test.assertEquals(math.floored(3.7), 3)
36  Test.assertEquals(math.floored(3.7), math.floor(3.7))
37  Test.assertEquals(math.floored(-3.7), -4)
38  Test.assertEquals(math.floored(-3.7), math.floor(-3.7))
39  Test.assertAlmostEquals(math.floored(-3.75, 0.1), -3.8, 0.1)
40end
41
42function Test_clamp()
43  Test.assertEquals(math.clamp(0, 1, 2), 1)
44  Test.assertEquals(math.clamp(0, 0, 2), 0)
45  Test.assertEquals(math.clamp(0, 0, 0), 0)
46
47  Test.assertEquals(math.clamp(0, -10, 10), 0)
48  Test.assertEquals(math.clamp(-100, -10, 10), -10)
49  Test.assertEquals(math.clamp(100, -10, 10), 10)
50
51  Test.assertEquals(math.clamp(-2), 0)
52  Test.assertEquals(math.clamp(0.5), 0.5)
53  Test.assertEquals(math.clamp(3), 1)
54
55  --- Max is smaller than min
56  Test.assertEquals(math.clamp(0, 1, 0), 1)
57  Test.assertEquals(math.clamp(2, 1, 0), 0)
58  Test.assertEquals(math.clamp(1, 1, 0), 0)
59end
60
61local values1 = { 25, 25, 25, 25 }
62local values2 = { 10, 25, 40, 45, 50 }
63local values3 = { 10, 25, 40, -50, -45 }
64local values4 = { -23, -12, -50, -10, -33 }
65
66function Test_maximum()
67  Test.assertEquals(math.maximum(values1), 25)
68  Test.assertEquals(math.maximum(values2), 50)
69  Test.assertEquals(math.maximum(values3), 40)
70  Test.assertEquals(math.maximum(values4), -10)
71  for _ = 1, 5 do
72    local rando = {}
73    while #rando < 11 do
74      rando[#rando + 1] = math.random(-50, 50)
75    end
76    Test.assertEquals(math.maximum(rando), math.max(table.unpack(rando)))
77  end
78end
79
80function Test_minimum()
81  Test.assertEquals(math.minimum(values1), 25)
82  Test.assertEquals(math.minimum(values2), 10)
83  Test.assertEquals(math.minimum(values3), -50)
84  Test.assertEquals(math.minimum(values4), -50)
85  for _ = 1, 5 do
86    local rando = {}
87    while #rando < 11 do
88      rando[#rando + 1] = math.random(-50, 50)
89    end
90    Test.assertEquals(math.minimum(rando), math.min(table.unpack(rando)))
91  end
92end
93
94function Test_sum()
95  Test.assertEquals(math.sum(values1), 100)
96  Test.assertEquals(math.sum(values2), 170)
97  Test.assertEquals(math.sum(values3), -20)
98  Test.assertEquals(math.sum(values4), -128)
99end
100
101function Test_mean()
102  Test.assertEquals(math.mean(values1), 25)
103  Test.assertEquals(math.mean(values2), 34)
104  Test.assertEquals(math.mean(values3), -4)
105  Test.assertEquals(math.mean(values4), -25.6)
106end
107
108function Test_midrange()
109  Test.assertEquals(math.midrange(values1), 25)
110  Test.assertEquals(math.midrange(values2), 30)
111  Test.assertEquals(math.midrange(values3), -5)
112  Test.assertEquals(math.midrange(values4), -30)
113end
114
115function Test_range()
116  Test.assertEquals(math.range(values1), 0)
117  Test.assertEquals(math.range(values2), 40)
118  Test.assertEquals(math.range(values3), 90)
119  Test.assertEquals(math.range(values4), 40)
120end
121
122function Test_sign()
123  Test.assertEquals(math.sign(0), 1)
124  Test.assertEquals(math.sign(1), 1)
125  Test.assertEquals(math.sign(-1), -1)
126end
127
128function Test_lerp()
129  Test.assertEquals(math.lerp(1, 2, 0.5), 1.5)
130  Test.assertEquals(math.lerp(0, 10, 0.25), 2.5)
131end
132
133Test.Run()