diff options
| author | s-ol <s+removethis@s-ol.nu> | 2022-10-20 11:20:46 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-02 14:24:49 +0000 |
| commit | 56bcabd974c0c0e34fb76d653e927668aaccbdb0 (patch) | |
| tree | e8458a58b4edf72e6a7e59edccdaaaf9ed7198ab /alv-lib | |
| parent | builtins: test def, use, export, export* (diff) | |
| download | alive-56bcabd974c0c0e34fb76d653e927668aaccbdb0.tar.gz alive-56bcabd974c0c0e34fb76d653e927668aaccbdb0.zip | |
lib: add <,<=,>,>= to logic, add tests
Diffstat (limited to 'alv-lib')
| -rw-r--r-- | alv-lib/logic.moon | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/alv-lib/logic.moon b/alv-lib/logic.moon index d66f53a..b29c4ba 100644 --- a/alv-lib/logic.moon +++ b/alv-lib/logic.moon @@ -26,6 +26,18 @@ class ReduceOp extends PureOp @out\set accum +class CompareOp extends PureOp + pattern: any.num\rep 2, nil + type: T.bool + + tick: => + args = @unwrap_all! + accum = true + for i = 1, #args - 1 + accum = accum and @.fn args[i], args[i+1] + + @out\set accum + eq = Constant.meta meta: name: 'eq' @@ -121,6 +133,38 @@ bool = Constant.meta type: T.bool tick: => @out\set tobool @inputs[1]! +asc = Constant.meta + meta: + name: 'asc?' + summary: "Check if values are in ascending order." + examples: { '(asc? a b [c…])', '(< a b [c…])' } + value: class extends CompareOp + fn: (a, b) -> a < b + +lte = Constant.meta + meta: + name: '<=' + summary: "Check if values are in ascending order." + examples: { '(<= a b [c…])' } + value: class extends CompareOp + fn: (a, b) -> a <= b + +desc = Constant.meta + meta: + name: 'desc?' + summary: "Check if values are in descending order." + examples: { '(desc? a b [c…])', '(> a b [c…])' } + value: class extends CompareOp + fn: (a, b) -> a > b + +gte = Constant.meta + meta: + name: '>=' + summary: "Check if values are in descending order." + examples: { '(>= a b [c…])' } + value: class extends CompareOp + fn: (a, b) -> a >= b + Constant.meta meta: name: 'logic' @@ -132,4 +176,8 @@ Constant.meta and: and_ or: or_ not: not_ + + 'asc?': asc, '<': asc, '<=': lte + 'desc?': desc, '>': desc, '>=': gte + :bool |
