From adab08ce401572e26ce5dfb62daf0c94211c08b5 Mon Sep 17 00:00:00 2001 From: VorTechnix <45538536+VorTechnix@users.noreply.github.com> Date: Wed, 12 Jul 2023 10:51:41 -0700 Subject: [PATCH] removed key_instance --- .tests/parse/axes/axes_parser.test.lua | 316 +++++++++--------- .../utils/parse/key_instance.lua | 91 ----- 2 files changed, 158 insertions(+), 249 deletions(-) delete mode 100644 worldeditadditions_core/utils/parse/key_instance.lua diff --git a/.tests/parse/axes/axes_parser.test.lua b/.tests/parse/axes/axes_parser.test.lua index 51f8946..0b5f6e6 100644 --- a/.tests/parse/axes/axes_parser.test.lua +++ b/.tests/parse/axes/axes_parser.test.lua @@ -1,158 +1,158 @@ -local Vector3 = require("worldeditadditions_core.utils.vector3") - -local facing_dirs = dofile("./.tests/parse/axes/include_facing_dirs.lua") - -local parse = require("worldeditadditions_core.utils.parse.axes_parser") -local parse_axes = parse.keytable - - -describe("parse_axes", function() - - -- Basic tests - it("should work on single horizontal axes", function() - local minv, maxv = parse_axes({ - "x", "3", - "-z", "10", - }, facing_dirs.x_pos) - assert.is.truthy(minv) - assert.are.same(Vector3.new(0, 0, -10), minv) - assert.are.same(Vector3.new(3, 0, 0), maxv) - end) - - it("should handle axis clumps and orphan (universal) values", function() - local minv, maxv = parse_axes({ - "xz", "-3", - "10", - }, facing_dirs.x_pos) - assert.is.truthy(minv) - assert.are.same(Vector3.new(-3, 0, -3), minv) - assert.are.same(Vector3.new(10, 10, 10), maxv) - end) - - it("should work on directions and their abriviations", function() - local minv, maxv = parse_axes({ - "l", "3", -- +z - "-r", "-3", -- +z - "b", "-10", -- -x - }, facing_dirs.x_pos) - assert.is.truthy(minv) - assert.are.same(Vector3.new(0, 0, -3), minv) - assert.are.same(Vector3.new(10, 0, 3), maxv) - end) - - it("should work with compass directions and their abriviations", function() - local minv, maxv = parse_axes({ - "n", "3", -- +z - "south", "3", -- -z - "-west", "10", -- +x - }, facing_dirs.x_pos) - assert.is.truthy(minv) - assert.are.same(Vector3.new(0, 0, -3), minv) - assert.are.same(Vector3.new(10, 0, 3), maxv) - end) - - it("should work with ?", function() - local minv, maxv = parse_axes({ - "?", "3", -- -z - }, facing_dirs.z_neg) - assert.is.truthy(minv) - assert.are.same(Vector3.new(0, 0, -3), minv) - assert.are.same(Vector3.new(0, 0, 0), maxv) - end) - - it("should work with complex relative / absolute combinations", function() - local minv, maxv = parse_axes({ - "f", "3", -- +x - "left", "10", -- +z - "y", "77", - "x", "30", - "back", "99", - }, facing_dirs.x_pos) - assert.is.truthy(minv) - assert.are.same(Vector3.new(-99, 0, 0), minv) - assert.are.same(Vector3.new(33, 77, 10), maxv) - end) - - it("should work with complex relative / absolute combinations with negative facing_dirs", function() - local minv, maxv = parse_axes({ - "f", "3", -- -z - "l", "10", -- +x - "y", "77", - "x", "30", - "b", "99", -- +z - }, facing_dirs.z_neg) - assert.is.truthy(minv) - assert.are.same(Vector3.new(0, 0, -3), minv) - assert.are.same(Vector3.new(40, 77, 99), maxv) - end) - - it("should return 2 0,0,0 vectors if no input", function() - local minv, maxv = parse_axes({ - -- No input - }, facing_dirs.z_neg) - assert.is.truthy(minv) - assert.are.same(Vector3.new(0, 0, 0), minv) - assert.are.same(Vector3.new(0, 0, 0), maxv) - end) - - -- Options tests - it("should mirror the max values of the two vectors if mirroring keyword is present", function() - local minv, maxv = parse_axes({ - "x", "3", - "f", "-5", -- +x - "z", "-10", - "mir", - }, facing_dirs.x_pos) - assert.is.truthy(minv) - assert.are.same(Vector3.new(-5, 0, -10), minv) - assert.are.same(Vector3.new(5, 0, 10), maxv) - end) - - it("should return a single vector if 'sum' input is truthy", function() - local minv, maxv = parse_axes({ - "x", "3", - "z", "-10", - }, facing_dirs.x_pos,"sum") - assert.is.truthy(minv) - assert.are.same(Vector3.new(3, 0, -10), minv) - assert.are.same(nil, maxv) - end) - - it("should dissable mirroring if 'sum' input is truthy", function() - local minv, maxv = parse_axes({ - "x", "3", - "f", "-5", -- +x - "z", "-10", - "sym", - }, facing_dirs.x_pos,"sum") - assert.is.truthy(minv) - assert.are.same(Vector3.new(-2, 0, -10), minv) - assert.are.same(nil, maxv) - end) - - -- Error tests - it("should return error if bad axis/dir", function() - local minv, maxv = parse_axes({ - "f", "3", -- +x - "lift", "10", -- Invalid axis - "y", "77", - "x", "30", - "back", "99", -- -x - }, facing_dirs.x_pos) - assert.are.same(false, minv) - assert.are.same("string", type(maxv)) - end) - - it("should return error if bad value", function() - local minv, maxv = parse_axes({ - "f", "3", -- +x - "left", "10", -- +z - "y", "!Q", -- Invalid value - "x", "30", - "back", "99", - }, facing_dirs.x_pos) - assert.are.same(false, minv) - assert.are.same("string", type(maxv)) - end) - -end) +local Vector3 = require("worldeditadditions_core.utils.vector3") + +local facing_dirs = dofile("./.tests/parse/axes/include_facing_dirs.lua") + +local parse = require("worldeditadditions_core.utils.parse.axes_parser") +local parse_axes = parse.keytable + + +describe("parse_axes", function() + + -- Basic tests + it("should work on single horizontal axes", function() + local minv, maxv = parse_axes({ + "x", "3", + "-z", "10", + }, facing_dirs.x_pos) + assert.is.truthy(minv) + assert.are.same(Vector3.new(0, 0, -10), minv) + assert.are.same(Vector3.new(3, 0, 0), maxv) + end) + + it("should handle axis clumps and orphan (universal) values", function() + local minv, maxv = parse_axes({ + "xz", "-3", + "10", + }, facing_dirs.x_pos) + assert.is.truthy(minv) + assert.are.same(Vector3.new(-3, 0, -3), minv) + assert.are.same(Vector3.new(10, 10, 10), maxv) + end) + + it("should work on directions and their abriviations", function() + local minv, maxv = parse_axes({ + "l", "3", -- +z + "-right", "-3", -- +z + "b", "-10", -- -x + }, facing_dirs.x_pos) + assert.is.truthy(minv) + assert.are.same(Vector3.new(0, 0, -3), minv) + assert.are.same(Vector3.new(10, 0, 3), maxv) + end) + + it("should work with compass directions and their abriviations", function() + local minv, maxv = parse_axes({ + "n", "3", -- +z + "south", "3", -- -z + "-west", "10", -- +x + }, facing_dirs.x_pos) + assert.is.truthy(minv) + assert.are.same(Vector3.new(0, 0, -3), minv) + assert.are.same(Vector3.new(10, 0, 3), maxv) + end) + + it("should work with ?", function() + local minv, maxv = parse_axes({ + "?", "3", -- -z + }, facing_dirs.z_neg) + assert.is.truthy(minv) + assert.are.same(Vector3.new(0, 0, -3), minv) + assert.are.same(Vector3.new(0, 0, 0), maxv) + end) + + it("should work with complex relative / absolute combinations", function() + local minv, maxv = parse_axes({ + "f", "3", -- +x + "left", "10", -- +z + "y", "77", + "x", "30", + "back", "99", + }, facing_dirs.x_pos) + assert.is.truthy(minv) + assert.are.same(Vector3.new(-99, 0, 0), minv) + assert.are.same(Vector3.new(33, 77, 10), maxv) + end) + + it("should work with complex relative / absolute combinations with negative facing_dirs", function() + local minv, maxv = parse_axes({ + "f", "3", -- -z + "l", "10", -- +x + "y", "77", + "x", "30", + "b", "99", -- +z + }, facing_dirs.z_neg) + assert.is.truthy(minv) + assert.are.same(Vector3.new(0, 0, -3), minv) + assert.are.same(Vector3.new(40, 77, 99), maxv) + end) + + it("should return 2 0,0,0 vectors if no input", function() + local minv, maxv = parse_axes({ + -- No input + }, facing_dirs.z_neg) + assert.is.truthy(minv) + assert.are.same(Vector3.new(0, 0, 0), minv) + assert.are.same(Vector3.new(0, 0, 0), maxv) + end) + + -- Options tests + it("should mirror the max values of the two vectors if mirroring keyword is present", function() + local minv, maxv = parse_axes({ + "x", "3", + "f", "-5", -- +x + "z", "-10", + "mir", + }, facing_dirs.x_pos) + assert.is.truthy(minv) + assert.are.same(Vector3.new(-5, 0, -10), minv) + assert.are.same(Vector3.new(5, 0, 10), maxv) + end) + + it("should return a single vector if 'sum' input is truthy", function() + local minv, maxv = parse_axes({ + "x", "3", + "z", "-10", + }, facing_dirs.x_pos,"sum") + assert.is.truthy(minv) + assert.are.same(Vector3.new(3, 0, -10), minv) + assert.are.same(nil, maxv) + end) + + it("should dissable mirroring if 'sum' input is truthy", function() + local minv, maxv = parse_axes({ + "x", "3", + "f", "-5", -- +x + "z", "-10", + "sym", + }, facing_dirs.x_pos,"sum") + assert.is.truthy(minv) + assert.are.same(Vector3.new(-2, 0, -10), minv) + assert.are.same(nil, maxv) + end) + + -- Error tests + it("should return error if bad axis/dir", function() + local minv, maxv = parse_axes({ + "f", "3", -- +x + "lift", "10", -- Invalid axis + "y", "77", + "x", "30", + "back", "99", -- -x + }, facing_dirs.x_pos) + assert.are.same(false, minv) + assert.are.same("string", type(maxv)) + end) + + it("should return error if bad value", function() + local minv, maxv = parse_axes({ + "f", "3", -- +x + "left", "10", -- +z + "y", "!Q", -- Invalid value + "x", "30", + "back", "99", + }, facing_dirs.x_pos) + assert.are.same(false, minv) + assert.are.same("string", type(maxv)) + end) + +end) diff --git a/worldeditadditions_core/utils/parse/key_instance.lua b/worldeditadditions_core/utils/parse/key_instance.lua deleted file mode 100644 index 727fa43..0000000 --- a/worldeditadditions_core/utils/parse/key_instance.lua +++ /dev/null @@ -1,91 +0,0 @@ ---- A container for transmitting (axis table, sign) or (dir, sign) pairs --- and other data within parsing functions. --- @internal --- @class worldeditadditions_core.parse.key_instance -local key_instance = {} -key_instance.__index = key_instance -key_instance.__name = "Key Instance" - --- Allowed values for "type" field -local types = { - err = true, rev = true, - axis = true, dir = true, - replace = { - error = "err", - axes = "axis", - }, -} - --- Simple function for putting stuff in quotes -local function enquote(take) - if type(take) == "string" then - return '"'..take..'"' - else return tostring(take) end -end - ---- Creates a new Key Instance. --- This is a table with a "type" string, an entry string or table --- and an optional signed integer (or code number in the case of errors) --- @param: type: String: Key type (axis, dir(ection), rev (mirroring) or error). --- @param: entry: String: The main content of the key. --- @param: sign: Int: The signed multiplier of the key (if any). --- @return: Key Instance: The new Key Instance. -function key_instance.new(type,entry,sign) - if types.replace[type] then - type = types.replace[type] - elseif not types[type] then - return key_instance.new("err", - "Key Instance internal error: Invalid type "..enquote(type)..".", - 500) - end - local tbl = {type = type, entry = entry} - if sign and sign ~= 0 then - if type == "err" then tbl.code = sign - else tbl.sign = sign end - end - return setmetatable(tbl, key_instance) -end - ---- Checks if Key Instance "entry" field is a table. --- @param: tbl: Key Instance: The Key Instance to check. --- @return: Bool: Returns true if Key Instance has a non 0 sign value. -function key_instance.entry_table(a) - if type(a.entry) == "table" then - return true - else return false end -end - ---- Checks if Key Instance has a signed multiplier. --- @param: tbl: Key Instance: The Key Instance to check. --- @return: Bool: Returns true if Key Instance has a non 0 sign value. -function key_instance.has_sign(a) - if not a.sign or a.sign == 0 then - return false - else return true end -end - ---- Checks if Key Instance is an error. --- @param: tbl: Key Instance: The Key Instance to check. --- @return: Bool: Returns true if Key Instance is an error. -function key_instance.is_error(a) - if a.type == "err" then return true - else return false end -end - -function key_instance.__tostring(a) - local ret = "{type = "..enquote(a.type)..", entry = " - if type(a.entry) == "table" and #a.entry <= 3 then - ret = ret.."{" - for _i,v in ipairs(a.entry) do - ret = ret..enquote(v)..", " - end - ret = ret:sub(1,-3).."}" - else ret = ret..enquote(a.entry) end - - if a:is_error() and a.code then ret = ret..", code = "..a.code.."}" - elseif a:has_sign() then ret = ret..", sign = "..a.sign.."}" - else ret = ret.."}" end - return ret -end - -return key_instance