@@ -287,3 +287,117 @@ rats "array map then reduce chain"
287287 result = [1, 2, 3].map(fn(x) x * x end).reduce(0, fn(acc, x) acc + x end)
288288 test.assert_eq(result, 14)
289289end
290+
291+ # ============================================================
292+ # S. contains
293+ # ============================================================
294+
295+ rats "array.contains returns true when value is present"
296+ test.assert_true([1, 2, 3].contains(2))
297+ end
298+
299+ rats "array.contains returns false when value is absent"
300+ test.assert_false([1, 2, 3].contains(99))
301+ end
302+
303+ rats "array.contains works with strings"
304+ test.assert_true(["a", "b", "c"].contains("b"))
305+ test.assert_false(["a", "b", "c"].contains("z"))
306+ end
307+
308+ rats "array.contains on empty array returns false"
309+ test.assert_false([].contains(1))
310+ end
311+
312+ rats "array.contains uses deep equality"
313+ test.assert_true([[1, 2], [3, 4]].contains([3, 4]))
314+ test.assert_false([[1, 2], [3, 4]].contains([5, 6]))
315+ end
316+
317+ # ============================================================
318+ # T. index
319+ # ============================================================
320+
321+ rats "array.index returns index of first occurrence"
322+ test.assert_eq([10, 20, 30, 20].index(20), 1)
323+ end
324+
325+ rats "array.index returns -1 when not found"
326+ test.assert_eq([1, 2, 3].index(99), -1)
327+ end
328+
329+ rats "array.index on empty array returns -1"
330+ test.assert_eq([].index(1), -1)
331+ end
332+
333+ rats "array.index works with strings"
334+ test.assert_eq(["a", "b", "c"].index("c"), 2)
335+ end
336+
337+ rats "array.index uses deep equality"
338+ test.assert_eq([[1], [2], [3]].index([2]), 1)
339+ end
340+
341+ # ============================================================
342+ # U. reverse
343+ # ============================================================
344+
345+ rats "array.reverse returns new reversed array"
346+ result = [1, 2, 3].reverse()
347+ test.assert_eq(result[0], 3)
348+ test.assert_eq(result[1], 2)
349+ test.assert_eq(result[2], 1)
350+ end
351+
352+ rats "array.reverse on empty array returns empty"
353+ test.assert_eq(len([].reverse()), 0)
354+ end
355+
356+ rats "array.reverse does not mutate original"
357+ arr = [1, 2, 3]
358+ rev = arr.reverse()
359+ test.assert_eq(arr[0], 1)
360+ test.assert_eq(rev[0], 3)
361+ end
362+
363+ rats "array.reverse on single element"
364+ result = [42].reverse()
365+ test.assert_eq(len(result), 1)
366+ test.assert_eq(result[0], 42)
367+ end
368+
369+ # ============================================================
370+ # V. compact
371+ # ============================================================
372+
373+ rats "array.compact removes consecutive duplicates"
374+ result = [1, 1, 2, 2, 2, 3, 1, 1].compact()
375+ test.assert_eq(len(result), 4)
376+ test.assert_eq(result[0], 1)
377+ test.assert_eq(result[1], 2)
378+ test.assert_eq(result[2], 3)
379+ test.assert_eq(result[3], 1)
380+ end
381+
382+ rats "array.compact on empty array returns empty"
383+ test.assert_eq(len([].compact()), 0)
384+ end
385+
386+ rats "array.compact with no consecutive duplicates"
387+ result = [1, 2, 3].compact()
388+ test.assert_eq(len(result), 3)
389+ end
390+
391+ rats "array.compact on single element"
392+ result = [42].compact()
393+ test.assert_eq(len(result), 1)
394+ test.assert_eq(result[0], 42)
395+ end
396+
397+ rats "array.compact works with strings"
398+ result = ["a", "a", "b", "b", "a"].compact()
399+ test.assert_eq(len(result), 3)
400+ test.assert_eq(result[0], "a")
401+ test.assert_eq(result[1], "b")
402+ test.assert_eq(result[2], "a")
403+ end
0 commit comments