packages feed

jsonlogic-hs-0.1.0.0: test/community/array/filter.json

[
    "Basic Operations",
    {
        "description": "Filter positive numbers",
        "rule": {
            "filter": [
                {"var": "numbers"},
                {">": [{"var": ""}, 0]}
            ]
        },
        "data": {"numbers": [-2, -1, 0, 1, 2]},
        "result": [1, 2]
    },
    {
        "description": "Filter even numbers",
        "rule": {
            "filter": [
                {"var": "numbers"},
                {"==": [0, {"%": [{"var": ""}, 2]}]}
            ]
        },
        "data": {"numbers": [1, 2, 3, 4, 5, 6]},
        "result": [2, 4, 6]
    },
    "Object Operations",
    {
        "description": "Filter objects by property value",
        "rule": {
            "filter": [
                {"var": "people"},
                {">": [{"var": "age"}, 21]}
            ]
        },
        "data": {
            "people": [
                {"name": "John", "age": 20},
                {"name": "Jane", "age": 25},
                {"name": "Bob", "age": 30}
            ]
        },
        "result": [
            {"name": "Jane", "age": 25},
            {"name": "Bob", "age": 30}
        ]
    },
    {
        "description": "Filter with multiple conditions",
        "rule": {
            "filter": [
                {"var": "items"},
                {"and": [
                    {">": [{"var": "price"}, 10]},
                    {"<": [{"var": "price"}, 50]}
                ]}
            ]
        },
        "data": {
            "items": [
                {"id": 1, "price": 5},
                {"id": 2, "price": 25},
                {"id": 3, "price": 75}
            ]
        },
        "result": [{"id": 2, "price": 25}]
    },
    "Edge Cases",
    {
        "description": "Filter on null array returns empty array",
        "rule": {
            "filter": [
                {"var": "missing"},
                {">": [{"var": ""}, 0]}
            ]
        },
        "data": {},
        "result": []
    },
    {
        "description": "Filter on empty array returns empty array",
        "rule": {
            "filter": [
                {"var": "empty"},
                {"==": [{"var": ""}, 1]}
            ]
        },
        "data": {"empty": []},
        "result": []
    },
    {
        "description": "Filter with null predicate should throw",
        "rule": {
            "filter": [{"var": "numbers"}, null]
        },
        "data": {"numbers": [1, 2, 3]},
        "error": {"type": "Invalid Arguments"}
    },
    {
        "description": "Filter with null array should throw",
        "rule": {
            "filter": [null, {">": [{"var": ""}, 0]}]
        },
        "data": null,
        "error": {"type": "Invalid Arguments"}
    },
    "Complex Predicates",
    {
        "description": "Filter with nested logic",
        "rule": {
            "filter": [
                {"var": "data"},
                {"or": [
                    {"==": [{"var": "type"}, "A"]},
                    {">": [{"var": "value"}, 100]}
                ]}
            ]
        },
        "data": {
            "data": [
                {"type": "A", "value": 50},
                {"type": "B", "value": 150},
                {"type": "C", "value": 75}
            ]
        },
        "result": [
            {"type": "A", "value": 50},
            {"type": "B", "value": 150}
        ]
    },
    {
        "description": "Filter with string operations",
        "rule": {
            "filter": [
                {"var": "words"},
                {"in": ["a", {"var": ""}]}
            ]
        },
        "data": {"words": ["apple", "banana", "cherry"]},
        "result": ["apple", "banana"]
    },
    "Type Coercion",
    {
        "description": "Filter with type coercion",
        "rule": {
            "filter": [
                {"var": "mixed"},
                {"!!": [{"var": ""}]}
            ]
        },
        "data": {"mixed": [0, 1, "", "hello", [], [1]]},
        "result": [1, "hello", [1]]
    },
    "Path Resolution",
    {
        "description": "Filter with deep path access",
        "rule": {
            "filter": [
                {"var": "users"},
                {"var": "settings.active"}
            ]
        },
        "data": {
            "users": [
                {"name": "John", "settings": {"active": true}},
                {"name": "Jane", "settings": {"active": false}},
                {"name": "Bob", "settings": {"active": true}}
            ]
        },
        "result": [
            {"name": "John", "settings": {"active": true}},
            {"name": "Bob", "settings": {"active": true}}
        ]
    }
]