[
    {
        "cases": [
            {
                "expression": "outer.foo || outer.bar",
                "result": "foo"
            },
            {
                "expression": "outer.foo||outer.bar",
                "result": "foo"
            },
            {
                "expression": "outer.bar || outer.baz",
                "result": "bar"
            },
            {
                "expression": "outer.bar||outer.baz",
                "result": "bar"
            },
            {
                "expression": "outer.bad || outer.foo",
                "result": "foo"
            },
            {
                "expression": "outer.bad||outer.foo",
                "result": "foo"
            },
            {
                "expression": "outer.foo || outer.bad",
                "result": "foo"
            },
            {
                "expression": "outer.foo||outer.bad",
                "result": "foo"
            },
            {
                "expression": "outer.bad || outer.alsobad",
                "result": null
            },
            {
                "expression": "outer.bad||outer.alsobad",
                "result": null
            }
        ],
        "given": {
            "outer": {
                "bar": "bar",
                "baz": "baz",
                "foo": "foo"
            }
        }
    },
    {
        "cases": [
            {
                "expression": "outer.empty_string || outer.foo",
                "result": "foo"
            },
            {
                "expression": "outer.nokey || outer.bool || outer.empty_list || outer.empty_string || outer.foo",
                "result": "foo"
            }
        ],
        "given": {
            "outer": {
                "bool": false,
                "empty_list": [],
                "empty_string": "",
                "foo": "foo"
            }
        }
    },
    {
        "cases": [
            {
                "expression": "True && False",
                "result": false
            },
            {
                "expression": "False && True",
                "result": false
            },
            {
                "expression": "True && True",
                "result": true
            },
            {
                "expression": "False && False",
                "result": false
            },
            {
                "expression": "True && Number",
                "result": 5
            },
            {
                "expression": "Number && True",
                "result": true
            },
            {
                "expression": "Number && False",
                "result": false
            },
            {
                "expression": "Number && EmptyList",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "Number && True",
                "result": true
            },
            {
                "expression": "EmptyList && True",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "EmptyList && False",
                "is_deeply": 1,
                "result": []
            },
            {
                "expression": "True || False",
                "result": true
            },
            {
                "expression": "True || True",
                "result": true
            },
            {
                "expression": "False || True",
                "result": true
            },
            {
                "expression": "False || False",
                "result": false
            },
            {
                "expression": "Number || EmptyList",
                "result": 5
            },
            {
                "expression": "Number || True",
                "result": 5
            },
            {
                "expression": "Number || True && False",
                "result": 5
            },
            {
                "expression": "(Number || True) && False",
                "result": false
            },
            {
                "expression": "Number || (True && False)",
                "result": 5
            },
            {
                "expression": "!True",
                "result": false
            },
            {
                "expression": "!False",
                "result": true
            },
            {
                "expression": "!Number",
                "result": false
            },
            {
                "expression": "!EmptyList",
                "result": true
            },
            {
                "expression": "True && !False",
                "result": true
            },
            {
                "expression": "True && !EmptyList",
                "result": true
            },
            {
                "expression": "!False && !EmptyList",
                "result": true
            },
            {
                "expression": "!(True && False)",
                "result": true
            },
            {
                "expression": "!Zero",
                "result": false
            },
            {
                "expression": "!!Zero",
                "result": true
            }
        ],
        "given": {
            "EmptyList": [],
            "False": false,
            "Number": 5,
            "True": true,
            "Zero": 0
        }
    },
    {
        "cases": [
            {
                "expression": "one < two",
                "result": true
            },
            {
                "expression": "one <= two",
                "result": true
            },
            {
                "expression": "one == one",
                "result": true
            },
            {
                "expression": "one == two",
                "result": false
            },
            {
                "expression": "one > two",
                "result": false
            },
            {
                "expression": "one >= two",
                "result": false
            },
            {
                "expression": "one != two",
                "result": true
            },
            {
                "expression": "one < two && three > one",
                "result": true
            },
            {
                "expression": "one < two || three > one",
                "result": true
            },
            {
                "expression": "one < two || three < one",
                "result": true
            },
            {
                "expression": "two < one || three < one",
                "result": false
            }
        ],
        "given": {
            "one": 1,
            "three": 3,
            "two": 2
        }
    }
]