aboutsummaryrefslogtreecommitdiff
path: root/builtin/common
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/common')
-rw-r--r--builtin/common/tests/vector_spec.lua51
-rw-r--r--builtin/common/vector.lua22
2 files changed, 50 insertions, 23 deletions
diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua
index 9ebe69056..2a50e2889 100644
--- a/builtin/common/tests/vector_spec.lua
+++ b/builtin/common/tests/vector_spec.lua
@@ -31,6 +31,21 @@ describe("vector", function()
end)
end)
+ it("zero()", function()
+ assert.same({x = 0, y = 0, z = 0}, vector.zero())
+ assert.same(vector.new(), vector.zero())
+ assert.equal(vector.new(), vector.zero())
+ assert.is_true(vector.check(vector.zero()))
+ end)
+
+ it("copy()", function()
+ local v = vector.new(1, 2, 3)
+ assert.same(v, vector.copy(v))
+ assert.same(vector.new(v), vector.copy(v))
+ assert.equal(vector.new(v), vector.copy(v))
+ assert.is_true(vector.check(vector.copy(v)))
+ end)
+
it("indexes", function()
local some_vector = vector.new(24, 42, 13)
assert.equal(24, some_vector[1])
@@ -114,25 +129,25 @@ describe("vector", function()
end)
it("equals()", function()
- local function assertE(a, b)
- assert.is_true(vector.equals(a, b))
- end
- local function assertNE(a, b)
- assert.is_false(vector.equals(a, b))
- end
+ local function assertE(a, b)
+ assert.is_true(vector.equals(a, b))
+ end
+ local function assertNE(a, b)
+ assert.is_false(vector.equals(a, b))
+ end
- assertE({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
- assertE({x = -1, y = 0, z = 1}, {x = -1, y = 0, z = 1})
- assertE({x = -1, y = 0, z = 1}, vector.new(-1, 0, 1))
- local a = {x = 2, y = 4, z = -10}
- assertE(a, a)
- assertNE({x = -1, y = 0, z = 1}, a)
-
- assert.equal(vector.new(1, 2, 3), vector.new(1, 2, 3))
- assert.is_true(vector.new(1, 2, 3):equals(vector.new(1, 2, 3)))
- assert.not_equal(vector.new(1, 2, 3), vector.new(1, 2, 4))
- assert.is_true(vector.new(1, 2, 3) == vector.new(1, 2, 3))
- assert.is_false(vector.new(1, 2, 3) == vector.new(1, 3, 3))
+ assertE({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
+ assertE({x = -1, y = 0, z = 1}, {x = -1, y = 0, z = 1})
+ assertE({x = -1, y = 0, z = 1}, vector.new(-1, 0, 1))
+ local a = {x = 2, y = 4, z = -10}
+ assertE(a, a)
+ assertNE({x = -1, y = 0, z = 1}, a)
+
+ assert.equal(vector.new(1, 2, 3), vector.new(1, 2, 3))
+ assert.is_true(vector.new(1, 2, 3):equals(vector.new(1, 2, 3)))
+ assert.not_equal(vector.new(1, 2, 3), vector.new(1, 2, 4))
+ assert.is_true(vector.new(1, 2, 3) == vector.new(1, 2, 3))
+ assert.is_false(vector.new(1, 2, 3) == vector.new(1, 3, 3))
end)
it("metatable is same", function()
diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua
index 752167a63..02fc1bdee 100644
--- a/builtin/common/vector.lua
+++ b/builtin/common/vector.lua
@@ -30,16 +30,28 @@ local function fast_new(x, y, z)
end
function vector.new(a, b, c)
- if type(a) == "table" then
- assert(a.x and a.y and a.z, "Invalid vector passed to vector.new()")
- return fast_new(a.x, a.y, a.z)
- elseif a then
- assert(b and c, "Invalid arguments for vector.new()")
+ if a and b and c then
return fast_new(a, b, c)
end
+
+ -- deprecated, use vector.copy and vector.zero directly
+ if type(a) == "table" then
+ return vector.copy(a)
+ else
+ assert(not a, "Invalid arguments for vector.new()")
+ return vector.zero()
+ end
+end
+
+function vector.zero()
return fast_new(0, 0, 0)
end
+function vector.copy(v)
+ assert(v.x and v.y and v.z, "Invalid vector passed to vector.copy()")
+ return fast_new(v.x, v.y, v.z)
+end
+
function vector.from_string(s, init)
local x, y, z, np = string.match(s, "^%s*%(%s*([^%s,]+)%s*[,%s]%s*([^%s,]+)%s*[,%s]" ..
"%s*([^%s,]+)%s*[,%s]?%s*%)()", init)