packages feed

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