[
    {
        "description": "type checks",
        "schema": {
            "$comment": "on some architectures, some of these values may decode to strings or Math::BigInt objects",
            "type": "integer"
        },
        "tests": [
            {
                "description": "beyond int64 lower boundary",
                "data": -9223372036854775809,
                "valid": true
            },
            {
                "description": "int64 lower boundary",
                "data": -9223372036854775808,
                "valid": true
            },
            {
                "description": "beyond int32 lower boundary",
                "data": -2147483649,
                "valid": true
            },
            {
                "description": "int32 lower boundary",
                "data": -2147483648,
                "valid": true
            },
            {
                "description": "zero",
                "data": 0,
                "valid": true
            },
            {
                "description": "int32 upper boundary",
                "data": 2147483647,
                "valid": true
            },
            {
                "description": "beyond int32 upper boundary",
                "data": 2147483648,
                "valid": true
            },
            {
                "description": "upper int64 boundary",
                "data": 9223372036854775807,
                "valid": true
            },
            {
                "description": "beyond int64 upper boundary",
                "data": 9223372036854775808,
                "valid": true
            },
            {
                "description": "uint64 upper boundary",
                "data": 18446744073709551615,
                "valid": true
            },
            {
                "description": "beyond uint64 upper boundary",
                "data": 18446744073709551616,
                "valid": true
            }
        ]
    },
    {
        "description": "int32 range checks",
        "schema": {
            "$comment": "on some architectures, some of these values may decode to strings",
            "minimum": -2147483648,
            "maximum": 2147483647
        },
        "tests": [
            {
                "description": "beyond lower boundary",
                "data": -2147483649,
                "valid": false
            },
            {
                "description": "lower boundary",
                "data": -2147483648,
                "valid": true
            },
            {
                "description": "zero",
                "data": 0,
                "valid": true
            },
            {
                "description": "upper boundary",
                "data": 2147483647,
                "valid": true
            },
            {
                "description": "beyond upper boundary",
                "data": 2147483648,
                "valid": false
            }
        ]
    },
    {
        "description": "int64 range checks",
        "schema": {
            "$comment": "on some architectures, some of these values may decode to strings",
            "minimum": -9223372036854775808,
            "maximum": 9223372036854775807
        },
        "tests": [
            {
                "description": "beyond lower boundary",
                "data": -9223372036854775809,
                "valid": false
            },
            {
                "description": "lower boundary",
                "data": -9223372036854775808,
                "valid": true
            },
            {
                "description": "zero",
                "data": 0,
                "valid": true
            },
            {
                "description": "upper boundary",
                "data": 9223372036854775807,
                "valid": true
            },
            {
                "description": "beyond upper boundary",
                "data": 9223372036854775808,
                "valid": false
            }
        ]
    },
    {
        "description": "equality checks",
        "schema": {
            "$comment": "on some architectures, some of these values may json-decode to strings",
            "enum": [
                -9223372036854775809,
                -9223372036854775808,
                -2147483649,
                -2147483648,
                0,
                2147483647,
                2147483648,
                9223372036854775807,
                9223372036854775808
            ]
        },
        "tests": [
            {
                "description": "beyond int64 lower boundary",
                "data": -9223372036854775809,
                "valid": true
            },
            {
                "description": "int64 lower boundary",
                "data": -9223372036854775808,
                "valid": true
            },
            {
                "description": "beyond int32 lower boundary",
                "data": -2147483649,
                "valid": true
            },
            {
                "description": "int32 lower boundary",
                "data": -2147483648,
                "valid": true
            },
            {
                "description": "zero",
                "data": 0,
                "valid": true
            },
            {
                "description": "one",
                "data": 1,
                "valid": false
            },
            {
                "description": "int32 upper boundary",
                "data": 2147483647,
                "valid": true
            },
            {
                "description": "beyond int32 upper boundary",
                "data": 2147483648,
                "valid": true
            },
            {
                "description": "int64 upper boundary",
                "data": 9223372036854775807,
                "valid": true
            },
            {
                "description": "beyond int64 upper boundary",
                "data": 9223372036854775808,
                "valid": true
            }
        ]
    }
]