packages feed

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

[
    "Basic Operations",
    {
        "description": "Reduce array with sum",
        "rule": {
            "reduce": [
                {"var": "numbers"},
                {"+": [{"var": "current"}, {"var": "accumulator"}]},
                0
            ]
        },
        "data": {"numbers": [1, 2, 3, 4]},
        "result": 10
    },
    {
        "description": "Reduce array with multiplication",
        "rule": {
            "reduce": [
                {"var": "numbers"},
                {"*": [{"var": "current"}, {"var": "accumulator"}]},
                1
            ]
        },
        "data": {"numbers": [1, 2, 3, 4]},
        "result": 24
    },
    "Object Operations",
    {
        "description": "Reduce objects to sum of specific field",
        "rule": {
            "reduce": [
                {"var": "items"},
                {"+": [{"var": "current.price"}, {"var": "accumulator"}]},
                0
            ]
        },
        "data": {
            "items": [
                {"id": 1, "price": 10},
                {"id": 2, "price": 20},
                {"id": 3, "price": 30}
            ]
        },
        "result": 60
    },
    {
        "description": "Reduce to create aggregated object",
        "rule": {
            "reduce": [
                {"var": "transactions"},
                {"+": [{"var": "accumulator"}, {"var": "current.amount"}]},
                0
            ]
        },
        "data": {
            "transactions": [
                {"type": "credit", "amount": 100},
                {"type": "debit", "amount": -50},
                {"type": "credit", "amount": 75}
            ]
        },
        "result": 125
    },
    "Edge Cases",
    {
        "description": "Reduce empty array returns initial value",
        "rule": {
            "reduce": [
                {"var": "empty"},
                {"+": [{"var": "current"}, {"var": "accumulator"}]},
                0
            ]
        },
        "data": {"empty": []},
        "result": 0
    },
    {
        "description": "Reduce null array returns initial value",
        "rule": {
            "reduce": [
                {"var": "missing"},
                {"+": [{"var": "current"}, {"var": "accumulator"}]},
                42
            ]
        },
        "data": {},
        "result": 42
    },
    {
        "description": "Initial value is optional",
        "rule": {
            "reduce": [
                {"var": "numbers"},
                {"+": [{"var": "current"}, {"var": "accumulator"}]}
            ]
        },
        "data": {"numbers": [1, 2, 3]},
        "result": 6
    },
    "Complex Operations",
    {
        "description": "Reduce with string concatenation",
        "rule": {
            "reduce": [
                {"var": "words"},
                {"cat": [{"var": "accumulator"}, " ", {"var": "current"}]},
                ""
            ]
        },
        "data": {"words": ["Hello", "World", "!"]},
        "result": " Hello World !"
    },
    {
        "description": "Reduce with conditional logic",
        "rule": {
            "reduce": [
                {"var": "numbers"},
                {"if": [
                    {">": [{"var": "current"}, 0]},
                    {"+": [{"var": "accumulator"}, {"var": "current"}]},
                    {"var": "accumulator"}
                ]},
                0
            ]
        },
        "data": {"numbers": [-1, 2, -3, 4]},
        "result": 6
    }
]