1[
2  {
3    "given": {
4      "outer": {
5        "foo": "foo",
6        "bar": "bar",
7        "baz": "baz"
8      }
9    },
10    "cases": [
11      {
12        "expression": "outer.foo || outer.bar",
13        "result": "foo"
14      },
15      {
16        "expression": "outer.foo||outer.bar",
17        "result": "foo"
18      },
19      {
20        "expression": "outer.bar || outer.baz",
21        "result": "bar"
22      },
23      {
24        "expression": "outer.bar||outer.baz",
25        "result": "bar"
26      },
27      {
28        "expression": "outer.bad || outer.foo",
29        "result": "foo"
30      },
31      {
32        "expression": "outer.bad||outer.foo",
33        "result": "foo"
34      },
35      {
36        "expression": "outer.foo || outer.bad",
37        "result": "foo"
38      },
39      {
40        "expression": "outer.foo||outer.bad",
41        "result": "foo"
42      },
43      {
44        "expression": "outer.bad || outer.alsobad",
45        "result": null
46      },
47      {
48        "expression": "outer.bad||outer.alsobad",
49        "result": null
50      }
51    ]
52  },
53  {
54    "given": {
55      "outer": {
56        "foo": "foo",
57        "bool": false,
58        "empty_list": [],
59        "empty_string": ""
60      }
61    },
62    "cases": [
63      {
64        "expression": "outer.empty_string || outer.foo",
65        "result": "foo"
66      },
67      {
68        "expression": "outer.nokey || outer.bool || outer.empty_list || outer.empty_string || outer.foo",
69        "result": "foo"
70      }
71    ]
72  },
73  {
74    "given": {
75      "True": true,
76      "False": false,
77      "Number": 5,
78      "EmptyList": [],
79      "Zero": 0
80    },
81    "cases": [
82      {
83        "expression": "True && False",
84        "result": false
85      },
86      {
87        "expression": "False && True",
88        "result": false
89      },
90      {
91        "expression": "True && True",
92        "result": true
93      },
94      {
95        "expression": "False && False",
96        "result": false
97      },
98      {
99        "expression": "True && Number",
100        "result": 5
101      },
102      {
103        "expression": "Number && True",
104        "result": true
105      },
106      {
107        "expression": "Number && False",
108        "result": false
109      },
110      {
111        "expression": "Number && EmptyList",
112        "result": []
113      },
114      {
115        "expression": "Number && True",
116        "result": true
117      },
118      {
119        "expression": "EmptyList && True",
120        "result": []
121      },
122      {
123        "expression": "EmptyList && False",
124        "result": []
125      },
126      {
127        "expression": "True || False",
128        "result": true
129      },
130      {
131        "expression": "True || True",
132        "result": true
133      },
134      {
135        "expression": "False || True",
136        "result": true
137      },
138      {
139        "expression": "False || False",
140        "result": false
141      },
142      {
143        "expression": "Number || EmptyList",
144        "result": 5
145      },
146      {
147        "expression": "Number || True",
148        "result": 5
149      },
150      {
151        "expression": "Number || True && False",
152        "result": 5
153      },
154      {
155        "expression": "(Number || True) && False",
156        "result": false
157      },
158      {
159        "expression": "Number || (True && False)",
160        "result": 5
161      },
162      {
163        "expression": "!True",
164        "result": false
165      },
166      {
167        "expression": "!False",
168        "result": true
169      },
170      {
171        "expression": "!Number",
172        "result": false
173      },
174      {
175        "expression": "!EmptyList",
176        "result": true
177      },
178      {
179        "expression": "True && !False",
180        "result": true
181      },
182      {
183        "expression": "True && !EmptyList",
184        "result": true
185      },
186      {
187        "expression": "!False && !EmptyList",
188        "result": true
189      },
190      {
191        "expression": "!(True && False)",
192        "result": true
193      },
194      {
195        "expression": "!Zero",
196        "result": false
197      },
198      {
199        "expression": "!!Zero",
200        "result": true
201      }
202    ]
203  },
204  {
205    "given": {
206      "one": 1,
207      "two": 2,
208      "three": 3
209    },
210    "cases": [
211      {
212        "expression": "one < two",
213        "result": true
214      },
215      {
216        "expression": "one <= two",
217        "result": true
218      },
219      {
220        "expression": "one == one",
221        "result": true
222      },
223      {
224        "expression": "one == two",
225        "result": false
226      },
227      {
228        "expression": "one > two",
229        "result": false
230      },
231      {
232        "expression": "one >= two",
233        "result": false
234      },
235      {
236        "expression": "one != two",
237        "result": true
238      },
239      {
240        "expression": "one < two && three > one",
241        "result": true
242      },
243      {
244        "expression": "one < two || three > one",
245        "result": true
246      },
247      {
248        "expression": "one < two || three < one",
249        "result": true
250      },
251      {
252        "expression": "two < one || three < one",
253        "result": false
254      }
255    ]
256  }
257]
258