1 # oil-builtin-funcs.test.sh
2
3 # TODO: Test that there are exceptions when there are too many args, etc.
4
5 #### Bool()
6 var a = Bool( %() )
7 var b = Bool( %(foo) )
8 write $a $b
9 ## STDOUT:
10 False
11 True
12 ## END
13
14 #### Int()
15 var a = Int("3")
16 var b = Int("-35")
17 write $a $b
18 ## STDOUT:
19 3
20 -35
21 ## END
22
23 #### Float()
24 # TODO: This needs a lot more testing, for precision, etc.
25 var a = Float("1.2")
26 var b = Float("3.4")
27 write $a $b
28 ## STDOUT:
29 1.2
30 3.4
31 ## END
32
33 #### Str()
34 # TODO: more testing
35 var a = Str(5)
36 var b = Str(42)
37 write $a $b
38 ## STDOUT:
39 5
40 42
41 ## END
42
43 #### Tuple()
44 # TODO: more testing
45 var a = Tuple()
46 write $a
47 ## STDOUT:
48 ()
49 ## END
50
51 #### List()
52 # TODO: more testing
53 var a = List(range(3))
54 write $a
55 ## STDOUT:
56 [0, 1, 2]
57 ## END
58
59 #### Dict()
60 # TODO: more testing
61 var a = Dict()
62 write $len(a)
63 ## STDOUT:
64 0
65 ## END
66
67 #### join()
68 var x = %(a b 'c d')
69
70 var y = join(x)
71 argv.py $y
72
73 var z = join(x, ":")
74 argv.py $z
75 ## STDOUT:
76 ['abc d']
77 ['a:b:c d']
78 ## END
79
80 #### abs
81
82 # Also test smooshing
83 write $abs(-5)$abs(-0)$abs(5)
84 write $abs(-5) $abs(-0) $abs(5)
85 ## STDOUT:
86 505
87 5
88 0
89 5
90 ## END
91
92 #### any() and all()
93 var a1 = all( %(yes yes) )
94 var a2 = all( %(yes '') )
95 var a3 = all( %('' '') )
96 # This should be true and false or what?
97 write $a1 $a2 $a3
98 write __
99
100 var x1 = any( %(yes yes) )
101 var x2 = any( %(yes '') )
102 var x3 = any( %('' '') )
103 write $x1 $x2 $x3
104
105 ## STDOUT:
106 True
107 False
108 False
109 __
110 True
111 True
112 False
113 ## END
114
115 #### sum()
116 var start = 42
117
118 write $sum( range(3) )
119 write $sum( range(3), start)
120 write $sum( range(0), start)
121 ## STDOUT:
122 3
123 45
124 42
125 ## END
126
127 #### sorted()
128 var x = sorted(range(3))
129 write @x
130 ## STDOUT:
131 0
132 1
133 2
134 ## END
135
136 #### reversed()
137 var x = reversed(range(3))
138 write @x
139 ## STDOUT:
140 2
141 1
142 0
143 ## END
144
145 #### enumerate()
146 write $enumerate
147 # TODO: need new for loop syntax
148 for (i, a in enumerate( %(a b c) )) {
149 write $i $a
150 }
151 ## STDOUT:
152 0 a
153 1 b
154 2 c
155 ## END
156
157 #### zip()
158 write $zip
159 var a = %(1 2 3)
160 var b = %(a b c)
161 for (item in zip(a, b)) {
162 write $item
163 }
164 ## STDOUT:
165 1 a
166 2 b
167 3 c
168 ## END
169
170 #### @split(x) respects IFS
171 setvar IFS = ":"
172 var x = "one:two:three"
173 argv.py @split(x)
174 ## STDOUT:
175 ['one', 'two', 'three']
176 ## END
177
178 #### @maybe(x)
179 setvar empty = ''
180 setvar x = 'X'
181 argv.py a @maybe(empty) @maybe(x) b
182
183 setvar n = null
184 argv.py a @maybe(n) b
185
186 ## STDOUT:
187 ['a', 'X', 'b']
188 ['a', 'b']
189 ## END
190
191 #### @maybe on invalid type is fatal error
192
193 # not allowed
194 setvar marray = %()
195 argv.py a @maybe(marray) b
196 echo done
197 ## status: 1
198 ## STDOUT:
199 ## END
200
201
202 #### @glob(x)
203 touch -- a.z b.z -.z
204 write -- @glob('?.z')
205 echo ___
206
207 # add it back
208 shopt -s dashglob
209 write -- @glob('?.z')
210
211 ## STDOUT:
212 a.z
213 b.z
214 ___
215 -.z
216 a.z
217 b.z
218 ## END