12 assert list == [10, 20, 30]
17 assert list.length == 3
27 assert str == "(1,10)(2,20)(3,30)"
30 list := [10, 20] ++ [30, 40]
31 assert list == [10, 20, 30, 40]
34 assert list == [10, 20, 30, 40, 50, 60]
40 assert list == [10, 20, 30]
41 assert copy == [10, 20]
44 assert [10*i for i in 5] == [10, 20, 30, 40, 50]
46 assert [i*10 for i in 5] == [10, 20, 30, 40, 50]
48 assert [i*10 for i in 5 if i mod 2 != 0] == [10, 30, 50]
50 assert [x for x in y if x > 1 for y in [3, 4, 5] if y < 5] == [2, 3, 2, 3, 4]
56 assert list[] == [10, 20, 30]
57 assert copy == [10, 20]
60 assert list[] == [999, 20, 30]
63 >> list := &[10, 20, 30]
64 reversed := list.reversed()
65 assert reversed == [30, 20, 10]
66 # Ensure the copy-on-write behavior triggers:
68 assert reversed == [30, 20, 10]
71 >> nums := @[10, -20, 30]
72 # Sorted function doesn't mutate original:
73 assert nums.sorted() == [-20, 10, 30]
74 assert nums[] == [10, -20, 30]
75 # Sort function does mutate in place:
77 assert nums[] == [-20, 10, 30]
78 # Custom sort functions:
79 >> nums.sort(func(x,y:&Int) x.abs() <> y.abs())
80 assert nums[] == [10, -20, 30]
81 >> nums.sort(func(x,y:&Int) y[] <> x[])
82 assert nums[] == [30, 10, -20]
84 >> ["A", "B", "C"].sample(10, [1.0, 0.5, 0.0])
87 >> heap := @[(i * 1337) mod 37 for i in 10]
92 heap_order.insert(heap.heap_pop() or stop)
93 assert heap_order[] == heap_order.sorted()
96 heap.heap_push((i*13337) mod 37)
99 heap_order.insert(heap.heap_pop() or stop)
100 assert heap_order[] == heap_order.sorted()
103 assert [i*10 for i in 5].from(3) == [30, 40, 50]
104 assert [i*10 for i in 5].to(3) == [10, 20, 30]
105 assert [i*10 for i in 5].to(-2) == [10, 20, 30, 40]
106 assert [i*10 for i in 5].from(-2) == [40, 50]
108 assert [i*10 for i in 5].by(2) == [10, 30, 50]
109 assert [i*10 for i in 5].by(-1) == [50, 40, 30, 20, 10]
111 assert [10, 20, 30, 40].by(2) == [10, 30]
112 assert [10, 20, 30, 40].by(-2) == [40, 20]
114 assert [i*10 for i in 10].by(2).by(2) == [10, 50, 90]
116 assert [i*10 for i in 10].by(2).by(-1) == [90, 70, 50, 30, 10]
118 # Test iterating over list.from() and list.to()
119 xs := ["A", "B", "C", "D"]
121 for y in xs.from(i+1)
125 >> nums := @[-7, -4, -1, 2, 5]
127 assert [nums.binary_search(i) for i in nums[]] == [1, 2, 3, 4, 5]
128 >> nums.sort(func(a,b:&Int) a.abs() <> b.abs())
129 assert [nums.binary_search(i, func(a,b:&Int) a.abs() <> b.abs()) for i in nums[]] == [1, 2, 3, 4, 5]
131 assert ["a", "b", "c"].find("b") == 2
132 assert ["a", "b", "c"].find("XXX") == none
134 assert [10, 20].where(func(i:&Int) i.is_prime()) == none
135 assert [4, 5, 6].where(func(i:&Int) i.is_prime()) == 2
138 >> nums := &[10, 20, 30, 40, 50]
139 assert nums.pop() == 50
140 assert nums[] == [10, 20, 30, 40]
141 assert nums.pop(2) == 20
142 assert nums[] == [10, 30, 40]
145 assert nums.pop() == none
147 assert [1,2,1,2,3].unique() == {1,2,3}