10100
+ − 1 local array = require "util.array";
+ − 2 describe("util.array", function ()
+ − 3 describe("creation", function ()
10397
+ − 4 describe("from table", function ()
10100
+ − 5 it("works", function ()
+ − 6 local a = array({"a", "b", "c"});
+ − 7 assert.same({"a", "b", "c"}, a);
+ − 8 end);
+ − 9 end);
+ − 10
+ − 11 describe("from iterator", function ()
+ − 12 it("works", function ()
+ − 13 -- collects the first value, ie the keys
+ − 14 local a = array(ipairs({true, true, true}));
+ − 15 assert.same({1, 2, 3}, a);
+ − 16 end);
+ − 17 end);
+ − 18
+ − 19 describe("collect", function ()
+ − 20 it("works", function ()
+ − 21 -- collects the first value, ie the keys
+ − 22 local a = array.collect(ipairs({true, true, true}));
+ − 23 assert.same({1, 2, 3}, a);
+ − 24 end);
+ − 25 end);
+ − 26
+ − 27 end);
+ − 28
+ − 29 describe("metatable", function ()
+ − 30 describe("operator", function ()
+ − 31 describe("addition", function ()
+ − 32 it("works", function ()
+ − 33 local a = array({ "a", "b" });
+ − 34 local b = array({ "c", "d" });
+ − 35 assert.same({"a", "b", "c", "d"}, a + b);
+ − 36 end);
+ − 37 end);
+ − 38
+ − 39 describe("equality", function ()
+ − 40 it("works", function ()
+ − 41 local a1 = array({ "a", "b" });
+ − 42 local a2 = array({ "a", "b" });
+ − 43 local b = array({ "c", "d" });
+ − 44 assert.truthy(a1 == a2);
+ − 45 assert.falsy(a1 == b);
+ − 46 end);
+ − 47 end);
+ − 48
+ − 49 describe("division", function ()
+ − 50 it("works", function ()
+ − 51 local a = array({ "a", "b", "c" });
+ − 52 local b = a / function (i) if i ~= "b" then return i .. "x" end end;
+ − 53 assert.same({ "ax", "cx" }, b);
+ − 54 end);
+ − 55 end);
+ − 56
+ − 57 end);
+ − 58 end);
+ − 59
+ − 60 describe("methods", function ()
+ − 61 describe("map", function ()
+ − 62 it("works", function ()
+ − 63 local a = array({ "a", "b", "c" });
+ − 64 local b = a:map(string.upper);
+ − 65 assert.same({ "A", "B", "C" }, b);
+ − 66 end);
+ − 67 end);
+ − 68
+ − 69 describe("filter", function ()
+ − 70 it("works", function ()
+ − 71 local a = array({ "a", "b", "c" });
+ − 72 a:filter(function (i) return i ~= "b" end);
+ − 73 assert.same({ "a", "c" }, a);
+ − 74 end);
+ − 75 end);
+ − 76
+ − 77 describe("sort", function ()
+ − 78 it("works", function ()
+ − 79 local a = array({ 5, 4, 3, 1, 2, });
+ − 80 a:sort();
+ − 81 assert.same({ 1, 2, 3, 4, 5, }, a);
+ − 82 end);
+ − 83 end);
+ − 84
+ − 85 describe("unique", function ()
+ − 86 it("works", function ()
+ − 87 local a = array({ "a", "b", "c", "c", "a", "b" });
+ − 88 a:unique();
+ − 89 assert.same({ "a", "b", "c" }, a);
+ − 90 end);
+ − 91 end);
+ − 92
+ − 93 describe("pluck", function ()
+ − 94 it("works", function ()
+ − 95 local a = array({ { a = 1, b = -1 }, { a = 2, b = -2 }, });
+ − 96 a:pluck("a");
+ − 97 assert.same({ 1, 2 }, a);
+ − 98 end);
+ − 99 end);
+ − 100
+ − 101
+ − 102 describe("reverse", function ()
+ − 103 it("works", function ()
+ − 104 local a = array({ "a", "b", "c" });
+ − 105 a:reverse();
+ − 106 assert.same({ "c", "b", "a" }, a);
+ − 107 end);
+ − 108 end);
+ − 109
+ − 110 -- TODO :shuffle
+ − 111
+ − 112 describe("append", function ()
+ − 113 it("works", function ()
+ − 114 local a = array({ "a", "b", "c" });
+ − 115 a:append(array({ "d", "e", }));
+ − 116 assert.same({ "a", "b", "c", "d", "e" }, a);
+ − 117 end);
+ − 118 end);
+ − 119
+ − 120 describe("push", function ()
+ − 121 it("works", function ()
+ − 122 local a = array({ "a", "b", "c" });
+ − 123 a:push("d"):push("e");
+ − 124 assert.same({ "a", "b", "c", "d", "e" }, a);
+ − 125 end);
+ − 126 end);
+ − 127
+ − 128 describe("pop", function ()
+ − 129 it("works", function ()
+ − 130 local a = array({ "a", "b", "c" });
+ − 131 assert.equal("c", a:pop());
+ − 132 assert.same({ "a", "b", }, a);
+ − 133 end);
+ − 134 end);
+ − 135
+ − 136 describe("concat", function ()
+ − 137 it("works", function ()
+ − 138 local a = array({ "a", "b", "c" });
+ − 139 assert.equal("a,b,c", a:concat(","));
+ − 140 end);
+ − 141 end);
+ − 142
+ − 143 describe("length", function ()
+ − 144 it("works", function ()
+ − 145 local a = array({ "a", "b", "c" });
+ − 146 assert.equal(3, a:length());
+ − 147 end);
+ − 148 end);
+ − 149
+ − 150 end);
+ − 151
+ − 152 -- TODO The various array.foo(array ina, array outa) functions
+ − 153 end);
+ − 154