jsonlogic-hs-0.1.0.0: test/community/control/or.json
[
"Basic Checks",
{
"description": "Two true values returns first true",
"rule": { "or": [true, true] },
"data": null,
"result": true
},
{
"description": "false and true returns true",
"rule": { "or": [false, true] },
"data": null,
"result": true
},
{
"description": "true and false returns true",
"rule": { "or": [true, false] },
"data": null,
"result": true
},
{
"description": "Two false values returns last false",
"rule": { "or": [false, false] },
"data": null,
"result": false
},
{
"description": "Empty OR returns false",
"rule": { "or": [] },
"result": false,
"data": null
},
{
"description": "OR with single truthy value returns that value",
"rule": { "or": [1] },
"result": 1,
"data": null
},
{
"description": "OR with single falsy value returns that value",
"rule": { "or": [0] },
"result": 0,
"data": null
},
{
"description": "OR with multiple values returns first truthy value",
"rule": { "or": [false, 0, null, "hello", 1, 2] },
"result": "hello",
"data": null
},
{
"description": "When all values are falsy, the last falsy value should be returned",
"rule": { "or": [false, 0, "", null] },
"result": null,
"data": null
},
{
"description": "OR with a single empty array returns empty array",
"rule": { "or": [[]] },
"data": null,
"result": []
},
{
"description": "OR with a single zero returns zero",
"rule": { "or": [0] },
"data": null,
"result": 0
},
{
"description": "OR with a single empty string returns empty string",
"rule": { "or": [""] },
"data": null,
"result": ""
},
{
"description": "OR with 2 truthy values returns first truthy value",
"rule": { "or": [1, 3] },
"data": null,
"result": 1
},
{
"description": "Empty array then true returns true",
"rule": { "or": [[], true] },
"data": null,
"result": true
},
{
"description": "Zero then true returns true",
"rule": { "or": [0, true] },
"data": null,
"result": true
},
{
"description": "Empty string then true returns true",
"rule": { "or": ["", true] },
"data": null,
"result": true
},
{
"description": "String zero is truthy and returned",
"rule": { "or": ["0", false] },
"data": null,
"result": "0"
},
"Valid Arguments Checks",
{
"description": "OR with non-array arguments should throw",
"rule": { "or": true },
"error": {"type": "Invalid Arguments"},
"data": null
},
"Short Circuiting Checks",
{
"description": "OR will not interpret the second argument if the first is true",
"rule": { "or": [true, {"throw": "Not Lazy"}] },
"data": null,
"result": true
},
{
"description": "OR will not interpret the second argument if the first is truthy",
"rule": { "or": [1, {"throw": "Not Lazy"}] },
"data": null,
"result": 1
},
{
"description": "OR will not interpret the nth argument if any value before it is truthy",
"rule": { "or": [false, 0, null, "hello", {"throw": "Not Lazy"}] },
"data": null,
"result": "hello"
},
"Complex Evaluations",
{
"description": "OR with nested operations evaluates left to right",
"rule": { "or": [{"var": "a"}, {"var": "b"}, {"var": "c"}] },
"data": {"a": false, "b": "yes", "c": "not reached"},
"result": "yes"
},
{
"description": "OR with nested logic",
"rule": { "or": [{"==": [1, 2]}, {"==": [2, 2]}] },
"result": true,
"data": null
},
{
"description": "OR with deeply nested operations",
"rule": { "or": [{"and": [false, true]}, {"and": [true, true]}] },
"result": true,
"data": null
}
]