aboutsummaryrefslogtreecommitdiff
path: root/spec/outputs/test/slicing_spec.lua
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2026-01-28 18:43:14 +0800
committerLi Jin <dragon-fly@qq.com>2026-01-28 18:43:14 +0800
commitdd64edd58fe25ec74ae5958128cf3f74b0692f3b (patch)
tree0f2de1df55897e2713977c5a53936757e14b477a /spec/outputs/test/slicing_spec.lua
parent7c2a92b82e9808d3c5ea29b47d1c59d663fe984a (diff)
downloadyuescript-dd64edd58fe25ec74ae5958128cf3f74b0692f3b.tar.gz
yuescript-dd64edd58fe25ec74ae5958128cf3f74b0692f3b.tar.bz2
yuescript-dd64edd58fe25ec74ae5958128cf3f74b0692f3b.zip
Fixed compiler issues and added 800+ test cases.
Diffstat (limited to 'spec/outputs/test/slicing_spec.lua')
-rw-r--r--spec/outputs/test/slicing_spec.lua324
1 files changed, 324 insertions, 0 deletions
diff --git a/spec/outputs/test/slicing_spec.lua b/spec/outputs/test/slicing_spec.lua
new file mode 100644
index 0000000..1db2938
--- /dev/null
+++ b/spec/outputs/test/slicing_spec.lua
@@ -0,0 +1,324 @@
1return describe("slicing", function()
2 it("should slice array with basic syntax", function()
3 local items = {
4 1,
5 2,
6 3,
7 4,
8 5
9 }
10 local result
11 do
12 local _accum_0 = { }
13 local _len_0 = 1
14 for _index_0 = 1, 3 do
15 local _item_0 = items[_index_0]
16 _accum_0[_len_0] = _item_0
17 _len_0 = _len_0 + 1
18 end
19 result = _accum_0
20 end
21 return assert.same(result, {
22 1,
23 2,
24 3
25 })
26 end)
27 it("should slice from beginning", function()
28 local items = {
29 1,
30 2,
31 3,
32 4,
33 5
34 }
35 local result
36 do
37 local _accum_0 = { }
38 local _len_0 = 1
39 local _max_0 = #items
40 _max_0 = _max_0 < 0 and #items + _max_0 + 1 or _max_0
41 for _index_0 = 1, _max_0 do
42 local _item_0 = items[_index_0]
43 _accum_0[_len_0] = _item_0
44 _len_0 = _len_0 + 1
45 end
46 result = _accum_0
47 end
48 return assert.same(result, {
49 1,
50 2,
51 3,
52 4,
53 5
54 })
55 end)
56 it("should slice to end", function()
57 local items = {
58 1,
59 2,
60 3,
61 4,
62 5
63 }
64 local result
65 do
66 local _accum_0 = { }
67 local _len_0 = 1
68 for _index_0 = 3, 5 do
69 local _item_0 = items[_index_0]
70 _accum_0[_len_0] = _item_0
71 _len_0 = _len_0 + 1
72 end
73 result = _accum_0
74 end
75 return assert.same(result, {
76 3,
77 4,
78 5
79 })
80 end)
81 it("should handle negative indices", function()
82 local items = {
83 1,
84 2,
85 3,
86 4,
87 5
88 }
89 local result
90 do
91 local _accum_0 = { }
92 local _len_0 = 1
93 local _min_0 = #items + -3 + 1
94 local _max_0 = #items + -1 + 1
95 for _index_0 = _min_0, _max_0 do
96 local _item_0 = items[_index_0]
97 _accum_0[_len_0] = _item_0
98 _len_0 = _len_0 + 1
99 end
100 result = _accum_0
101 end
102 return assert.same(result, {
103 3,
104 4,
105 5
106 })
107 end)
108 it("should slice single element", function()
109 local items = {
110 1,
111 2,
112 3,
113 4,
114 5
115 }
116 local result
117 do
118 local _accum_0 = { }
119 local _len_0 = 1
120 for _index_0 = 2, 2 do
121 local _item_0 = items[_index_0]
122 _accum_0[_len_0] = _item_0
123 _len_0 = _len_0 + 1
124 end
125 result = _accum_0
126 end
127 return assert.same(result, {
128 2
129 })
130 end)
131 it("should work with strings", function()
132 local s = "hello"
133 local result = s:sub(1, 3)
134 return assert.same(result, "hel")
135 end)
136 it("should handle out of bounds", function()
137 local items = {
138 1,
139 2,
140 3
141 }
142 local result
143 do
144 local _accum_0 = { }
145 local _len_0 = 1
146 for _index_0 = 1, 10 do
147 local _item_0 = items[_index_0]
148 _accum_0[_len_0] = _item_0
149 _len_0 = _len_0 + 1
150 end
151 result = _accum_0
152 end
153 return assert.same(result, {
154 1,
155 2,
156 3
157 })
158 end)
159 it("should create new table", function()
160 local original = {
161 1,
162 2,
163 3,
164 4,
165 5
166 }
167 local sliced
168 do
169 local _accum_0 = { }
170 local _len_0 = 1
171 for _index_0 = 2, 4 do
172 local _item_0 = original[_index_0]
173 _accum_0[_len_0] = _item_0
174 _len_0 = _len_0 + 1
175 end
176 sliced = _accum_0
177 end
178 sliced[1] = 99
179 return assert.same(original[2], 2)
180 end)
181 it("should work with nested arrays", function()
182 local nested = {
183 {
184 1,
185 2
186 },
187 {
188 3,
189 4
190 },
191 {
192 5,
193 6
194 }
195 }
196 local result
197 do
198 local _accum_0 = { }
199 local _len_0 = 1
200 for _index_0 = 1, 2 do
201 local _item_0 = nested[_index_0]
202 _accum_0[_len_0] = _item_0
203 _len_0 = _len_0 + 1
204 end
205 result = _accum_0
206 end
207 return assert.same(result, {
208 {
209 1,
210 2
211 },
212 {
213 3,
214 4
215 }
216 })
217 end)
218 it("should slice with step simulation", function()
219 local items = {
220 1,
221 2,
222 3,
223 4,
224 5
225 }
226 local result
227 do
228 local _accum_0 = { }
229 local _len_0 = 1
230 for i = 1, #items, 2 do
231 _accum_0[_len_0] = items[i]
232 _len_0 = _len_0 + 1
233 end
234 result = _accum_0
235 end
236 return assert.same(result, {
237 1,
238 3,
239 5
240 })
241 end)
242 it("should handle empty slice range", function()
243 local items = {
244 1,
245 2,
246 3,
247 4,
248 5
249 }
250 local result
251 do
252 local _accum_0 = { }
253 local _len_0 = 1
254 for _index_0 = 6, 10 do
255 local _item_0 = items[_index_0]
256 _accum_0[_len_0] = _item_0
257 _len_0 = _len_0 + 1
258 end
259 result = _accum_0
260 end
261 return assert.same(result, { })
262 end)
263 it("should work with reverse indexing", function()
264 local items = {
265 1,
266 2,
267 3,
268 4,
269 5
270 }
271 local last = items[#items]
272 local second_last = items[#items - 1]
273 assert.same(last, 5)
274 return assert.same(second_last, 4)
275 end)
276 it("should support slice in assignment", function()
277 local items = {
278 1,
279 2,
280 3,
281 4,
282 5
283 }
284 local a, b, c
285 do
286 local _accum_0 = { }
287 local _len_0 = 1
288 local _list_0 = {
289 1,
290 2,
291 3
292 }
293 for _index_0 = 1, #_list_0 do
294 local i = _list_0[_index_0]
295 _accum_0[_len_0] = items[i]
296 _len_0 = _len_0 + 1
297 end
298 a, b, c = _accum_0[1], _accum_0[2], _accum_0[3]
299 end
300 assert.same(a, 1)
301 assert.same(b, 2)
302 return assert.same(c, 3)
303 end)
304 return it("should work with table comprehensions", function()
305 local items = {
306 1,
307 2,
308 3,
309 4,
310 5
311 }
312 local result
313 do
314 local _tbl_0 = { }
315 for i = 2, 4 do
316 _tbl_0[i] = items[i]
317 end
318 result = _tbl_0
319 end
320 assert.same(result[2], 2)
321 assert.same(result[3], 3)
322 return assert.same(result[4], 4)
323 end)
324end)