[
    {
        "description": "short-circuit with items (schema form)",
        "schema": {
            "items": { "multipleOf": 2 }
        },
        "tests": [
            {
                "description": "single item is valid",
                "data": [ 2 ],
                "valid": true
            },
            {
                "description": "second item is invalid",
                "data": [ 2, 1 ],
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with items (array form)",
        "schema": {
            "items": [
                { "multipleOf": 2 },
                { "multipleOf": 2 }
            ]
        },
        "tests": [
            {
                "description": "single item is valid",
                "data": [ 2 ],
                "valid": true
            },
            {
                "description": "second item is invalid",
                "data": [ 2, 1 ],
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with additionalItems",
        "schema": {
            "items": [ true ],
            "additionalItems": { "multipleOf": 2 }
        },
        "tests": [
            {
                "description": "single additional item is valid",
                "data": [ 1, 2 ],
                "valid": true
            },
            {
                "description": "second additional item is invalid",
                "data": [ 1, 2, 1 ],
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with unevaluatedItems",
        "schema": {
            "unevaluatedItems": { "multipleOf": 2 }
        },
        "tests": [
            {
                "description": "single item is valid",
                "data": [ 2 ],
                "valid": true
            },
            {
                "description": "second item is invalid",
                "data": [ 2, 1 ],
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with properties",
        "schema": {
            "properties": {
                "alpha": { "multipleOf": 2 },
                "beta": { "multipleOf": 2 }
            }
        },
        "tests": [
            {
                "description": "single property is valid",
                "data": { "alpha": 2 },
                "valid": true
            },
            {
                "description": "second property is invalid",
                "data": { "alpha": 2, "beta": 1 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with properties and unevaluatedProperties",
        "schema": {
            "properties": {
                "alpha": true,
                "beta": false,
                "gamma": true
            },
            "unevaluatedProperties": false
        },
        "tests": [
            {
                "description": "single property is valid",
                "data": { "alpha": 1 },
                "valid": true
            },
            {
                "description": "second property is invalid",
                "data": { "alpha": 1, "beta": 2 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with patternProperties",
        "schema": {
            "patternProperties": {
                "^a": { "multipleOf": 2 },
                "^b": { "multipleOf": 2 }
            }
        },
        "tests": [
            {
                "description": "single property is valid",
                "data": { "alpha": 2 },
                "valid": true
            },
            {
                "description": "second property is invalid",
                "data": { "alpha": 2, "beta": 1 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with patternProperties and boolean schemas",
        "schema": {
            "patternProperties": {
                "^a": true,
                "^b": false
            }
        },
        "tests": [
            {
                "description": "single property is valid",
                "data": { "alpha": 2 },
                "valid": true
            },
            {
                "description": "second property is invalid",
                "data": { "alpha": 2, "beta": 1 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with additionalProperties",
        "schema": {
            "additionalProperties": { "multipleOf": 2 }
        },
        "tests": [
            {
                "description": "single property is valid",
                "data": { "alpha": 2 },
                "valid": true
            },
            {
                "description": "second property is invalid",
                "data": { "alpha": 2, "beta": 1 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with unevaluatedProperties",
        "schema": {
            "unevaluatedProperties": { "multipleOf": 2 }
        },
        "tests": [
            {
                "description": "single property is valid",
                "data": { "alpha": 2 },
                "valid": true
            },
            {
                "description": "second property is invalid",
                "data": { "alpha": 2, "beta": 1 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with allOf",
        "schema": {
            "allOf": [
                false,
                {
                    "properties": {
                        "alpha": {},
                        "beta": {}
                    }
                }
            ],
            "unevaluatedProperties": false
        },
        "tests": [
            {
                "description": "'unevaluated' errors are produced iff short_circuit is false",
                "data": { "alpha": 1, "gamma": 3 },
                "valid": false
            },
            {
                "description": "/allOf/0 guarantees a false result even when all branches are evaluated",
                "data": { "alpha": 1, "beta": 2 },
                "valid": false
            }
        ]
    },
    {
        "description": "short-circuit with anyOf",
        "schema": {
            "anyOf": [
                true,
                {
                    "properties": {
                        "alpha": {},
                        "beta": {}
                    }
                }
            ],
            "unevaluatedProperties": false
        },
        "tests": [
            {
                "description": "some properties are unevaluated",
                "data": { "alpha": 1, "gamma": 1 },
                "valid": false
            },
            {
                "description": "all branches are still evaluated, even though we would have wanted to abort earlier",
                "data": { "alpha": 1, "beta": 2 },
                "valid": true
            }
        ]
    },
    {
        "description": "short-circuit with oneOf",
        "schema": {
            "oneOf": [
                {
                    "required": ["alpha"],
                    "properties": {
                        "alpha": { "const": 1 }
                    }
                },
                {
                    "required": ["beta"],
                    "properties": {
                        "beta": { "const": 2 }
                    }
                },
                {
                    "required": ["gamma"],
                    "properties": {
                        "gamma": { "const": 3 }
                    }
                }
            ],
            "unevaluatedProperties": false
        },
        "tests": [
            {
                "description": "we can safely short-circuit after two valid oneOfs; gamma never gets evaluated; incorrect unevaluated error is not produced",
                "data": { "alpha": 1, "beta": 2, "gamma": 3 },
                "valid": false
            },
            {
                "description": "all branches are still evaluated, even though we would have wanted to abort earlier",
                "data": { "alpha": 1, "delta": 4 },
                "valid": false
            }
        ]
    }
]