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}}
]
}
]