[
    {
        "description": "allOf",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                {
                    "properties": {
                        "bar": {"type": "integer"}
                    },
                    "required": ["bar"]
                },
                {
                    "properties": {
                        "foo": {"type": "string"}
                    },
                    "required": ["foo"]
                }
            ]
        },
        "tests": [
            {
                "description": "allOf",
                "data": {"foo": "baz", "bar": 2},
                "valid": true
            },
            {
                "description": "mismatch second",
                "data": {"foo": "baz"},
                "valid": false
            },
            {
                "description": "mismatch first",
                "data": {"bar": 2},
                "valid": false
            },
            {
                "description": "wrong type",
                "data": {"foo": "baz", "bar": "quux"},
                "valid": false
            }
        ]
    },
    {
        "description": "allOf with base schema",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "properties": {"bar": {"type": "integer"}},
            "required": ["bar"],
            "allOf" : [
                {
                    "properties": {
                        "foo": {"type": "string"}
                    },
                    "required": ["foo"]
                },
                {
                    "properties": {
                        "baz": {"type": "null"}
                    },
                    "required": ["baz"]
                }
            ]
        },
        "tests": [
            {
                "description": "valid",
                "data": {"foo": "quux", "bar": 2, "baz": null},
                "valid": true
            },
            {
                "description": "mismatch base schema",
                "data": {"foo": "quux", "baz": null},
                "valid": false
            },
            {
                "description": "mismatch first allOf",
                "data": {"bar": 2, "baz": null},
                "valid": false
            },
            {
                "description": "mismatch second allOf",
                "data": {"foo": "quux", "bar": 2},
                "valid": false
            },
            {
                "description": "mismatch both",
                "data": {"bar": 2},
                "valid": false
            }
        ]
    },
    {
        "description": "allOf simple types",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                {"maximum": 30},
                {"minimum": 20}
            ]
        },
        "tests": [
            {
                "description": "valid",
                "data": 25,
                "valid": true
            },
            {
                "description": "mismatch one",
                "data": 35,
                "valid": false
            }
        ]
    },
    {
        "description": "allOf with boolean schemas, all true",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [true, true]
        },
        "tests": [
            {
                "description": "any value is valid",
                "data": "foo",
                "valid": true
            }
        ]
    },
    {
        "description": "allOf with boolean schemas, some false",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [true, false]
        },
        "tests": [
            {
                "description": "any value is invalid",
                "data": "foo",
                "valid": false
            }
        ]
    },
    {
        "description": "allOf with boolean schemas, all false",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [false, false]
        },
        "tests": [
            {
                "description": "any value is invalid",
                "data": "foo",
                "valid": false
            }
        ]
    },
    {
        "description": "allOf with one empty schema",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                {}
            ]
        },
        "tests": [
            {
                "description": "any data is valid",
                "data": 1,
                "valid": true
            }
        ]
    },
    {
        "description": "allOf with two empty schemas",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                {},
                {}
            ]
        },
        "tests": [
            {
                "description": "any data is valid",
                "data": 1,
                "valid": true
            }
        ]
    },
    {
        "description": "allOf with the first empty schema",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                {},
                { "type": "number" }
            ]
        },
        "tests": [
            {
                "description": "number is valid",
                "data": 1,
                "valid": true
            },
            {
                "description": "string is invalid",
                "data": "foo",
                "valid": false
            }
        ]
    },
    {
        "description": "allOf with the last empty schema",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                { "type": "number" },
                {}
            ]
        },
        "tests": [
            {
                "description": "number is valid",
                "data": 1,
                "valid": true
            },
            {
                "description": "string is invalid",
                "data": "foo",
                "valid": false
            }
        ]
    },
    {
        "description": "nested allOf, to check validation semantics",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [
                {
                    "allOf": [
                        {
                            "type": "null"
                        }
                    ]
                }
            ]
        },
        "tests": [
            {
                "description": "null is valid",
                "data": null,
                "valid": true
            },
            {
                "description": "anything non-null is invalid",
                "data": 123,
                "valid": false
            }
        ]
    },
    {
        "description": "allOf combined with anyOf, oneOf",
        "schema": {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "allOf": [ { "multipleOf": 2 } ],
            "anyOf": [ { "multipleOf": 3 } ],
            "oneOf": [ { "multipleOf": 5 } ]
        },
        "tests": [
            {
                "description": "allOf: false, anyOf: false, oneOf: false",
                "data": 1,
                "valid": false
            },
            {
                "description": "allOf: false, anyOf: false, oneOf: true",
                "data": 5,
                "valid": false
            },
            {
                "description": "allOf: false, anyOf: true, oneOf: false",
                "data": 3,
                "valid": false
            },
            {
                "description": "allOf: false, anyOf: true, oneOf: true",
                "data": 15,
                "valid": false
            },
            {
                "description": "allOf: true, anyOf: false, oneOf: false",
                "data": 2,
                "valid": false
            },
            {
                "description": "allOf: true, anyOf: false, oneOf: true",
                "data": 10,
                "valid": false
            },
            {
                "description": "allOf: true, anyOf: true, oneOf: false",
                "data": 6,
                "valid": false
            },
            {
                "description": "allOf: true, anyOf: true, oneOf: true",
                "data": 30,
                "valid": true
            }
        ]
    }
]
