1 ## oils_failures_allowed: 0
2
3 #### Int
4 = -123
5 ## STDOUT:
6 (Int) -123
7 ## END
8
9 #### Float
10 = -0.00
11 ## STDOUT:
12 (Float) -0.0
13 ## END
14
15 #### Null
16 = null
17 ## STDOUT:
18 (Null) null
19 ## END
20
21 #### Bool
22 = true
23 = false
24 ## STDOUT:
25 (Bool) true
26 (Bool) false
27 ## END
28
29 #### String
30 = "double quoted"
31 = 'single quoted'
32 ## STDOUT:
33 (Str) 'double quoted'
34 (Str) 'single quoted'
35 ## END
36
37 #### Range
38 var x = 1..<100
39
40 pp value (x)
41
42 # TODO: show type here, like (Range 1 ..< 100)
43
44 pp value ({k: x})
45
46 echo
47
48 pp test_ (x)
49 pp test_ ({k: x})
50
51 ## STDOUT:
52 (Range 1 ..< 100)
53 (Dict) {k: (Range 1 ..< 100)}
54
55 <Range>
56 (Dict) {"k":<Range>}
57 ## END
58
59
60 #### Eggex (reference type)
61 var pat = /d+/
62
63 remove-addr() {
64 sed 's/0x[0-9a-f]\+/0x---/'
65 }
66
67 pp value (pat) | remove-addr
68
69 pp value ({k: pat}) | remove-addr
70
71 # TODO: change this
72
73 echo
74
75 pp test_ (pat)
76 pp test_ ({k: pat})
77
78 ## STDOUT:
79 <Eggex 0x--->
80 (Dict) {k: <Eggex 0x--->}
81
82 <Eggex>
83 (Dict) {"k":<Eggex>}
84 ## END
85
86 #### BashArray, new representation for bash array
87 declare -a empty=()
88 declare -a array_1=(hello)
89 array_1[5]=5
90
91 pp value (empty)
92 pp value (array_1)
93 echo
94
95 pp value ({k: empty})
96 pp value ({k: array_1})
97 echo
98
99 pp test_ (empty)
100 pp test_ (array_1)
101 echo
102
103 pp test_ ({k: empty})
104 pp test_ ({k: array_1})
105
106 ## STDOUT:
107 (BashArray)
108 (BashArray [0]='hello' [5]='5')
109
110 (Dict) {k: (BashArray)}
111 (Dict) {k: (BashArray [0]='hello' [5]='5')}
112
113 {"type":"BashArray","data":{}}
114 {"type":"BashArray","data":{"0":"hello","5":"5"}}
115
116 (Dict) {"k":{"type":"BashArray","data":{}}}
117 (Dict) {"k":{"type":"BashArray","data":{"0":"hello","5":"5"}}}
118 ## END
119
120 #### BashArray, short
121 declare -a empty=()
122 declare -a array_1=(hello)
123
124 pp value (empty)
125 pp value (array_1)
126 echo
127
128 pp value ({k: empty})
129 pp value ({k: array_1})
130 echo
131
132 pp test_ (empty)
133 pp test_ (array_1)
134 echo
135
136 pp test_ ({k: empty})
137 pp test_ ({k: array_1})
138
139 ## STDOUT:
140 (BashArray)
141 (BashArray [0]='hello')
142
143 (Dict) {k: (BashArray)}
144 (Dict) {k: (BashArray [0]='hello')}
145
146 {"type":"BashArray","data":{}}
147 {"type":"BashArray","data":{"0":"hello"}}
148
149 (Dict) {"k":{"type":"BashArray","data":{}}}
150 (Dict) {"k":{"type":"BashArray","data":{"0":"hello"}}}
151 ## END
152
153 #### BashArray, long
154 declare -a array_3
155 array_3[0]="world"
156 array_3[2]=*.py
157 declare array_long=(Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
158 do eiusmod.)
159 = array_3
160 = array_long
161 ## STDOUT:
162 (BashArray [0]='world' [2]='*.py')
163 (BashArray
164 [0]='Lorem'
165 [1]='ipsum'
166 [2]='dolor'
167 [3]='sit'
168 [4]='amet,'
169 [5]='consectetur'
170 [6]='adipiscing'
171 [7]='elit,'
172 [8]='sed'
173 [9]='do'
174 [10]='eiusmod.'
175 )
176 ## END
177
178 #### BashAssoc, short
179 declare -A empty
180 declare -A assoc=(['k']=$'foo \x01\u03bc')
181
182 pp value (empty)
183 pp value (assoc)
184 echo
185
186 pp value ({k:empty})
187 pp value ({k:assoc})
188 echo
189
190 pp test_ (empty)
191 pp test_ (assoc)
192 echo
193
194 pp test_ ({k:empty})
195 pp test_ ({k:assoc})
196
197 ## STDOUT:
198 (BashAssoc)
199 (BashAssoc ['k']=$'foo \u0001μ')
200
201 (Dict) {k: (BashAssoc)}
202 (Dict) {k: (BashAssoc ['k']=$'foo \u0001μ')}
203
204 {"type":"BashAssoc","data":{}}
205 {"type":"BashAssoc","data":{"k":"foo \u0001μ"}}
206
207 (Dict) {"k":{"type":"BashAssoc","data":{}}}
208 (Dict) {"k":{"type":"BashAssoc","data":{"k":"foo \u0001μ"}}}
209 ## END
210
211
212 #### BashAssoc, long
213 declare -A assoc_0=()
214 declare -A assoc_1=([1]=one)
215 declare -A assoc_3=([1]=one [two]=2 [3]=three)
216 declare -A assoc_long=([Lorem]=ipsum [dolor]="sit amet," ['consectetur adipiscing']="elit, sed" [do]="eiusmod.")
217 = assoc_0
218 = assoc_1
219 = assoc_3
220 = assoc_long
221 ## STDOUT:
222 (BashAssoc)
223 (BashAssoc ['1']='one')
224 (BashAssoc ['1']='one' ['two']='2' ['3']='three')
225 (BashAssoc
226 ['Lorem']='ipsum'
227 ['dolor']='sit amet,'
228 ['consectetur adipiscing']='elit, sed'
229 ['do']='eiusmod.'
230 )
231 ## END
232
233 #### Simple Cycles
234 var cyclic_array = ["one", "two", "three"]
235 setvar cyclic_array[2] = cyclic_array
236 var cyclic_dict = {"dead_end": null}
237 setvar cyclic_dict["live_end"] = cyclic_dict
238 = cyclic_array
239 = cyclic_dict
240 ## STDOUT:
241 (List) ['one', 'two', [...]]
242 (Dict) {dead_end: null, live_end: {...}}
243 ## END
244
245 #### Complex Cycles
246 var dict = {}
247 setvar dict["nothing"] = null
248 var simple_cycle = [["dummy"]]
249 setvar simple_cycle[0][0] = simple_cycle
250 setvar dict["simple_cycle"] = simple_cycle
251 var tricky_cycle = ["dummy"]
252 setvar tricky_cycle[0] = dict
253 setvar dict["tricky_cycle"] = tricky_cycle
254 var dag = [1, 2, "dummy"]
255 setvar dag[2] = dag
256 setvar dict["dag"] = [dag, dag]
257 var alpha = {}
258 var omega = {}
259 setvar alpha["omega"] = omega
260 setvar omega["alpha"] = alpha
261 setvar dict["key_alpha"] = alpha
262 setvar dict["key_omega"] = omega
263 = dict
264 ## STDOUT:
265 (Dict)
266 {
267 nothing: null,
268 simple_cycle: [[[...]]],
269 tricky_cycle: [{...}],
270 dag: [[1, 2, [...]], [1, 2, [...]]],
271 key_alpha: {omega: {alpha: {...}}},
272 key_omega: {alpha: {omega: {...}}}
273 }
274 ## END
275
276 #### pp test_: List cycle
277
278 var no_cycle = [5, 6]
279 pp test_ (no_cycle)
280
281 var two = [no_cycle, no_cycle]
282 pp test_ (two)
283 #pp value (two)
284
285 echo
286
287 var L = [42]
288 call L->append(L)
289 pp test_ (L)
290 #pp value (L)
291
292 var two = [L, L]
293 pp test_ (two)
294 #pp value (two)
295
296 ## STDOUT:
297 (List) [5,6]
298 (List) [[5,6],[5,6]]
299
300 (List) [42,[...]]
301 (List) [[42,[...]],[42,[...]]]
302 ## END
303
304 #### pp test_: Dict cycle
305
306 var no_cycle = {z: 99}
307 pp test_ (no_cycle)
308
309 var two = [no_cycle, no_cycle]
310 pp test_ (two)
311
312 #pp value (two)
313
314 echo
315
316 var d = {k: 42}
317 setvar d.cycle = d
318 pp test_ (d)
319 #pp value (d)
320
321 var two = [d, d]
322 pp test_ (two)
323 #pp value (two)
324
325
326 ## STDOUT:
327 (Dict) {"z":99}
328 (List) [{"z":99},{"z":99}]
329
330 (Dict) {"k":42,"cycle":{...}}
331 (List) [{"k":42,"cycle":{...}},{"k":42,"cycle":{...}}]
332 ## END
333
334 #### pp: Obj cycle
335
336 var methods = Object(null, {__foo__: null})
337 var obj = Object(methods, {z: 99})
338 pp test_ (obj)
339 pp value (obj)
340 echo
341
342 setvar obj.cycle = obj
343 pp test_ (obj)
344 pp value (obj)
345
346 echo
347
348 var two = [obj, obj]
349 pp test_ (two)
350
351 ## STDOUT:
352 (Obj) ("z":99) --> ("__foo__":null)
353 (Obj) (z: 99) --> (__foo__: null)
354
355 (Obj) ("z":99,"cycle":(...)) --> ("__foo__":null)
356 (Obj) (z: 99, cycle: (...)) --> (__foo__: null)
357
358 (List) [("z":99,"cycle":(...)) --> ("__foo__":null),("z":99,"cycle":(...)) --> ("__foo__":null)]
359 ## END
360
361
362
363 #### pp test_: Obj with dict cycle
364
365 var methods = Object(null, {__foo__: null})
366 var no_cycle = Object(methods, {z: 99})
367 pp test_ (no_cycle)
368
369 var two = [no_cycle, no_cycle]
370 pp test_ (two)
371
372 echo
373
374 var d = {k: 42}
375 setvar d.cycle = d
376
377 # This cycle detection doesn't quite work
378 # Because we're only considering the object itself
379
380 var o = Object(null, d)
381 pp test_ (o)
382
383 var two = [o, o]
384 pp test_ (two)
385
386 #var o2 = Object(o, {z: 99})
387 #pp test_ (o2)
388
389 ## STDOUT:
390 (Obj) ("z":99) --> ("__foo__":null)
391 (List) [("z":99) --> ("__foo__":null),("z":99) --> ("__foo__":null)]
392
393 (Obj) ("k":42,"cycle":{"k":42,"cycle":{...}})
394 (List) [("k":42,"cycle":{"k":42,"cycle":{...}}),("k":42,"cycle":{"k":42,"cycle":{...}})]
395 ## END
396