Software /
code /
prosody
Annotate
spec/util_array_spec.lua @ 12251:21ed12cfe300
util.pluginloader: Support for a per-file load filter
Load filters can choose to block the loading of certain files, and optionally
return some metadata about the loaded file.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 03 Feb 2022 12:56:52 +0000 |
parent | 11787:3ae6fa901a8b |
child | 13245:ffe4adbd2af9 |
rev | line source |
---|---|
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); | |
10590
257dc26e8e65
util.array: Add a test case for a behavior change in Lua 5.3
Kim Alvefur <zash@zash.se>
parents:
10397
diff
changeset
|
46 assert.falsy(a1 == { "a", "b" }, "Behavior of metatables changed in Lua 5.3"); |
10100 | 47 end); |
48 end); | |
49 | |
50 describe("division", function () | |
51 it("works", function () | |
52 local a = array({ "a", "b", "c" }); | |
53 local b = a / function (i) if i ~= "b" then return i .. "x" end end; | |
54 assert.same({ "ax", "cx" }, b); | |
55 end); | |
56 end); | |
57 | |
58 end); | |
59 end); | |
60 | |
61 describe("methods", function () | |
62 describe("map", function () | |
63 it("works", function () | |
64 local a = array({ "a", "b", "c" }); | |
65 local b = a:map(string.upper); | |
66 assert.same({ "A", "B", "C" }, b); | |
67 end); | |
68 end); | |
69 | |
70 describe("filter", function () | |
71 it("works", function () | |
72 local a = array({ "a", "b", "c" }); | |
73 a:filter(function (i) return i ~= "b" end); | |
74 assert.same({ "a", "c" }, a); | |
75 end); | |
76 end); | |
77 | |
78 describe("sort", function () | |
79 it("works", function () | |
80 local a = array({ 5, 4, 3, 1, 2, }); | |
81 a:sort(); | |
82 assert.same({ 1, 2, 3, 4, 5, }, a); | |
83 end); | |
84 end); | |
85 | |
86 describe("unique", function () | |
87 it("works", function () | |
88 local a = array({ "a", "b", "c", "c", "a", "b" }); | |
89 a:unique(); | |
90 assert.same({ "a", "b", "c" }, a); | |
91 end); | |
92 end); | |
93 | |
94 describe("pluck", function () | |
95 it("works", function () | |
96 local a = array({ { a = 1, b = -1 }, { a = 2, b = -2 }, }); | |
97 a:pluck("a"); | |
98 assert.same({ 1, 2 }, a); | |
99 end); | |
100 end); | |
101 | |
102 | |
103 describe("reverse", function () | |
104 it("works", function () | |
105 local a = array({ "a", "b", "c" }); | |
106 a:reverse(); | |
107 assert.same({ "c", "b", "a" }, a); | |
108 end); | |
109 end); | |
110 | |
111 -- TODO :shuffle | |
112 | |
113 describe("append", function () | |
114 it("works", function () | |
115 local a = array({ "a", "b", "c" }); | |
116 a:append(array({ "d", "e", })); | |
117 assert.same({ "a", "b", "c", "d", "e" }, a); | |
118 end); | |
119 end); | |
120 | |
121 describe("push", function () | |
122 it("works", function () | |
123 local a = array({ "a", "b", "c" }); | |
124 a:push("d"):push("e"); | |
125 assert.same({ "a", "b", "c", "d", "e" }, a); | |
126 end); | |
127 end); | |
128 | |
129 describe("pop", function () | |
130 it("works", function () | |
131 local a = array({ "a", "b", "c" }); | |
132 assert.equal("c", a:pop()); | |
133 assert.same({ "a", "b", }, a); | |
134 end); | |
135 end); | |
136 | |
137 describe("concat", function () | |
138 it("works", function () | |
139 local a = array({ "a", "b", "c" }); | |
140 assert.equal("a,b,c", a:concat(",")); | |
141 end); | |
142 end); | |
143 | |
144 describe("length", function () | |
145 it("works", function () | |
146 local a = array({ "a", "b", "c" }); | |
147 assert.equal(3, a:length()); | |
148 end); | |
149 end); | |
150 | |
11787
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
151 describe("slice", function () |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
152 it("works", function () |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
153 local a = array({ "a", "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
154 assert.equal(array.slice(a, 1, 2), array{ "a", "b" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
155 assert.equal(array.slice(a, 1, 3), array{ "a", "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
156 assert.equal(array.slice(a, 2, 3), array{ "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
157 assert.equal(array.slice(a, 2), array{ "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
158 assert.equal(array.slice(a, -4), array{ "a", "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
159 assert.equal(array.slice(a, -3), array{ "a", "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
160 assert.equal(array.slice(a, -2), array{ "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
161 assert.equal(array.slice(a, -1), array{ "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
162 end); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
163 |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
164 it("can mutate", function () |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
165 local a = array({ "a", "b", "c" }); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
166 assert.equal(a:slice(-1), array{"c"}); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
167 assert.equal(a, array{"c"}); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
168 end); |
3ae6fa901a8b
util.array: Add :slice() method + tests
Matthew Wild <mwild1@gmail.com>
parents:
10590
diff
changeset
|
169 end); |
10100 | 170 end); |
171 | |
172 -- TODO The various array.foo(array ina, array outa) functions | |
173 end); | |
174 |