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

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