aboutsummaryrefslogtreecommitdiff
path: root/spec/outputs/test/table_comprehension_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'spec/outputs/test/table_comprehension_spec.lua')
-rw-r--r--spec/outputs/test/table_comprehension_spec.lua297
1 files changed, 297 insertions, 0 deletions
diff --git a/spec/outputs/test/table_comprehension_spec.lua b/spec/outputs/test/table_comprehension_spec.lua
new file mode 100644
index 0000000..90fa647
--- /dev/null
+++ b/spec/outputs/test/table_comprehension_spec.lua
@@ -0,0 +1,297 @@
1return describe("table comprehension", function()
2 it("should create simple table copy", function()
3 local thing = {
4 color = "red",
5 name = "fast",
6 width = 123
7 }
8 local thing_copy
9 do
10 local _tbl_0 = { }
11 for k, v in pairs(thing) do
12 _tbl_0[k] = v
13 end
14 thing_copy = _tbl_0
15 end
16 assert.same(thing_copy.color, thing.color)
17 assert.same(thing_copy.name, thing.name)
18 return assert.same(thing_copy.width, thing.width)
19 end)
20 it("should filter with when clause", function()
21 local thing = {
22 color = "red",
23 name = "fast",
24 width = 123
25 }
26 local no_color
27 do
28 local _tbl_0 = { }
29 for k, v in pairs(thing) do
30 if k ~= "color" then
31 _tbl_0[k] = v
32 end
33 end
34 no_color = _tbl_0
35 end
36 assert.same(no_color.color, nil)
37 assert.same(no_color.name, "fast")
38 return assert.same(no_color.width, 123)
39 end)
40 it("should transform values", function()
41 local numbers = {
42 a = 1,
43 b = 2,
44 c = 3
45 }
46 local doubled
47 do
48 local _tbl_0 = { }
49 for k, v in pairs(numbers) do
50 _tbl_0[k] = v * 2
51 end
52 doubled = _tbl_0
53 end
54 assert.same(doubled.a, 2)
55 assert.same(doubled.b, 4)
56 return assert.same(doubled.c, 6)
57 end)
58 it("should transform keys", function()
59 local data = {
60 a = 1,
61 b = 2
62 }
63 local upper_keys
64 do
65 local _tbl_0 = { }
66 for k, v in pairs(data) do
67 _tbl_0[k:upper()] = v
68 end
69 upper_keys = _tbl_0
70 end
71 assert.same(upper_keys.A, 1)
72 return assert.same(upper_keys.B, 2)
73 end)
74 it("should work with ipairs", function()
75 local items = {
76 "a",
77 "b",
78 "c"
79 }
80 local reversed
81 do
82 local _tbl_0 = { }
83 for i, v in ipairs(items) do
84 _tbl_0[i] = v
85 end
86 reversed = _tbl_0
87 end
88 assert.same(reversed[1], "a")
89 assert.same(reversed[2], "b")
90 return assert.same(reversed[3], "c")
91 end)
92 it("should filter array items", function()
93 local items = {
94 1,
95 2,
96 3,
97 4,
98 5
99 }
100 local evens
101 do
102 local _tbl_0 = { }
103 for i, v in ipairs(items) do
104 if v % 2 == 0 then
105 _tbl_0[i] = v
106 end
107 end
108 evens = _tbl_0
109 end
110 assert.same(evens[2], 2)
111 assert.same(evens[4], 4)
112 return assert.same(evens[1], nil)
113 end)
114 it("should work with numeric for loop", function()
115 local squares
116 do
117 local _tbl_0 = { }
118 for i = 1, 5 do
119 _tbl_0[i] = i * i
120 end
121 squares = _tbl_0
122 end
123 assert.same(squares[1], 1)
124 assert.same(squares[2], 4)
125 assert.same(squares[3], 9)
126 assert.same(squares[4], 16)
127 return assert.same(squares[5], 25)
128 end)
129 it("should support nested comprehensions", function()
130 local matrix = {
131 {
132 1,
133 2
134 },
135 {
136 3,
137 4
138 },
139 {
140 5,
141 6
142 }
143 }
144 local flat = { }
145 for _index_0 = 1, #matrix do
146 local row = matrix[_index_0]
147 for i, v in ipairs(row) do
148 flat[#flat + 1] = v
149 end
150 end
151 return assert.same(flat, {
152 1,
153 2,
154 3,
155 4,
156 5,
157 6
158 })
159 end)
160 it("should combine pairs and when", function()
161 local data = {
162 a = 1,
163 b = 2,
164 c = 3,
165 d = 4
166 }
167 local greater_than_two
168 do
169 local _tbl_0 = { }
170 for k, v in pairs(data) do
171 if v > 2 then
172 _tbl_0[k] = v
173 end
174 end
175 greater_than_two = _tbl_0
176 end
177 assert.same(greater_than_two.a, nil)
178 assert.same(greater_than_two.b, nil)
179 assert.same(greater_than_two.c, 3)
180 return assert.same(greater_than_two.d, 4)
181 end)
182 it("should work with string keys", function()
183 local obj = {
184 ["key-with-dash"] = "value1",
185 ["key_with_underscore"] = "value2"
186 }
187 local result
188 do
189 local _tbl_0 = { }
190 for k, v in pairs(obj) do
191 _tbl_0[k] = v
192 end
193 result = _tbl_0
194 end
195 assert.same(result["key-with-dash"], "value1")
196 return assert.same(result["key_with_underscore"], "value2")
197 end)
198 it("should handle empty source", function()
199 local empty = { }
200 local result
201 do
202 local _tbl_0 = { }
203 for k, v in pairs(empty) do
204 _tbl_0[k] = v
205 end
206 result = _tbl_0
207 end
208 return assert.same(#result, 0)
209 end)
210 it("should work with computed keys", function()
211 local base = {
212 a = 1,
213 b = 2
214 }
215 local result
216 do
217 local _tbl_0 = { }
218 for k, v in pairs(base) do
219 _tbl_0[k .. "_suffix"] = v * 10
220 end
221 result = _tbl_0
222 end
223 assert.same(result.a_suffix, 10)
224 return assert.same(result.b_suffix, 20)
225 end)
226 it("should support nested table transformation", function()
227 local data = {
228 first = {
229 x = 1,
230 y = 2
231 },
232 second = {
233 x = 3,
234 y = 4
235 }
236 }
237 local transformed
238 do
239 local _tbl_0 = { }
240 for k, v in pairs(data) do
241 _tbl_0[k] = v.x + v.y
242 end
243 transformed = _tbl_0
244 end
245 assert.same(transformed.first, 3)
246 return assert.same(transformed.second, 7)
247 end)
248 it("should filter with multiple conditions", function()
249 local numbers = {
250 a = 1,
251 b = 2,
252 c = 3,
253 d = 4,
254 e = 5
255 }
256 local result
257 do
258 local _tbl_0 = { }
259 for k, v in pairs(numbers) do
260 if v > 1 and v < 5 then
261 _tbl_0[k] = v
262 end
263 end
264 result = _tbl_0
265 end
266 assert.same(result.a, nil)
267 assert.same(result.b, 2)
268 assert.same(result.c, 3)
269 assert.same(result.d, 4)
270 return assert.same(result.e, nil)
271 end)
272 return it("should work with custom iterator", function()
273 local custom_iter
274 custom_iter = function()
275 local state = 0
276 return function()
277 state = state + 1
278 if state <= 3 then
279 return state, state * 10
280 else
281 return nil
282 end
283 end
284 end
285 local result
286 do
287 local _tbl_0 = { }
288 for k, v in custom_iter() do
289 _tbl_0[k] = v
290 end
291 result = _tbl_0
292 end
293 assert.same(result[1], 10)
294 assert.same(result[2], 20)
295 return assert.same(result[3], 30)
296 end)
297end)