comparison spec/util_array_spec.lua @ 11200:bf8f2da84007

Merge 0.11->trunk
author Kim Alvefur <zash@zash.se>
date Thu, 05 Nov 2020 22:31:25 +0100
parents 257dc26e8e65
children 3ae6fa901a8b
comparison
equal deleted inserted replaced
11199:6c7c50a4de32 11200:bf8f2da84007
1 local array = require "util.array";
2 describe("util.array", function ()
3 describe("creation", function ()
4 describe("from table", function ()
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 assert.falsy(a1 == { "a", "b" }, "Behavior of metatables changed in Lua 5.3");
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
151 end);
152
153 -- TODO The various array.foo(array ina, array outa) functions
154 end);
155