1 #### "in" and "not in" on Dicts
2
3 var d = {spam: 42, eggs: []}
4
5 var b = 'spam' in d
6 echo $b
7
8 var b = 'zz' in d
9 echo $b
10
11 var b = 'zz' not in d
12 echo $b
13
14 var L = [1, 2, 3]
15 var b = 3 in L # not allowed!
16
17 echo should not get here
18
19 ## status: 3
20 ## STDOUT:
21 true
22 false
23 true
24 ## END
25
26 #### dict with 'bare word' keys
27 shopt --set parse_ysh_expr_sub
28
29 var d0 = {}
30 echo len=$[len(d0)]
31 var d1 = {name: "hello"}
32 echo len=$[len(d1)]
33 var d2 = {name: "hello", other: 2}
34 echo len=$[len(d2)]
35 ## STDOUT:
36 len=0
37 len=1
38 len=2
39 ## END
40
41 #### dict with expression keys
42 shopt --set parse_ysh_expr_sub
43
44 var d1 = {['name']: "hello"}
45 echo len=$[len(d1)]
46 var v = d1['name']
47 echo $v
48
49 var key='k'
50 var d2 = {["$key"]: "bar"}
51 echo len=$[len(d2)]
52 var v2 = d2['k']
53 echo $v2
54
55 ## STDOUT:
56 len=1
57 hello
58 len=1
59 bar
60 ## END
61
62
63 #### dict literal with implicit value
64 shopt --set parse_ysh_expr_sub
65
66 var name = 'foo'
67 var d1 = {name}
68 echo len=$[len(d1)]
69 var v1 = d1['name']
70 echo $v1
71
72 var d2 = {name, other: 'val'}
73 echo len=$[len(d2)]
74 var v2 = d2['name']
75 echo $v2
76
77 ## STDOUT:
78 len=1
79 foo
80 len=2
81 foo
82 ## END
83
84 #### Dict literal with string keys
85 var d = {'sq': 123}
86 var v = d['sq']
87 echo $v
88
89 var x = "q"
90 var d2 = {"d$x": 456}
91 var v2 = d2["dq"]
92 echo $v2
93 ## STDOUT:
94 123
95 456
96 ## END
97
98
99 #### keys(d), values(d), get(d, key)
100
101 var d = {a: 42, b: 99}
102
103 pp test_ (keys(d))
104 pp test_ (values(d))
105
106 pp test_ (get(d, 'a', 'default'))
107 pp test_ (get(d, 'key', 'default'))
108
109 ## STDOUT:
110 (List) ["a","b"]
111 (List) [42,99]
112 (Int) 42
113 (Str) "default"
114 ## END
115
116 #### get() has default null
117
118 var d = {a: 42}
119
120 pp test_ (get(d, 'b'))
121
122 ## STDOUT:
123 (Null) null
124 ## END
125
126