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
|