util.array: Add :slice() method + tests

Behaviour follows the same logic as string.sub (so yes, 1-indexed).
This commit is contained in:
Matthew Wild 2021-09-12 10:50:20 +01:00
parent eba0bacfda
commit edb6956ad5
2 changed files with 53 additions and 0 deletions

View file

@ -148,6 +148,25 @@ describe("util.array", function ()
end);
end);
describe("slice", function ()
it("works", function ()
local a = array({ "a", "b", "c" });
assert.equal(array.slice(a, 1, 2), array{ "a", "b" });
assert.equal(array.slice(a, 1, 3), array{ "a", "b", "c" });
assert.equal(array.slice(a, 2, 3), array{ "b", "c" });
assert.equal(array.slice(a, 2), array{ "b", "c" });
assert.equal(array.slice(a, -4), array{ "a", "b", "c" });
assert.equal(array.slice(a, -3), array{ "a", "b", "c" });
assert.equal(array.slice(a, -2), array{ "b", "c" });
assert.equal(array.slice(a, -1), array{ "c" });
end);
it("can mutate", function ()
local a = array({ "a", "b", "c" });
assert.equal(a:slice(-1), array{"c"});
assert.equal(a, array{"c"});
end);
end);
end);
-- TODO The various array.foo(array ina, array outa) functions