OILS / spec / ysh-convert.test.sh View on Github | oils.pub

202 lines, 122 significant
1#### bool() conversion
2shopt --set parse_ysh_expr_sub
3
4echo "$[bool(1234)]"
5echo "$[bool(0)]"
6echo "$[bool('foo')]"
7echo "$[bool(true)]"
8echo "$[bool(1.234)]"
9echo "$[bool([])]"
10echo "$[bool({})]"
11echo "$[bool(null)]"
12echo "$[bool(len)]"
13echo "$[bool('foo'=>startsWith)]"
14echo "$[bool(1..<3)]"
15## STDOUT:
16true
17false
18true
19true
20true
21false
22false
23false
24true
25true
26true
27## END
28
29#### bool() more
30var a = bool( :|| )
31var b = bool( :|foo| )
32write $a $b
33## STDOUT:
34false
35true
36## END
37
38
39#### int() conversion
40shopt --set parse_ysh_expr_sub
41
42echo "$[int(1234)]"
43echo "$[int('1234')]"
44echo "$[int(1.234)]"
45## STDOUT:
461234
471234
481
49## END
50
51#### int() more
52pp test_ (int("3"))
53pp test_ (int("-35"))
54pp test_ (int('5_6'))
55
56shopt -s ysh:upgrade
57
58try {
59 var c = int("bad")
60}
61echo code=$[_error.code]
62
63## STDOUT:
64(Int) 3
65(Int) -35
66(Int) 56
67code=3
68## END
69
70#### float() conversion
71shopt --set parse_ysh_expr_sub
72
73echo "$[float(1234)]"
74echo "$[float('1.234')]"
75echo "$[float(2.345)]"
76## STDOUT:
771234.0
781.234
792.345
80## END
81
82#### float() overflow / underflow
83
84var a = float("1.2")
85var b = float("3.4")
86
87var c = float("42.1e500")
88var d = float("-42.1e500")
89
90write $a $b $c $d
91## STDOUT:
921.2
933.4
94inf
95-inf
96## END
97
98#### str() conversion
99shopt --set parse_ysh_expr_sub
100
101echo $[str(1234)]
102echo $[str(1.234)]
103echo $[str('foo')]
104
105echo
106
107# Added with Stringify()
108
109echo $[str(true)]
110echo $[str(null)]
111echo $[str(/d+/)]
112
113echo $[str([1,2,3])]
114
115## status: 3
116## STDOUT:
1171234
1181.234
119foo
120
121true
122null
123[[:digit:]]+
124## END
125
126#### dict() converts from BashAssoc to Dict
127declare -A foo
128foo=([a]=1 [b]=2 [c]=3)
129
130json write (type(foo))
131json write (dict(foo))
132## STDOUT:
133"BashAssoc"
134{
135 "a": "1",
136 "b": "2",
137 "c": "3"
138}
139## END
140
141#### dict() does shallow copy
142shopt --set parse_ysh_expr_sub
143
144var d = {'a': 1}
145var d2 = d
146setvar d2['b'] = 2
147echo $['b' in d] # d2 should be an alias for d
148
149var d3 = dict(d)
150setvar d3['c'] = 3
151
152# d3 should NOT be an alias
153echo $['c' in d]
154echo $['c' in d3]
155## STDOUT:
156true
157false
158true
159## END
160
161#### list() does shallow copy
162shopt --set parse_ysh_expr_sub
163
164var l = [1]
165var l2 = l
166call l2->append(2)
167echo $[len(l)] # d2 should be an alias for d
168
169var l3 = list(l)
170call l3->append(3)
171
172# l3 should NOT be an alias
173echo $[len(l)]
174echo $[len(l3)]
175## STDOUT:
1762
1772
1783
179## END
180
181#### list() from Dict
182shopt -s ysh:upgrade
183
184var a = list({'a': 1, 'foo': 'bar'})
185write @a
186## STDOUT:
187a
188foo
189## END
190
191
192#### list() from range
193shopt -s ysh:upgrade
194
195var mylist = list(0..<3)
196write @mylist
197## STDOUT:
1980
1991
2002
201## END
202