diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-04-06 22:45:31 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-04-06 22:45:31 -0400 |
| commit | 4a3db447ce820617a72bdd9fc6217c84c3799bea (patch) | |
| tree | ab40da6b721344849fe34088d54774270fe2f710 /test/lists.tm | |
| parent | 44cd26f2cebd760a53aa4ff1b7779e718a101650 (diff) | |
Rename file
Diffstat (limited to 'test/lists.tm')
| -rw-r--r-- | test/lists.tm | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/test/lists.tm b/test/lists.tm new file mode 100644 index 00000000..71e107ef --- /dev/null +++ b/test/lists.tm @@ -0,0 +1,190 @@ +func main() + do + >> nums : [Num32] = [] + = [] + + do + >> nums : [Num32] + = [] + + do + >> list := [10, 20, 30] + = [10, 20, 30] + + >> list[1] + = 10 + >> list[-1] + = 30 + + >> list.length + = 3 + + sum := 0 + for x in list + sum += x + >> sum + = 60 + + str := "" + for i,x in list + str ++= "($i,$x)" + >> str + = "(1,10)(2,20)(3,30)" + + do + >> list := [10, 20] ++ [30, 40] + = [10, 20, 30, 40] + + >> list ++= [50, 60] + >> list + = [10, 20, 30, 40, 50, 60] + + do + >> list := [10, 20] + >> copy := list + >> list ++= [30] + >> list + = [10, 20, 30] + >> copy + = [10, 20] + + do + >> [10*i for i in 5] + = [10, 20, 30, 40, 50] + + >> [i*10 for i in 5] + = [10, 20, 30, 40, 50] + + >> [i*10 for i in 5 if i mod 2 != 0] + = [10, 30, 50] + + >> [x for x in y if x > 1 for y in [3, 4, 5] if y < 5] + = [2, 3, 2, 3, 4] + + do + >> list := @[10, 20] + >> copy := list[] + >> list.insert(30) + >> list + = @[10, 20, 30] + >> copy + = [10, 20] + + >> list[1] = 999 + >> list + = @[999, 20, 30] + + do + >> list := &[10, 20, 30] + >> reversed := list.reversed() + = [30, 20, 10] + # Ensure the copy-on-write behavior triggers: + >> list[1] = 999 + >> reversed + = [30, 20, 10] + + do + >> nums := @[10, -20, 30] + # Sorted function doesn't mutate original: + >> nums.sorted() + = [-20, 10, 30] + >> nums + = @[10, -20, 30] + # Sort function does mutate in place: + >> nums.sort() + >> nums + = @[-20, 10, 30] + # Custom sort functions: + >> nums.sort(func(x,y:&Int) x.abs() <> y.abs()) + >> nums + = @[10, -20, 30] + >> nums.sort(func(x,y:&Int) y[] <> x[]) + >> nums + = @[30, 10, -20] + + >> ["A", "B", "C"].sample(10, [1.0, 0.5, 0.0]) + + do + >> heap := @[(i * 1337) mod 37 for i in 10] + >> heap.heapify() + >> heap + heap_order : @[Int] + repeat + heap_order.insert(heap.heap_pop() or stop) + >> heap_order[] == heap_order.sorted() + = yes + heap_order[] = [] + for i in 10 + heap.heap_push((i*13337) mod 37) + >> heap + repeat + heap_order.insert(heap.heap_pop() or stop) + >> heap_order[] == heap_order.sorted() + = yes + + do + >> [i*10 for i in 5].from(3) + = [30, 40, 50] + >> [i*10 for i in 5].to(3) + = [10, 20, 30] + >> [i*10 for i in 5].to(-2) + = [10, 20, 30, 40] + >> [i*10 for i in 5].from(-2) + = [40, 50] + + >> [i*10 for i in 5].by(2) + = [10, 30, 50] + >> [i*10 for i in 5].by(-1) + = [50, 40, 30, 20, 10] + + >> [10, 20, 30, 40].by(2) + = [10, 30] + >> [10, 20, 30, 40].by(-2) + = [40, 20] + + >> [i*10 for i in 10].by(2).by(2) + = [10, 50, 90] + + >> [i*10 for i in 10].by(2).by(-1) + = [90, 70, 50, 30, 10] + + # Test iterating over list.from() and list.to() + xs := ["A", "B", "C", "D"] + for i,x in xs.to(-2) + for y in xs.from(i+1) + say("$(x)$(y)") + + do + >> nums := @[-7, -4, -1, 2, 5] + >> nums.sort() + >> [nums.binary_search(i) for i in nums[]] + = [1, 2, 3, 4, 5] + >> nums.sort(func(a,b:&Int) a.abs() <> b.abs()) + >> [nums.binary_search(i, func(a,b:&Int) a.abs() <> b.abs()) for i in nums[]] + = [1, 2, 3, 4, 5] + + >> ["a", "b", "c"].find("b") + = 2? + >> ["a", "b", "c"].find("XXX") + = none + + >> [10, 20].first(func(i:&Int) i.is_prime()) + = none + >> [4, 5, 6].first(func(i:&Int) i.is_prime()) + = 2? + + do + >> nums := &[10, 20, 30, 40, 50] + >> nums.pop() + = 50? + >> nums + = &[10, 20, 30, 40] + >> nums.pop(2) + = 20? + >> nums + = &[10, 30, 40] + >> nums.clear() + >> nums + = &[] + >> nums.pop() + = none |
