• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

excessive / cpml / 6132588926

09 Sep 2023 06:38PM UTC coverage: 14.013% (-44.7%) from 58.701%
6132588926

push

github

FatalError42O
fixed Busted support (hopefully)

975 of 6958 relevant lines covered (14.01%)

10.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.52
/spec/vec3_spec.lua
1
local vec3        = require "modules.vec3"
5✔
2
local DBL_EPSILON = require("modules.constants").DBL_EPSILON
×
3
local abs, sqrt   = math.abs, math.sqrt
×
4

5
describe("vec3:", function()
×
6
        it("creates an empty vector", function()
×
7
                local a = vec3()
×
8
                assert.is.equal(0, a.x)
×
9
                assert.is.equal(0, a.y)
×
10
                assert.is.equal(0, a.z)
×
11
                assert.is_true(a:is_vec3())
×
12
                assert.is_true(a:is_zero())
×
13
        end)
14

15
        it("creates a vector from a number", function()
×
16
                local a = vec3(3)
×
17
                assert.is.equal(3, a.x)
×
18
                assert.is.equal(3, a.y)
×
19
                assert.is.equal(3, a.z)
×
20
        end)
21

22
        it("creates a vector from numbers", function()
×
23
                local a = vec3(3, 5, 7)
×
24
                assert.is.equal(3, a.x)
×
25
                assert.is.equal(5, a.y)
×
26
                assert.is.equal(7, a.z)
×
27
        end)
28

29
        it("creates a vector from a list", function()
×
30
                local a = vec3 { 3, 5, 7 }
×
31
                assert.is.equal(3, a.x)
×
32
                assert.is.equal(5, a.y)
×
33
                assert.is.equal(7, a.z)
×
34
        end)
35

36
        it("creates a vector from a record", function()
×
37
                local a = vec3 { x=3, y=5, z=7 }
×
38
                assert.is.equal(3, a.x)
×
39
                assert.is.equal(5, a.y)
×
40
                assert.is.equal(7, a.z)
×
41
        end)
42

43
        it("creates a vector from nan", function()
×
44
                local a = vec3(0/0)
×
45
                assert.is_true(a:has_nan())
×
46
        end)
47

48
        it("clones a vector", function()
×
49
                local a = vec3(3, 5, 7)
×
50
                local b = a:clone()
×
51
                assert.is.equal(a, b)
×
52
        end)
53

54
        it("clones a vector using the constructor", function()
×
55
                local a = vec3(3, 5, 7)
×
56
                local b = vec3(a)
×
57
                assert.is.equal(a, b)
×
58
        end)
59

60
        it("adds a vector to another", function()
×
61
                local a = vec3(3, 5, 7)
×
62
                local b = vec3(7, 4, 1)
×
63
                local c = a:add(b)
×
64
                local d = a + b
×
65
                assert.is.equal(10, c.x)
×
66
                assert.is.equal(9,  c.y)
×
67
                assert.is.equal(8,  c.z)
×
68
                assert.is.equal(c,  d)
×
69
        end)
70

71
        it("subracts a vector from another", function()
×
72
                local a = vec3(3, 5, 7)
×
73
                local b = vec3(7, 4, 1)
×
74
                local c = a:sub(b)
×
75
                local d = a - b
×
76
                assert.is.equal(-4, c.x)
×
77
                assert.is.equal( 1, c.y)
×
78
                assert.is.equal( 6, c.z)
×
79
                assert.is.equal( c, d)
×
80
        end)
81

82
        it("multiplies a vector by a scale factor", function()
×
83
                local a = vec3(3, 5, 7)
×
84
                local s = 2
×
85
                local c = a:scale(s)
×
86
                local d = a * s
×
87
                assert.is.equal(6,  c.x)
×
88
                assert.is.equal(10, c.y)
×
89
                assert.is.equal(14, c.z)
×
90
                assert.is.equal(c,  d)
×
91
        end)
92

93
        it("divides a vector by another vector", function()
×
94
                local a = vec3(3, 5, 7)
×
95
                local s = vec3(2, 2, 2)
×
96
                local c = a:div(s)
×
97
                local d = a / s
×
98
                assert.is.equal(1.5, c.x)
×
99
                assert.is.equal(2.5, c.y)
×
100
                assert.is.equal(3.5, c.z)
×
101
                assert.is.equal(c,   d)
×
102
        end)
103

104
        it("inverts a vector", function()
×
105
                local a = vec3(3, -5, 7)
×
106
                local b = -a
×
107
                assert.is.equal(-a.x, b.x)
×
108
                assert.is.equal(-a.y, b.y)
×
109
                assert.is.equal(-a.z, b.z)
×
110
        end)
111

112
        it("gets the length of a vector", function()
×
113
                local a = vec3(3, 5, 7)
×
114
                assert.is.equal(sqrt(83), a:len())
×
115
                end)
116

117
        it("gets the square length of a vector", function()
×
118
                local a = vec3(3, 5, 7)
×
119
                assert.is.equal(83, a:len2())
×
120
        end)
121

122
        it("normalizes a vector", function()
×
123
                local a = vec3(3, 5, 7)
×
124
                local b = a:normalize()
×
125
                assert.is_true(abs(b:len()-1) < DBL_EPSILON)
×
126
        end)
127

128
        it("normalizes a vector and gets the length", function()
×
129
                local a = vec3(3, 5, 7)
×
130
                local b, l = a:normalize_len()
×
131
                assert.is_true(abs(b:len()-1) < DBL_EPSILON)
×
132
                assert.is.equal(sqrt(83), l)
×
133
        end)
134

135
        it("trims the length of a vector", function()
×
136
                local a = vec3(3, 5, 7)
×
137
                local b = a:trim(0.5)
×
138
                assert.is_true(abs(b:len()-0.5) < DBL_EPSILON)
×
139
        end)
140

141
        it("gets the distance between two vectors", function()
×
142
                local a = vec3(3, 5, 7)
×
143
                local b = vec3(7, 4, 1)
×
144
                local c = a:dist(b)
×
145
                assert.is.equal(sqrt(53), c)
×
146
        end)
147

148
        it("gets the square distance between two vectors", function()
×
149
                local a = vec3(3, 5, 7)
×
150
                local b = vec3(7, 4, 1)
×
151
                local c = a:dist2(b)
×
152
                assert.is.equal(53, c)
×
153
        end)
154

155
        it("crosses two vectors", function()
×
156
                local a = vec3(3, 5, 7)
×
157
                local b = vec3(7, 4, 1)
×
158
                local c = a:cross(b)
×
159
                assert.is.equal(-23, c.x)
×
160
                assert.is.equal( 46, c.y)
×
161
                assert.is.equal(-23, c.z)
×
162
        end)
163

164
        it("dots two vectors", function()
×
165
                local a = vec3(3, 5, 7)
×
166
                local b = vec3(7, 4, 1)
×
167
                local c = a:dot(b)
×
168
                assert.is.equal(48, c)
×
169
        end)
170

171
        it("interpolates between two vectors", function()
×
172
                local a = vec3(3, 5, 7)
×
173
                local b = vec3(7, 4, 1)
×
174
                local s = 0.1
×
175
                local c = a:lerp(b, s)
×
176
                assert.is.equal(3.4, c.x)
×
177
                assert.is.equal(4.9, c.y)
×
178
                assert.is.equal(6.4, c.z)
×
179
        end)
180

181
        it("unpacks a vector", function()
×
182
                local a       = vec3(3, 5, 7)
×
183
                local x, y, z = a:unpack()
×
184
                assert.is.equal(3, x)
×
185
                assert.is.equal(5, y)
×
186
                assert.is.equal(7, z)
×
187
        end)
188

189
        it("rotates a vector", function()
×
190
                local a = vec3(3, 5, 7)
×
191
                local b = a:rotate( math.pi, vec3.unit_z)
×
192
                local c = b:rotate(-math.pi, vec3.unit_z)
×
193
                assert.is_not.equal(a, b)
×
194
                assert.is.equal(7, b.z)
×
195
                assert.is.equal(a, c)
×
196
        end)
197

198
        it("cannot rotate a vector without a valis axis", function()
×
199
                local a = vec3(3, 5, 7)
×
200
                local b = a:rotate(math.pi, 0)
×
201
                assert.is_equal(a, b)
×
202
        end)
203

204
        it("gets a perpendicular vector", function()
×
205
                local a = vec3(3, 5, 7)
×
206
                local b = a:perpendicular()
×
207
                assert.is.equal(-5, b.x)
×
208
                assert.is.equal( 3, b.y)
×
209
                assert.is.equal( 0, b.z)
×
210
        end)
211

212
        it("gets a string representation of a vector", function()
×
213
                local a = vec3()
×
214
                local b = a:to_string()
×
215
                assert.is.equal("(+0.000,+0.000,+0.000)", b)
×
216
        end)
217

218
        it("rounds a 3-vector", function()
×
219
                local a = vec3(1.1,1.9,3):round()
×
220
                assert.is.equal(a.x, 1)
×
221
                assert.is.equal(a.y, 2)
×
222
                assert.is.equal(a.z, 3)
×
223
        end)
224

225
        it("flips a 3-vector", function()
×
226
                local a = vec3(1,2,3)
×
227
                local temp = a:flip_x()
×
228
                assert.is.equal(temp, vec3(-1, 2, 3))
×
229
                temp = temp:flip_y()
×
230
                assert.is.equal(temp, vec3(-1, -2, 3))
×
231
                temp = temp:flip_z()
×
232
                assert.is.equal(temp, vec3(-1, -2, -3))
×
233
        end)
234

235
        it("get two 3-vectors angle", function()
×
236
                local angle_to = function(a, b)
237
                        local deg = math.deg(a:angle_to(b))
×
238
                        return string.format('%.2f', deg)
×
239
                end
240

241
                local a = vec3(1,2,3)
×
242
                assert.is.equal(angle_to(a, vec3(3, 2, 1)), '44.42')
×
243
                assert.is.equal(angle_to(a, vec3(0, 10, 0)), '57.69')
×
244
                assert.is.equal(angle_to(a, vec3(0, -12, -10)), '157.51')
×
245

246
                a = vec3.unit_z
×
247
                assert.is.equal(angle_to(a, vec3(0, 10, 0)), '90.00')
×
248
                assert.is.equal(angle_to(a, vec3(-123, 10, 0)), '90.00')
×
249
                assert.is.equal(angle_to(a, vec3(-10, 0, 10)), '45.00')
×
250
                assert.is.equal(angle_to(a, vec3(-10, 0, -10)), '135.00')
×
251
                assert.is.equal(angle_to(a, vec3(0, -10, -10)), '135.00')
×
252
                assert.is.equal(angle_to(a, vec3(0, 0, -10)), '180.00')
×
253
                assert.is.equal(angle_to(a, vec3(0, 0, 100)), '0.00')
×
254

255
                a = vec3(100, 100, 0)
×
256
                assert.is.equal(angle_to(a, vec3(0, 0, 100)), '90.00')
×
257
                assert.is.equal(angle_to(a, vec3(0, 0, -100)), '90.00')
×
258
                assert.is.equal(angle_to(a, vec3(-10, -10, 0)), '180.00')
×
259
                assert.is.equal(angle_to(a, vec3.unit_z), '90.00')
×
260
        end)
261
end)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc