diff options
| author | s-ol <s+removethis@s-ol.nu> | 2022-01-27 14:14:37 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-02 14:24:49 +0000 |
| commit | ec81cfeeb4797b30da03a631784e7adc86b86a95 (patch) | |
| tree | f619e2d6444242121af48f044f004f6a09e1848d | |
| parent | test logic module (diff) | |
| download | alive-ec81cfeeb4797b30da03a631784e7adc86b86a95.tar.gz alive-ec81cfeeb4797b30da03a631784e7adc86b86a95.zip | |
use base.match.any consistently
| -rw-r--r-- | alv-lib/array-.moon | 19 | ||||
| -rw-r--r-- | alv-lib/osc.moon | 6 | ||||
| -rw-r--r-- | alv-lib/rhythm.moon | 6 | ||||
| -rw-r--r-- | alv-lib/string.moon | 6 | ||||
| -rw-r--r-- | alv-lib/struct-.moon | 11 | ||||
| -rw-r--r-- | alv-lib/time.moon | 6 | ||||
| -rw-r--r-- | alv-lib/vis.moon | 6 | ||||
| -rw-r--r-- | alv/builtins.moon | 25 | ||||
| -rw-r--r-- | spec/match_spec.moon | 4 | ||||
| -rw-r--r-- | spec/pureop_spec.moon | 9 |
10 files changed, 44 insertions, 54 deletions
diff --git a/alv-lib/array-.moon b/alv-lib/array-.moon index aeb6820..68557cd 100644 --- a/alv-lib/array-.moon +++ b/alv-lib/array-.moon @@ -1,10 +1,9 @@ -import Array, Op, PureOp, Builtin, Constant, Error, const, sig, evt, T from require 'alv.base' +import Array, Op, PureOp, Builtin, Constant, Error, const, any, T from require 'alv.base' import Cell from require 'alv.cell' import Tag from require 'alv.tag' builtins = require 'alv.builtins' unpack or= table.unpack -any = sig! / evt! get = Constant.meta meta: @@ -16,7 +15,7 @@ get = Constant.meta `i` has to be a constant expression." value: class extends PureOp - pattern: any + const.num + pattern: any! + const.num type: (inputs) => { array, i } = inputs array\type!\get i.result! @@ -36,7 +35,7 @@ set = Constant.meta `array` and `val` may be a !-stream." value: class extends PureOp - pattern: any + const.num + any + pattern: any! + const.num + any! type: (inputs) => { array, i, val } = inputs type = array\type! @@ -64,7 +63,7 @@ head = Constant.meta examples: { '(head array)' } value: class extends PureOp - pattern: any*1 + pattern: any!*1 type: (inputs) => type = inputs[1]\type! @@ -84,7 +83,7 @@ tail = Constant.meta examples: { '(tail array)' } value: class extends PureOp - pattern: any*1 + pattern: any!*1 type: (inputs) => type = inputs[1]\type! @@ -107,7 +106,7 @@ prepend = Constant.meta This is a pure op, so at most one of `array` and `val` may be a !-stream." value: class extends PureOp - pattern: any + any + pattern: any! + any! type: (inputs) => { array, val } = inputs type = array\type! @@ -139,7 +138,7 @@ necessary. `array` and `val` may be a !-stream." value: class extends PureOp - pattern: any + const.num + any + pattern: any! + const.num + any! type: (inputs) => { array, i, val } = inputs type = array\type! @@ -172,7 +171,7 @@ remove = Constant.meta `i` has to be a constant expression." value: class extends PureOp - pattern: any + const.num + pattern: any! + const.num type: (inputs) => { array, i } = inputs type = array\type! @@ -213,7 +212,7 @@ concat = Constant.meta examples: { '(concat arr1 arr2 [arr3…])' } value: class extends PureOp - pattern: any\rep 2 + pattern: any!\rep 2 type: (inputs) => size = 0 type = inputs[1]\type!.type diff --git a/alv-lib/osc.moon b/alv-lib/osc.moon index cf802b7..a75c22f 100644 --- a/alv-lib/osc.moon +++ b/alv-lib/osc.moon @@ -1,4 +1,4 @@ -import Op, PureOp, Constant, SigStream, Input, T, sig, evt from require 'alv.base' +import Op, PureOp, Constant, SigStream, Input, T, sig, any from require 'alv.base' import new_message, add_item from require 'alv-lib._osc' import dns, udp from require 'socket' @@ -47,9 +47,9 @@ send = Constant.meta This is a pure op, so between the values at most one !-stream input is allowed." value: class extends PureOp - pattern: (evt! / sig!)^0 + pattern: any!^0 - full_pattern = -sig['udp/socket'] + sig.str + (evt! / sig!)^0 + full_pattern = -sig['udp/socket'] + sig.str + any!^0 setup: (inputs, scope) => { socket, path, values } = full_pattern\match inputs super values, scope, { diff --git a/alv-lib/rhythm.moon b/alv-lib/rhythm.moon index 582483f..2b92fdc 100644 --- a/alv-lib/rhythm.moon +++ b/alv-lib/rhythm.moon @@ -1,4 +1,4 @@ -import Constant, Op, Input, T, sig, evt from require 'alv.base' +import Constant, Op, Input, T, sig, evt, any from require 'alv.base' -- slower reference implementation bjorklund = (n, k) -> @@ -46,7 +46,7 @@ When fed a bang! trigger, steps forward to the next step on each trigger. When fed a num~ or num! stream, outputs a bang if the corresponding step is on." value: class extends Op - pattern = (evt.bang / sig.num / evt.num) + sig.num + sig.num + pattern = (evt.bang / any.num) + sig.num + sig.num setup: (inputs) => { trig, n, k } = pattern\match inputs @@ -91,7 +91,7 @@ When fed a bang! trigger, steps forward to the next step on each trigger. When fed a num~ or num! stream, outputs a bang if the corresponding step is on." value: class extends Op - pattern = (evt.bang / sig.num / evt.num) + sig.bool*0 + pattern = (evt.bang / any.num) + sig.bool*0 setup: (inputs) => { trig, steps } = pattern\match inputs diff --git a/alv-lib/string.moon b/alv-lib/string.moon index c43dd6a..7508e8d 100644 --- a/alv-lib/string.moon +++ b/alv-lib/string.moon @@ -1,6 +1,4 @@ -import PureOp, Constant, Input, T, sig, evt from require 'alv.base' - -any = sig! / evt! +import PureOp, Constant, Input, T, any from require 'alv.base' str = Constant.meta meta: @@ -8,7 +6,7 @@ str = Constant.meta summary: "Concatenate/stringify values." examples: { '(.. v1 [v2…])', '(str v1 [v2…])' } value: class extends PureOp - pattern: any\rep 1, nil + pattern: any!\rep 1, nil type: T.str tick: => @out\set table.concat [tostring i! for i in *@inputs] diff --git a/alv-lib/struct-.moon b/alv-lib/struct-.moon index 94bd82f..b064e81 100644 --- a/alv-lib/struct-.moon +++ b/alv-lib/struct-.moon @@ -1,6 +1,5 @@ -import Struct, Op, PureOp, Constant, Error, const, sig, evt from require 'alv.base' +import Struct, Op, PureOp, Constant, Error, const, any from require 'alv.base' -any = sig! / evt! key_type = const.str / const.sym get = Constant.meta @@ -13,7 +12,7 @@ get = Constant.meta `key` has to be a constant expression." value: class extends PureOp - pattern: any + key_type + pattern: any! + key_type type: (inputs) => { struct, key } = inputs struct\type!\get key.result! @@ -33,7 +32,7 @@ set = Constant.meta `struct` and `val` may be a !-stream." value: class extends PureOp - pattern: any + key_type + any + pattern: any! + key_type + any! type: (inputs) => { struct, key, val } = inputs type = struct\type! @@ -65,7 +64,7 @@ insert = Constant.meta `struct` and `val` may be a !-stream." value: class extends PureOp - pattern: any + key_type + any + pattern: any! + key_type + any! type: (inputs) => { struct, key, val } = inputs type = struct\type! @@ -98,7 +97,7 @@ remove = Constant.meta `key` has to be a constant expression." value: class extends PureOp - pattern: any + key_type + pattern: any! + key_type type: (inputs) => { struct, key } = inputs type = struct\type! diff --git a/alv-lib/time.moon b/alv-lib/time.moon index a39849a..6852f9e 100644 --- a/alv-lib/time.moon +++ b/alv-lib/time.moon @@ -1,4 +1,4 @@ -import Constant, Error, Op, Input, T, sig, evt from require 'alv.base' +import Constant, Error, Op, Input, T, sig, evt, any from require 'alv.base' import RTNode from require 'alv' import monotime from require 'system' @@ -348,7 +348,7 @@ Creates smooth transitions when `value` changes. super ... @out = T.num\mk_sig! - pattern = -evt.clock + sig.num + (sig.num / evt.num) + pattern = -evt.clock + sig.num + any.num setup: (inputs, scope) => { clock, rate, value } = pattern\match inputs @@ -384,7 +384,7 @@ Delays incoming `evt`s by `delay`. super ... @state = {} - pattern = -evt.clock + (sig.num / evt.num) + (sig! / evt!) + pattern = -evt.clock + any.num + any! setup: (inputs, scope) => { clock, delay, evt } = pattern\match inputs diff --git a/alv-lib/vis.moon b/alv-lib/vis.moon index 9429ef2..941f9e4 100644 --- a/alv-lib/vis.moon +++ b/alv-lib/vis.moon @@ -1,4 +1,4 @@ -import Constant, Op, T, Array, Input, sig, evt from require 'alv.base' +import Constant, Op, T, Array, Input, sig, any from require 'alv.base' bar = Constant.meta meta: @@ -11,7 +11,7 @@ Visualizes `val` as a bar with range `min, max`. `min` defaults to `0` and `max` defaults to `1`." value: class extends Op - pattern = (sig.num / evt.num) + -sig.num + -sig.num + pattern = any.num + -sig.num + -sig.num setup: (inputs, scope) => { val, min, max } = pattern\match inputs if not max @@ -52,7 +52,7 @@ Visualizes `val` as an RGB(A) color with each component in range `0 - range`. value: class extends Op a3 = (Array 3, T.num) a4 = (Array 4, T.num) - color = (sig a3) / (sig a4) / (evt a3) / (evt a4) + color = (any a3) / (any a4) pattern = color + -sig.num setup: (inputs, scope) => { val, max } = pattern\match inputs diff --git a/alv/builtins.moon b/alv/builtins.moon index acb396e..c5f68a2 100644 --- a/alv/builtins.moon +++ b/alv/builtins.moon @@ -5,7 +5,7 @@ -- documentation. -- -- @module builtins -import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, Struct, Array +import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, any, Struct, Array from require 'alv.base' import Constant from require 'alv.result' import Error from require 'alv.error' @@ -334,8 +334,7 @@ switch_ = Constant.meta `true` and `false` respectively. This version takes at most two argumetns." value: class extends Op - val_or_evt = (sig! / evt!)! - pattern = (sig.num / sig.bool / evt.num / evt.bool / evt.bang) + val_or_evt*0 + pattern = (sig.num / sig.bool / evt.num / evt.bool / evt.bang) + any!!*0 setup: (inputs) => { i, values } = pattern\match inputs @@ -459,7 +458,7 @@ Since ~-streams cannot be emtpy, specifying an `initial` value is necessary." value: class extends Op setup: (inputs) => - { event, initial } = (evt! + sig!)\match inputs + { event, initial } = any!\match inputs assert event\type! == initial\type!, Error 'argument', "~ arguments have to be of the same type" @@ -482,7 +481,7 @@ to_evt = Constant.meta - if `trig` is given, samples `sig` as a new event when `trig` arrives." value: class extends Op - pattern = (sig! + evt.bang) / (sig! / evt!)\rep(1,1) + pattern = (sig! + evt.bang) / any!\rep(1,1) setup: (inputs) => { sig_, trig } = pattern\match inputs if trig @@ -507,14 +506,13 @@ merge = Constant.meta summary: "Merge !-streams." examples: { '(merge! evt1 evt2 [evt3…])' } description: " -Reenters the innermost `(loop)` from the top, with `k1` bound to `nv1`, `k2` -bound to `nv2`… +Merges two or more !-streams of the same type. +Whenever any of the input events fires, the output fires the same value. -`(recur nv1 [nv2…])` is equivalent to `(*recur* nv1 [nv2…])`." +In case of collisions, the event that comes first in the argument list wins." value: class extends Op - val_or_evt = (sig! / evt!)! - pattern = val_or_evt\rep 2 + pattern = any!!\rep 2 setup: (inputs) => values = pattern\match inputs super [Input.hot v for v in *values] @@ -537,10 +535,8 @@ array = Constant.meta This is a pure op, so at most one !-stream input is allowed." value: do - any = sig! / evt! - class extends PureOp - pattern: any!*0 + pattern: any!!*0 type: (args) => Array #args, args[1]\type! @@ -560,8 +556,7 @@ This is a pure op, so at most one !-stream input is allowed." value: do key = const.str / const.sym - val = sig! / evt! - pair = (key + val)\named 'key', 'val' + pair = (key + any!)\named 'key', 'val' class extends PureOp pattern: pair*0 diff --git a/spec/match_spec.moon b/spec/match_spec.moon index 0f06c64..b9d5ef6 100644 --- a/spec/match_spec.moon +++ b/spec/match_spec.moon @@ -1,4 +1,4 @@ -import const, sig, evt from require 'alv.base.match' +import const, sig, evt, any from require 'alv.base.match' import Op, Input from require 'alv.base' import RTNode, T, Error from require 'alv' @@ -167,7 +167,7 @@ describe 'choice', -> assert.has.error -> same\match { bool, bool } it 'makes inner types recall', -> - same = (sig! / evt!)! + same = any!! same = same + same assert.is.same { str, str }, same\match { str, str } assert.is.same { num, num }, same\match { num, num } diff --git a/spec/pureop_spec.moon b/spec/pureop_spec.moon index d2a4a89..a8fa823 100644 --- a/spec/pureop_spec.moon +++ b/spec/pureop_spec.moon @@ -1,12 +1,12 @@ import do_setup, do_teardown, invoke_op from require 'spec.test_setup' -import PureOp, Input, T, sig, evt from require 'alv.base' +import PureOp, Input, T, sig, any from require 'alv.base' import RTNode from require 'alv' setup do_setup teardown do_teardown class TestPureOp extends PureOp - pattern: (sig.num / sig.str / evt.num)*3 + pattern: (any.num / sig.str)*3 type: T.num tick: => @out\set 1 @@ -81,9 +81,8 @@ describe 'PureOp', -> assert.has.error -> invoke_op TestPureOp, { (literal a), (literal b) } it 'supports nested input patterns', -> - num = sig.num / evt.num class NestedInputOp extends PureOp - pattern: (num + sig.str)\named('a', 'b')\rep 2, 2 + pattern: (any.num + sig.str)\named('a', 'b')\rep 2, 2 type: T.num tick: => @out\set 1 @@ -106,7 +105,7 @@ describe 'PureOp', -> it 'supports dynamically generating the output type', -> class DynamicOp extends PureOp - pattern: sig.num + (sig! / evt!) + pattern: sig.num + any! type: (inputs) => inputs[2]\type! tick: => @out\set @inputs[2]! typ = spy.on DynamicOp, 'type' |
