127 lines
3.4 KiB
Lua
127 lines
3.4 KiB
Lua
local vec3 = require "modules.vec3"
|
|
|
|
describe("vec3:", function()
|
|
it("testing basic operators", function()
|
|
-- add
|
|
assert.is.equal(vec3(1, 1, 1) + vec3(2, 3, 4), vec3(3, 4, 5))
|
|
assert.is.equal(vec3(1, 1, 1) + 5, vec3(6, 6, 6)
|
|
|
|
-- sub
|
|
assert.is.equal(vec3(1, 1, 1) - vec3(2, 3, 4), vec3(-1, -2, -3))
|
|
assert.is.equal(vec3(1, 1, 1) - 5, vec3(-4, -4, -4)
|
|
|
|
-- mul
|
|
assert.is.equal(vec3(2, 1, 2) * vec3(2, 3, 4), vec3(4, 3, 8))
|
|
assert.has_no.errors(function() return vec3(1,1,1) * {x=2,y=2,z=2} end)
|
|
assert.has_no.errors(function() return 2 * vec3(1,1,1) end)
|
|
assert.has_no.errors(function() return vec3(1,1,1) * 2 end)
|
|
|
|
-- unm
|
|
assert.is.equal(vec3(1, 1, 1) + -vec3(1, 1, 1), vec3(0, 0, 0))
|
|
|
|
-- div
|
|
assert.is.equal(vec3(1, 1, 1) / 2, vec3(0.5, 0.5, 0.5))
|
|
assert.is.equal(vec3(1, 1, 1) / vec3(2, 2, 2), vec3(0.5, 0.5, 0.5))
|
|
assert.is.equal(1 / vec3(2, 2, 2), vec3(0.5, 0.5, 0.5))
|
|
end)
|
|
|
|
it("testing value ranges", function()
|
|
-- This makes sure we are initializing reasonably and that
|
|
-- we haven't broken everything with some FFI magic.
|
|
assert.is.equal(vec3(256, 0, 0).x, 256)
|
|
assert.is.equal(vec3(0, 65537, 0).y, 65537)
|
|
assert.is.equal(vec3(953, 0, 491.5).z, 491.5)
|
|
assert.is.equal(vec3(0, 1.2222, 0).y, 1.2222)
|
|
end)
|
|
|
|
it("testing comparison operators", function()
|
|
-- eq
|
|
assert.is_true(vec3(5,5,5) == vec3(5,5,5))
|
|
|
|
-- lt
|
|
assert.is_true(vec3(3,3,3) < vec3(5,5,5))
|
|
assert.is_false(vec3(5,5,5) < vec3(5,5,5))
|
|
|
|
-- le
|
|
assert.is_true(vec3(5,5,5) <= vec3(5,5,5))
|
|
assert.is_false(vec3(3,3,3) >= vec3(5,5,5))
|
|
end)
|
|
|
|
it("testing new", function()
|
|
local v = vec3()
|
|
assert.is_true(v.x == 0)
|
|
assert.is_true(v.y == 0)
|
|
assert.is_true(v.z == 0)
|
|
|
|
v = vec3{1, 2, 3}
|
|
assert.is_true(v.x == 1)
|
|
assert.is_true(v.y == 2)
|
|
assert.is_true(v.z == 3)
|
|
|
|
v = vec3(4, 5, 6)
|
|
assert.is_true(v.x == 4)
|
|
assert.is_true(v.y == 5)
|
|
assert.is_true(v.z == 6)
|
|
end)
|
|
|
|
it("testing tostring", function()
|
|
assert.has_no.errors(function() return tostring(vec3(1,1,1)) end)
|
|
end)
|
|
|
|
it("testing isvector", function()
|
|
assert.is_true(vec3.isvector(vec3()))
|
|
assert.is_true(vec3.isvector(vec3{1,1}))
|
|
assert.is_true(vec3.isvector{x=1, y=2, z=3})
|
|
end)
|
|
|
|
it("testing clone", function()
|
|
local v = vec3(1,1,1)
|
|
local c = v:clone()
|
|
c.x = 2
|
|
assert.is_not.equal(v, c)
|
|
end)
|
|
|
|
it("testing dot", function()
|
|
assert.is.equal(vec3(5,10,-5):dot(vec3(3,1,1)), 20)
|
|
assert.is.equal(vec3(2,-1,2):dot(vec3(1,2,1)), 2)
|
|
assert.is.equal(vec3(5,5,5):dot(vec3(5,5,5)), 75)
|
|
end)
|
|
|
|
it("testing cross", function()
|
|
assert.is.equal(vec3.unit_x:cross(vec3.unit_y), vec3.unit_z)
|
|
end)
|
|
|
|
it("testing len and normalize", function()
|
|
assert.is.equal(vec3(1,0,0):len(), 1)
|
|
assert.is.equal(vec3(5,-10,9):normalize():len(), 1)
|
|
end)
|
|
|
|
it("testing len2", function()
|
|
assert.is.equal(vec3(1,0,0):len2(), 1)
|
|
assert.is.equal(vec3(2,0,2):len2(), 8)
|
|
end)
|
|
|
|
it("testing lerp", function()
|
|
assert.is.equal(vec3(0, 0, 0):lerp(vec3(1, 1, 1), 0.5), vec3(0.5, 0.5, 0.5))
|
|
end)
|
|
|
|
it("testing rotate", function()
|
|
local t = 1.0e-15
|
|
assert.is_true(vec3(1,0,0):rotate(math.pi, vec3.unit_z) - vec3(-1, 0, 0) < vec3(t, t, t))
|
|
end)
|
|
|
|
describe("vec3 pending tests", function()
|
|
pending "trim"
|
|
pending "angle_to"
|
|
pending "angle_between"
|
|
pending "mirror_on"
|
|
pending "orientation_to_direction"
|
|
pending "project_from"
|
|
pending "project_on"
|
|
pending "perpendicular"
|
|
pending "rotate"
|
|
pending "dist"
|
|
pending "dist2"
|
|
end)
|
|
end)
|