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
45 # TODO: does Oil have tuples? I think I want to defer this.
46
47 var a = Tuple()
48 write $a
49 ## STDOUT:
50 ()
51 ## END
52
53 #### Dict()
54 # TODO: more testing
55 var a = Dict()
56 write $len(a)
57 ## STDOUT:
58 0
59 ## END
60
61 #### join()
62 var x = %(a b 'c d')
63
64 var y = join(x)
65 argv.py $y
66
67 var z = join(x, ":")
68 argv.py $z
69 ## STDOUT:
70 ['abc d']
71 ['a:b:c d']
72 ## END
73
74 #### abs
75
76 # Also test smooshing
77 write $abs(-5)$abs(-0)$abs(5)
78 write $abs(-5) $abs(-0) $abs(5)
79 ## STDOUT:
80 505
81 5
82 0
83 5
84 ## END
85
86 #### any() and all()
87 var a1 = all( %(yes yes) )
88 var a2 = all( %(yes '') )
89 var a3 = all( %('' '') )
90 # This should be true and false or what?
91 write $a1 $a2 $a3
92 write __
93
94 var x1 = any( %(yes yes) )
95 var x2 = any( %(yes '') )
96 var x3 = any( %('' '') )
97 write $x1 $x2 $x3
98
99 ## STDOUT:
100 true
101 false
102 false
103 __
104 true
105 true
106 false
107 ## END
108
109 #### sum()
110 var start = 42
111
112 write $sum( range(3) )
113 write $sum( range(3), start)
114 write $sum( range(0), start)
115 ## STDOUT:
116 3
117 45
118 42
119 ## END
120
121 #### sorted()
122 var x = sorted(range(3))
123 write @x
124 ## STDOUT:
125 0
126 1
127 2
128 ## END
129
130 #### reversed()
131 var x = reversed(range(3))
132 write @x
133 ## STDOUT:
134 2
135 1
136 0
137 ## END
138
139 #### enumerate()
140 # TODO: need new for loop syntax
141 for (i, a in enumerate( %(a b c) )) {
142 write $i $a
143 }
144 ## STDOUT:
145 0 a
146 1 b
147 2 c
148 ## END
149
150 #### zip()
151 write $zip
152 var a = %(1 2 3)
153 var b = %(a b c)
154 for (item in zip(a, b)) {
155 write $item
156 }
157 ## STDOUT:
158 1 a
159 2 b
160 3 c
161 ## END
162
163 #### @split(x) respects IFS
164 setvar IFS = ":"
165 var x = "one:two:three"
166 argv.py @split(x)
167 ## STDOUT:
168 ['one', 'two', 'three']
169 ## END
170
171 #### @maybe(x)
172 setvar empty = ''
173 setvar x = 'X'
174 argv.py a @maybe(empty) @maybe(x) b
175
176 setvar n = null
177 argv.py a @maybe(n) b
178
179 ## STDOUT:
180 ['a', 'X', 'b']
181 ['a', 'b']
182 ## END
183
184 #### maybe() on invalid type is fatal error
185
186 # not allowed
187 setvar marray = %()
188 argv.py a @maybe(marray) b
189 echo done
190 ## status: 1
191 ## STDOUT:
192 ## END
193
194 #### split() on invalid type is fatal error
195 var myarray = %( --all --long )
196 write -- @myarray
197 write -- @split(myarray)
198 ## status: 1
199 ## STDOUT:
200 --all
201 --long
202 ## END
203
204 #### @glob(x)
205
206 # empty glob
207 write -- A @glob('__nope__') B
208 echo ___
209
210 touch -- a.z b.z -.z
211 write -- @glob('?.z')
212 echo ___
213
214 # add it back
215 shopt -s dashglob
216 write -- @glob('?.z')
217
218 ## STDOUT:
219 A
220 B
221 ___
222 a.z
223 b.z
224 ___
225 -.z
226 a.z
227 b.z
228 ## END
229