From 23325277659132e95b346307b591c944625bda16 Mon Sep 17 00:00:00 2001
From: DS <vorunbekannt75@web.de>
Date: Mon, 5 Apr 2021 15:55:56 +0200
Subject: Add vector.to_string and vector.from_string (#10323)

Writing vectors as strings is very common and should belong to `vector.*`. `minetest.pos_to_string` is also too long to write, implies that one should only use it for positions and leaves no spaces after the commas.
---
 builtin/common/tests/vector_spec.lua | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

(limited to 'builtin/common/tests')

diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua
index 0f287363a..104c656e9 100644
--- a/builtin/common/tests/vector_spec.lua
+++ b/builtin/common/tests/vector_spec.lua
@@ -48,6 +48,25 @@ describe("vector", function()
 		assert.same({ x = 41, y = 52, z = 63 }, vector.offset(vector.new(1, 2, 3), 40, 50, 60))
 	end)
 
+	it("to_string()", function()
+		local v = vector.new(1, 2, 3.14)
+		assert.same("(1, 2, 3.14)", vector.to_string(v))
+	end)
+
+	it("from_string()", function()
+		local v = vector.new(1, 2, 3.14)
+		assert.same({v, 13}, {vector.from_string("(1, 2, 3.14)")})
+		assert.same({v, 12}, {vector.from_string("(1,2 ,3.14)")})
+		assert.same({v, 12}, {vector.from_string("(1,2,3.14,)")})
+		assert.same({v, 11}, {vector.from_string("(1 2 3.14)")})
+		assert.same({v, 15}, {vector.from_string("( 1, 2, 3.14 )")})
+		assert.same({v, 15}, {vector.from_string(" ( 1, 2, 3.14) ")})
+		assert.same({vector.new(), 8}, {vector.from_string("(0,0,0) ( 1, 2, 3.14) ")})
+		assert.same({v, 22}, {vector.from_string("(0,0,0) ( 1, 2, 3.14) ", 8)})
+		assert.same({v, 22}, {vector.from_string("(0,0,0) ( 1, 2, 3.14) ", 9)})
+		assert.same(nil, vector.from_string("nothing"))
+	end)
+
 	-- This function is needed because of floating point imprecision.
 	local function almost_equal(a, b)
 		if type(a) == "number" then
-- 
cgit v1.2.3