1 ## our_shell: ysh
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
19 var c = Int("bad")
20 echo 'should not get here'
21
22 ## status: 3
23 ## STDOUT:
24 3
25 -35
26 ## END
27
28 #### Float()
29 # TODO: This needs a lot more testing, for precision, etc.
30 var a = Float("1.2")
31 var b = Float("3.4")
32 write $a $b
33 ## STDOUT:
34 1.2
35 3.4
36 ## END
37
38 #### Str()
39 # TODO: more testing
40 var a = Str(5)
41 var b = Str(42)
42 write $a $b
43 ## STDOUT:
44 5
45 42
46 ## END
47
48 #### Dict()
49 # TODO: more testing
50 var a = Dict()
51 write $[len(a)]
52 ## STDOUT:
53 0
54 ## END
55
56 #### join()
57 var x = :|a b 'c d'|
58
59 var y = join(x)
60 argv.py $y
61
62 var z = join(x, ":")
63 argv.py $z
64 ## STDOUT:
65 ['abc d']
66 ['a:b:c d']
67 ## END
68
69 #### abs
70
71 # Also test smooshing
72 write $[abs(-5)]$[abs(-0)]$[abs(5)]
73 write $[abs(-5)] $[abs(-0)] $[abs(5)]
74 ## STDOUT:
75 505
76 5
77 0
78 5
79 ## END
80
81 #### any() and all()
82 var a1 = all( :|yes yes| )
83 var a2 = all( :|yes ''| )
84 var a3 = all( :|'' ''| )
85 # This should be true and false or what?
86 write $a1 $a2 $a3
87 write __
88
89 var x1 = any( :|yes yes| )
90 var x2 = any( :|yes ''| )
91 var x3 = any( :|'' ''| )
92 write $x1 $x2 $x3
93
94 ## STDOUT:
95 true
96 false
97 false
98 __
99 true
100 true
101 false
102 ## END
103
104 #### sum()
105 var start = 42
106
107 write $[sum( range(3) )]
108 write $[sum( range(3), start)]
109 write $[sum( range(0), start)]
110 ## STDOUT:
111 3
112 45
113 42
114 ## END
115
116 #### reversed()
117 var x = reversed(range(3))
118 write @x
119 ## STDOUT:
120 2
121 1
122 0
123 ## END
124
125 #### @[split(x)] respects IFS
126 setvar IFS = ":"
127 var x = "one:two:three"
128 argv.py @[split(x)]
129 ## STDOUT:
130 ['one', 'two', 'three']
131 ## END
132
133 #### @[maybe(x)]
134 setvar empty = ''
135 setvar x = 'X'
136 argv.py a @[maybe(empty)] @[maybe(x)] b
137
138 setvar n = null
139 argv.py a @[maybe(n)] b
140
141 ## STDOUT:
142 ['a', 'X', 'b']
143 ['a', 'b']
144 ## END
145
146 #### maybe() on invalid type is fatal error
147
148 # not allowed
149 setvar marray = :||
150 argv.py a @[maybe(marray)] b
151 echo done
152 ## status: 3
153 ## STDOUT:
154 ## END
155
156 #### split() on invalid type is fatal error
157 var myarray = :| --all --long |
158 write -- @[myarray]
159 write -- @[split(myarray)]
160 ## status: 3
161 ## STDOUT:
162 --all
163 --long
164 ## END
165
166 #### @[glob(x)]
167
168 # empty glob
169 write -- A @[glob('__nope__')] B
170 echo ___
171
172 touch -- a.z b.z -.z
173 write -- @[glob('?.z')]
174 echo ___
175
176 # add it back
177 shopt -s dashglob
178 write -- @[glob('?.z')]
179
180 ## STDOUT:
181 A
182 B
183 ___
184 a.z
185 b.z
186 ___
187 -.z
188 a.z
189 b.z
190 ## END
191