code / tomo

Lines41.3K C23.7K Markdown9.7K YAML5.0K Tomo2.3K
7 others 763
Python231 Shell230 make212 INI47 Text21 SVG16 Lua6
(147 lines)
1 func main()
2 do
3 nums : [Num32] = []
4 assert nums == []
6 do
7 nums : [Num32]
8 assert nums == []
10 do
11 list := [10, 20, 30]
12 assert list == [10, 20, 30]
14 assert list[1] == 10
15 assert list[-1] == 30
17 assert list.length == 3
19 sum := 0
20 for x in list
21 sum += x
22 assert sum == 60
24 str := ""
25 for i,x in list
26 str ++= "($i,$x)"
27 assert str == "(1,10)(2,20)(3,30)"
29 do
30 list := [10, 20] ++ [30, 40]
31 assert list == [10, 20, 30, 40]
33 >> list ++= [50, 60]
34 assert list == [10, 20, 30, 40, 50, 60]
36 do
37 >> list := [10, 20]
38 >> copy := list
39 >> list ++= [30]
40 assert list == [10, 20, 30]
41 assert copy == [10, 20]
43 do
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]
52 do
53 >> list := @[10, 20]
54 >> copy := list[]
55 >> list.insert(30)
56 assert list[] == [10, 20, 30]
57 assert copy == [10, 20]
59 >> list[1] = 999
60 assert list[] == [999, 20, 30]
62 do
63 >> list := &[10, 20, 30]
64 reversed := list.reversed()
65 assert reversed == [30, 20, 10]
66 # Ensure the copy-on-write behavior triggers:
67 >> list[1] = 999
68 assert reversed == [30, 20, 10]
70 do
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:
76 >> nums.sort()
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])
86 do
87 >> heap := @[(i * 1337) mod 37 for i in 10]
88 >> heap.heapify()
89 >> heap
90 heap_order : @[Int]
91 repeat
92 heap_order.insert(heap.heap_pop() or stop)
93 assert heap_order[] == heap_order.sorted()
94 heap_order[] = []
95 for i in 10
96 heap.heap_push((i*13337) mod 37)
97 >> heap
98 repeat
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"]
120 for i,x in xs.to(-2)
121 for y in xs.from(i+1)
122 say("$(x)$(y)")
125 >> nums := @[-7, -4, -1, 2, 5]
126 >> nums.sort()
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]
143 >> nums.clear()
144 assert nums[] == []
145 assert nums.pop() == none
147 assert [1,2,1,2,3].unique() == {1,2,3}