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