- vec2 to_polar/from_cartesian tests were testing for equality rather than using an epsilon. - bound2.contains had two tests that were plain wrong. - While I'm fixing the bounds test, bound2.contains and bound3.contains probably ought to test their own min and max values for inclusion. - The implementation of mat4.look_at appears to be wrong. The final column was being set to 0,0,0,1 which comparing against other implementations does not seem to be correct. My replacement code is modeled on the method used in mat4x4_look_at() in linmath.h in GLFW, which says it's a reimplementation on the method from gluLookAt(). With this change the test passes as originally written.
181 lines
4.5 KiB
Lua
181 lines
4.5 KiB
Lua
local bound2 = require "modules.bound2"
|
|
local vec2 = require "modules.vec2"
|
|
local DBL_EPSILON = require("modules.constants").DBL_EPSILON
|
|
|
|
describe("bound2:", function()
|
|
it("creates an empty bound2", function()
|
|
local a = bound2()
|
|
assert.is.equal(0, a.min.x)
|
|
assert.is.equal(0, a.min.y)
|
|
assert.is.equal(0, a.max.x)
|
|
assert.is.equal(0, a.max.y)
|
|
end)
|
|
|
|
it("creates a bound2 from vec2s", function()
|
|
local a = bound2(vec2(1,2), vec2(4,5))
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(4, a.max.x)
|
|
assert.is.equal(5, a.max.y)
|
|
end)
|
|
|
|
it("creates a bound2 using new()", function()
|
|
local a = bound2.new(vec2(1,2), vec2(4,5))
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(4, a.max.x)
|
|
assert.is.equal(5, a.max.y)
|
|
end)
|
|
|
|
it("creates a bound2 using at()", function()
|
|
local a = bound2.at(vec2(4,5), vec2(1,2))
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(4, a.max.x)
|
|
assert.is.equal(5, a.max.y)
|
|
end)
|
|
|
|
it("clones a bound2", function()
|
|
local a = bound2(vec2(1,2), vec2(4,5))
|
|
local b = a:clone()
|
|
a.max = new vec2(9,9)
|
|
assert.is.equal(a.min, b.min)
|
|
assert.is.not_equal(a.max, b.max)
|
|
end)
|
|
|
|
it("uses bound2 check()", function()
|
|
local a = bound2(vec2(4,2), vec2(1,5)):check()
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(4, a.max.x)
|
|
assert.is.equal(5, a.max.y)
|
|
end)
|
|
|
|
it("queries a bound2 size", function()
|
|
local a = bound2(vec2(1,2), vec2(4,6))
|
|
local v = a:size()
|
|
local r = a:radius()
|
|
assert.is.equal(3, v.x)
|
|
assert.is.equal(4, v.y)
|
|
|
|
assert.is.equal(1.5, r.x)
|
|
assert.is.equal(2, r.y)
|
|
end)
|
|
|
|
it("sets a bound2 size", function()
|
|
local a = bound2(vec2(1,2), vec2(4,5))
|
|
local b = a:with_size(vec2(1,1))
|
|
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(4, a.max.x)
|
|
assert.is.equal(5, a.max.y)
|
|
|
|
assert.is.equal(1, b.min.x)
|
|
assert.is.equal(2, b.min.y)
|
|
assert.is.equal(2, b.max.x)
|
|
assert.is.equal(3, b.max.y)
|
|
end)
|
|
|
|
it("queries a bound2 center", function()
|
|
local a = bound2(vec2(1,2), vec2(3,4))
|
|
local v = a:center()
|
|
assert.is.equal(2, v.x)
|
|
assert.is.equal(3, v.y)
|
|
end)
|
|
|
|
it("sets a bound2 center", function()
|
|
local a = bound2(vec2(1,2), vec2(3,4))
|
|
local b = a:with_center(vec2(1,1))
|
|
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(3, a.max.x)
|
|
assert.is.equal(4, a.max.y)
|
|
|
|
assert.is.equal(0, b.min.x)
|
|
assert.is.equal(0, b.min.y)
|
|
assert.is.equal(2, b.max.x)
|
|
assert.is.equal(2, b.max.y)
|
|
end)
|
|
|
|
it("sets a bound2 size centered", function()
|
|
local a = bound2(vec2(1,2), vec2(3,4))
|
|
local b = a:with_size_centered(vec2(4,4))
|
|
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(3, a.max.x)
|
|
assert.is.equal(4, a.max.y)
|
|
|
|
assert.is.equal(0, b.min.x)
|
|
assert.is.equal(1, b.min.y)
|
|
assert.is.equal(4, b.max.x)
|
|
assert.is.equal(5, b.max.y)
|
|
end)
|
|
|
|
it("insets a bound2", function()
|
|
local a = bound2(vec2(1,2), vec2(5,10))
|
|
local b = a:inset(vec2(1,2))
|
|
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(5, a.max.x)
|
|
assert.is.equal(10, a.max.y)
|
|
|
|
assert.is.equal(2, b.min.x)
|
|
assert.is.equal(4, b.min.y)
|
|
assert.is.equal(4, b.max.x)
|
|
assert.is.equal(8, b.max.y)
|
|
end)
|
|
|
|
it("outsets a bound2", function()
|
|
local a = bound2(vec2(1,2), vec2(5,6))
|
|
local b = a:outset(vec2(1,2))
|
|
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(5, a.max.x)
|
|
assert.is.equal(6, a.max.y)
|
|
|
|
assert.is.equal(0, b.min.x)
|
|
assert.is.equal(0, b.min.y)
|
|
assert.is.equal(6, b.max.x)
|
|
assert.is.equal(8, b.max.y)
|
|
end)
|
|
|
|
it("offsets a bound2", function()
|
|
local a = bound2(vec2(1,2), vec2(5,6))
|
|
local b = a:offset(vec2(1,2))
|
|
|
|
assert.is.equal(1, a.min.x)
|
|
assert.is.equal(2, a.min.y)
|
|
assert.is.equal(5, a.max.x)
|
|
assert.is.equal(6, a.max.y)
|
|
|
|
assert.is.equal(2, b.min.x)
|
|
assert.is.equal(4, b.min.y)
|
|
assert.is.equal(6, b.max.x)
|
|
assert.is.equal(8, b.max.y)
|
|
end)
|
|
|
|
it("tests for points inside bound2", function()
|
|
local a = bound2(vec2(1,2), vec2(4,5))
|
|
|
|
assert.is_true(a:contains(vec2(1,2)))
|
|
assert.is_true(a:contains(vec2(4,5)))
|
|
assert.is_true(a:contains(vec2(2,3)))
|
|
assert.is_not_true(a:contains(vec2(0,3)))
|
|
assert.is_not_true(a:contains(vec2(5,3)))
|
|
assert.is_not_true(a:contains(vec2(2,1)))
|
|
assert.is_not_true(a:contains(vec2(2,6)))
|
|
end)
|
|
|
|
it("checks for bound2.zero", function()
|
|
assert.is.equal(0, bound2.zero.min.x)
|
|
assert.is.equal(0, bound2.zero.min.y)
|
|
assert.is.equal(0, bound2.zero.max.x)
|
|
assert.is.equal(0, bound2.zero.max.y)
|
|
end)
|
|
end)
|