diff options
| author | s-ol <s-ol@users.noreply.github.com> | 2020-05-27 11:09:15 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2025-03-02 14:24:49 +0000 |
| commit | 7c060bf6524ce63e34fe27a594851c295bed1231 (patch) | |
| tree | 59b98be32a06dd2371af876504f0a46f106b434b | |
| parent | allow > and < in symbol names (diff) | |
| download | alive-7c060bf6524ce63e34fe27a594851c295bed1231.tar.gz alive-7c060bf6524ce63e34fe27a594851c295bed1231.zip | |
rename base.match.val → base.match.sig
| -rw-r--r-- | alv-lib/logic.moon | 4 | ||||
| -rw-r--r-- | alv-lib/math.moon | 4 | ||||
| -rw-r--r-- | alv-lib/midi.moon | 8 | ||||
| -rw-r--r-- | alv-lib/midi/core.moon | 8 | ||||
| -rw-r--r-- | alv-lib/midi/launchctl.moon | 10 | ||||
| -rw-r--r-- | alv-lib/osc.moon | 8 | ||||
| -rw-r--r-- | alv-lib/pilot.moon | 6 | ||||
| -rw-r--r-- | alv-lib/random.moon | 4 | ||||
| -rw-r--r-- | alv-lib/rhythm.moon | 6 | ||||
| -rw-r--r-- | alv-lib/sc.moon | 6 | ||||
| -rw-r--r-- | alv-lib/string.moon | 4 | ||||
| -rw-r--r-- | alv-lib/time.moon | 18 | ||||
| -rw-r--r-- | alv-lib/util.moon | 8 | ||||
| -rw-r--r-- | alv/base/init.moon | 6 | ||||
| -rw-r--r-- | alv/base/match.moon | 20 | ||||
| -rw-r--r-- | alv/builtins.moon | 14 | ||||
| -rw-r--r-- | docs/internals/extensions.md | 6 | ||||
| -rw-r--r-- | spec/match_spec.moon | 86 | ||||
| -rw-r--r-- | spec/pureop_spec.moon | 10 |
19 files changed, 118 insertions, 118 deletions
diff --git a/alv-lib/logic.moon b/alv-lib/logic.moon index 5ca4e68..1d853dc 100644 --- a/alv-lib/logic.moon +++ b/alv-lib/logic.moon @@ -1,4 +1,4 @@ -import PureOp, Constant, T, val, evt from require 'alv.base' +import PureOp, Constant, T, sig, evt from require 'alv.base' all_same = (first, list) -> for v in *list @@ -14,7 +14,7 @@ tobool = (val) -> else true -any = val! / evt! +any = sig! / evt! class ReduceOp extends PureOp pattern: any\rep 2, nil diff --git a/alv-lib/math.moon b/alv-lib/math.moon index b51718a..8475742 100644 --- a/alv-lib/math.moon +++ b/alv-lib/math.moon @@ -1,7 +1,7 @@ -import PureOp, Constant, T, val, evt from require 'alv.base' +import PureOp, Constant, T, sig, evt from require 'alv.base' unpack or= table.unpack -num = val.num / evt.num +num = sig.num / evt.num class ReduceOp extends PureOp pattern: num\rep 2, nil diff --git a/alv-lib/midi.moon b/alv-lib/midi.moon index 503b91c..fc28f2e 100644 --- a/alv-lib/midi.moon +++ b/alv-lib/midi.moon @@ -1,4 +1,4 @@ -import Constant, Op, Input, T, val, evt from require 'alv.base' +import Constant, Op, Input, T, sig, evt from require 'alv.base' import input, output, inout, apply_range from require 'alv-lib.midi.core' gate = Constant.meta @@ -8,7 +8,7 @@ gate = Constant.meta examples: { '(midi/gate [port] note [chan])' } value: class extends Op - pattern = -evt['midi/port'] + val.num -val.num + pattern = -evt['midi/port'] + sig.num -sig.num setup: (inputs, scope) => @out or= T.bool\mk_sig! { port, note, chan } = pattern\match inputs @@ -37,7 +37,7 @@ trig = Constant.meta examples: { '(midi/trig [port] note [chan])' } value: class extends Op - pattern = -evt['midi/port'] + val.num -val.num + pattern = -evt['midi/port'] + sig.num -sig.num setup: (inputs, scope) => @out or= T.bang\mk_evt! { port, note, chan } = pattern\match inputs @@ -69,7 +69,7 @@ cc = Constant.meta - (num) [ 0 - num[" value: class extends Op - pattern = -evt['midi/port'] + val.num + -val.num + -val.num + pattern = -evt['midi/port'] + sig.num + -sig.num + -sig.num setup: (inputs, scope) => { port, cc, chan, range } = pattern\match inputs super diff --git a/alv-lib/midi/core.moon b/alv-lib/midi/core.moon index 71d1e9f..15ae3d6 100644 --- a/alv-lib/midi/core.moon +++ b/alv-lib/midi/core.moon @@ -1,4 +1,4 @@ -import Constant, IOStream, Op, Input, T, Error, val from require 'alv.base' +import Constant, IOStream, Op, Input, T, Error, sig from require 'alv.base' import RtMidiIn, RtMidiOut, RtMidi from require 'luartmidi' bit = do @@ -71,7 +71,7 @@ input = Constant.meta value: class extends PortOp setup: (inputs) => - name = val.str\match inputs + name = sig.str\match inputs super inp: Input.hot name output = Constant.meta @@ -82,7 +82,7 @@ output = Constant.meta value: class extends PortOp setup: (inputs) => - name = val.str\match inputs + name = sig.str\match inputs super out: Input.hot name inout = Constant.meta @@ -93,7 +93,7 @@ inout = Constant.meta value: class extends PortOp setup: (inputs) => - { inp, out } = (val.str + val.str)\match inputs + { inp, out } = (sig.str + sig.str)\match inputs super inp: Input.hot inp out: Input.hot out diff --git a/alv-lib/midi/launchctl.moon b/alv-lib/midi/launchctl.moon index f3c0295..69d96ff 100644 --- a/alv-lib/midi/launchctl.moon +++ b/alv-lib/midi/launchctl.moon @@ -1,4 +1,4 @@ -import Constant, Op, Input, T, val, evt from require 'alv.base' +import Constant, Op, Input, T, sig, evt from require 'alv.base' import apply_range, bit from require 'alv-lib.midi.core' import bor, lshift from bit @@ -22,8 +22,8 @@ range can be one of: - (num) [ 0 - num[" value: class extends Op - num = val.num - pattern = -evt['midi/port'] + num + num + num + -num + -(val.str + num) + num = sig.num + pattern = -evt['midi/port'] + num + num + num + -num + -(sig.str + num) setup: (inputs, scope) => { port, i, start, chan, steps, range } = pattern\match inputs @@ -68,7 +68,7 @@ Send `true` or `false` for the `i`-th note-button (MIDI-notes starting from `start`). `steps` defaults to 8." value: class extends Op - pattern = -evt['midi/port'] + val.num + val.num + val.num + -val.num + pattern = -evt['midi/port'] + sig.num + sig.num + sig.num + -sig.num setup: (inputs, scope) => @out or= T.bool\mk_sig! @state or= {} @@ -130,7 +130,7 @@ Send bangs for the `i`-th note-button (MIDI-notes starting from `start`). `steps` defaults to 8." value: class extends Op - pattern = -evt['midi/port'] + val.num + val.num + val.num + -val.num + pattern = -evt['midi/port'] + sig.num + sig.num + sig.num + -sig.num setup: (inputs, scope) => @out or= T.bang\mk_evt! @state or= {} diff --git a/alv-lib/osc.moon b/alv-lib/osc.moon index 05ac357..ff58c94 100644 --- a/alv-lib/osc.moon +++ b/alv-lib/osc.moon @@ -1,4 +1,4 @@ -import Op, Constant, SigStream, Input, T, val, evt from require 'alv.base' +import Op, Constant, SigStream, Input, T, sig, evt from require 'alv.base' import pack from require 'osc' import dns, udp from require 'socket' @@ -11,7 +11,7 @@ connect = Constant.meta examples: { '(osc/connect host port)' } value: class extends Op - pattern = val.str + val.num + pattern = sig.str + sig.num setup: (inputs) => @out or= SigStream T['udp/socket'] { host, port } = pattern\match inputs @@ -38,7 +38,7 @@ send = Constant.meta - `path` is the OSC path to send the message to. It should be a string-value. - `evt` is the argument to send. It should be an event stream." value: class extends Op - pattern = -val['udp/socket'] + val.str + evt! + pattern = -sig['udp/socket'] + sig.str + evt! setup: (inputs, scope) => { socket, path, value } = pattern\match inputs super @@ -67,7 +67,7 @@ of the arguments change. - `val` is the value to Synchronize. It should be a value stream." value: class extends Op - pattern = -val['udp/socket'] + val.str + val! + pattern = -sig['udp/socket'] + sig.str + sig! setup: (inputs, scope) => { socket, path, value } = pattern\match inputs super diff --git a/alv-lib/pilot.moon b/alv-lib/pilot.moon index fb68121..1f14c73 100644 --- a/alv-lib/pilot.moon +++ b/alv-lib/pilot.moon @@ -1,4 +1,4 @@ -import Op, Constant, Input, val, evt from require 'alv.base' +import Op, Constant, Input, sig, evt from require 'alv.base' import udp from require 'socket' local conn @@ -20,7 +20,7 @@ send = (...) -> conn or= udp! conn\sendto str, '127.0.0.1', 49161 -arg = val.num / val.str +arg = sig.num / sig.str play = Constant.meta meta: @@ -69,7 +69,7 @@ effect = Constant.meta description: "`effect` should be one of 'DIS', 'CHO', 'REV' or 'FEE'" value: class extends Op - pattern = val.str + arg + arg + pattern = sig.str + arg + arg setup: (inputs) => { which, a, b } = pattern\match inputs super { diff --git a/alv-lib/random.moon b/alv-lib/random.moon index a2e4c60..8092f4f 100644 --- a/alv-lib/random.moon +++ b/alv-lib/random.moon @@ -1,4 +1,4 @@ -import Constant, Error, Op, Input, T, Array, val, evt from require 'alv.base' +import Constant, Error, Op, Input, T, Array, sig, evt from require 'alv.base' apply_range = (range, val) -> if range\type! == T.str @@ -22,7 +22,7 @@ range can be one of: - 'deg' [ 0 - 360[ - (num) [ 0 - num[" -pattern = -evt.bang + -(val.num / val.str) +pattern = -evt.bang + -(sig.num / sig.str) num = Constant.meta meta: diff --git a/alv-lib/rhythm.moon b/alv-lib/rhythm.moon index d4d4e6c..19dbdeb 100644 --- a/alv-lib/rhythm.moon +++ b/alv-lib/rhythm.moon @@ -1,4 +1,4 @@ -import Constant, Op, Input, T, val, evt from require 'alv.base' +import Constant, Op, Input, T, sig, evt 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 / val.num / evt.num) + val.num + val.num + pattern = (evt.bang / sig.num / evt.num) + sig.num + sig.num setup: (inputs) => { trig, n, k } = pattern\match inputs @@ -89,7 +89,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 / val.num / evt.num) + val.bool*0 + pattern = (evt.bang / sig.num / evt.num) + sig.bool*0 setup: (inputs) => { trig, steps } = pattern\match inputs diff --git a/alv-lib/sc.moon b/alv-lib/sc.moon index 7e4c711..f4aac65 100644 --- a/alv-lib/sc.moon +++ b/alv-lib/sc.moon @@ -1,4 +1,4 @@ -import Op, Constant, Input, val, evt from require 'alv.base' +import Op, Constant, Input, sig, evt from require 'alv.base' import pack from require 'osc' import dns, udp from require 'socket' @@ -18,7 +18,7 @@ Plays the synth `synth` on the `udp/socket` `socket` whenever `trig` is live. - `trig` is the trigger signal. It should be a stream of bang-events. - `param` is the name of a synthdef parameter. It should be a string-value." value: class extends Op - pattern = -val['udp/socket'] + val.str + evt.bang + (val.str + val.num)\rep 0 + pattern = -sig['udp/socket'] + sig.str + evt.bang + (sig.str + sig.num)\rep 0 setup: (inputs, scope) => { socket, synth, trig, ctrls } = pattern\match inputs @@ -55,7 +55,7 @@ Plays the synth `synth` on the `udp/socket` `socket` whenever any `evt` is live. streams. Incoming events will cause a note to be played, while value changes will not." value: class extends Op - pattern = -val['udp/socket'] + val.str + (val.str + (val.num / evt.num))\rep 0 + pattern = -sig['udp/socket'] + sig.str + (sig.str + (sig.num / evt.num))\rep 0 setup: (inputs, scope) => { socket, synth, trig, ctrls } = pattern\match inputs diff --git a/alv-lib/string.moon b/alv-lib/string.moon index 24a2a1b..37810a4 100644 --- a/alv-lib/string.moon +++ b/alv-lib/string.moon @@ -1,6 +1,6 @@ -import PureOp, Constant, Input, T, val, evt from require 'alv.base' +import PureOp, Constant, Input, T, sig, evt from require 'alv.base' -any = val! / evt! +any = sig! / evt! str = Constant.meta meta: diff --git a/alv-lib/time.moon b/alv-lib/time.moon index c79c430..09cc068 100644 --- a/alv-lib/time.moon +++ b/alv-lib/time.moon @@ -1,4 +1,4 @@ -import Constant, EvtStream, IOStream, Error, Op, Input, T, val, evt +import Constant, EvtStream, IOStream, Error, Op, Input, T, sig, evt from require 'alv.base' import monotime from require 'system' @@ -38,7 +38,7 @@ frame rate. @out or= Clock! setup: (inputs) => - fps = (-val.num)\match inputs + fps = (-sig.num)\match inputs super fps: Input.hot fps or Constant.num 60 @out.frametime = 1 / @inputs.fps! @@ -60,7 +60,7 @@ scale_time = Constant.meta super ... @out or= T.clock\mk_evt! - pattern = -evt.clock + val.num + -val.str + pattern = -evt.clock + sig.num + -sig.str setup: (inputs, scope) => { clock, scale } = pattern\match inputs super @@ -92,7 +92,7 @@ lfo = Constant.meta @out or= T.num\mk_sig! default_wave = Constant.str 'sin' - pattern = -evt.clock + val.num + -val.str + pattern = -evt.clock + sig.num + -sig.str setup: (inputs, scope) => { clock, freq, wave } = pattern\match inputs super @@ -128,7 +128,7 @@ ramp = Constant.meta @state or= 0 @out or= T.num\mk_sig! - pattern = -evt.clock + val.num + -val.num + pattern = -evt.clock + sig.num + -sig.num setup: (inputs, scope) => { clock, period, max } = pattern\match inputs super @@ -163,7 +163,7 @@ tick = Constant.meta @state or= { phase: 0, count: 0 } @out or= T.num\mk_sig @state.count - pattern = -evt.clock + val.num + pattern = -evt.clock + sig.num setup: (inputs, scope) => { clock, period } = pattern\match inputs super @@ -195,7 +195,7 @@ every = Constant.meta super ... @state or= 0 - pattern = -evt.clock + val.num + -val! + pattern = -evt.clock + sig.num + -sig! setup: (inputs, scope) => { clock, period, evt } = pattern\match inputs super @@ -229,8 +229,8 @@ Emits `evt1`, `evt2`, … as events with delays `delay0`, `delay1`, … in betwe super ... @state or= { i: 1, t: 0 } - pair = (val! + val.num)\named('value', 'delay') - pattern = -evt.clock + val.num + pair*0 + pair = (sig! + sig.num)\named('value', 'delay') + pattern = -evt.clock + sig.num + pair*0 inputify = (step) -> { diff --git a/alv-lib/util.moon b/alv-lib/util.moon index 350c087..a2142fa 100644 --- a/alv-lib/util.moon +++ b/alv-lib/util.moon @@ -1,4 +1,4 @@ -import Constant, Op, Input, T, val, evt from require 'alv.base' +import Constant, Op, Input, T, sig, evt from require 'alv.base' all_same = (list) -> for v in *list[2,] @@ -19,8 +19,8 @@ switch_ = Constant.meta (indexed starting from 0) is reproduced." value: class extends Op - val_or_evt = (val! / evt!)! - pattern = (val.num / val.bool) + val_or_evt*0 + val_or_evt = (sig! / evt!)! + pattern = (sig.num / sig.bool) + val_or_evt*0 setup: (inputs) => { i, values } = pattern\match inputs @@ -55,7 +55,7 @@ edge = Constant.meta value: class extends Op setup: (inputs) => @out or= T.bang\mk_evt! - value = val.bool\match inputs + value = sig.bool\match inputs super value: Input.hot value tick: => diff --git a/alv/base/init.moon b/alv/base/init.moon index 65730a3..586a6bd 100644 --- a/alv/base/init.moon +++ b/alv/base/init.moon @@ -11,7 +11,7 @@ -- @see FnDef -- @see Input -- @see base.match.const --- @see base.match.val +-- @see base.match.sig -- @see base.match.evt -- @see Constant -- @see SigStream @@ -29,7 +29,7 @@ import PureOp from require 'alv.base.pureop' import Builtin from require 'alv.base.builtin' import FnDef from require 'alv.base.fndef' import Input from require 'alv.base.input' -import const, val, evt from require 'alv.base.match' +import const, sig, evt from require 'alv.base.match' import Constant, SigStream, EvtStream, IOStream from require 'alv.result' import T, Primitive, Array, Struct from require 'alv.type' import RTNode from require 'alv.rtnode' @@ -40,7 +40,7 @@ import Error from require 'alv.error' :Builtin :FnDef :Input - :const, :val, :evt + :const, :sig, :evt -- redundant exports, to keep anything an extension might need in one import diff --git a/alv/base/match.moon b/alv/base/match.moon index 65f53b1..4653107 100644 --- a/alv/base/match.moon +++ b/alv/base/match.moon @@ -9,9 +9,9 @@ -- `Repeat`, `Sequence`, `Choice`, and `Optional`. They can be used directly, -- but there is also a number of shorthands for assembling patterns quickly: -- --- - `const()`, `val()` and `evt()`: Shorthands for `Type('='), Type('~'), Type('!')` +-- - `const()`, `sig()` and `evt()`: Shorthands for `Type('='), Type('~'), Type('!')` -- - `const.sym`: Shorthand for `Type('=', T.sym)` --- - `val.num`: Shorthand for `Type('~', T.num)` +-- - `sig.num`: Shorthand for `Type('~', T.num)` -- - `evt.str`: Shorthand for `Type('!', T.str)` -- - `pat * 2`: Shorthand for `Repeat(pat, 1, 2)` (1-4 times `pat`) -- - `pat * 0`: Shorthand for `Repeat(pat, 1, nil)` (1-* times `pat`) @@ -29,7 +29,7 @@ -- Recalling patterns will memorize the first RTNode they match, and -- only match further RTNodes of the same type. For example -- --- arg = (val.num / val.str)! +-- arg = (sig.num / sig.str)! -- pattern = arg + arg -- -- ...will match either two numbers or two strings, but not one number and one @@ -39,7 +39,7 @@ -- sequence of keys that are used instead of integers when constructing the -- capture table: -- --- pattern = (val.str + val.num):named('key', 'value') +-- pattern = (sig.str + sig.num):named('key', 'value') -- pattern:match(...) -- -- returns { {key='a', value=1}, {key='b', value=2}, ...} -- @@ -282,12 +282,12 @@ const = setmetatable {}, { -- Call or index with a string to obtain a `Type` instance. -- Call to obtain a wildcard pattern. -- --- val.str, val.num --- val['vec3'], val(T.vec3) --- val() +-- sig.str, sig.num +-- sig['vec3'], sig(T.vec3) +-- sig() -- --- @table val -val = setmetatable {}, { +-- @table sig +sig = setmetatable {}, { __index: (key) => with v = Type '~', T[key] @[key] = v @@ -315,5 +315,5 @@ evt = setmetatable {}, { { :Type, :Repeat, :Sequence, :Choice, :Optional - :const, :val, :evt + :const, :sig, :evt } diff --git a/alv/builtins.moon b/alv/builtins.moon index 0d88ade..5be6846 100644 --- a/alv/builtins.moon +++ b/alv/builtins.moon @@ -5,7 +5,7 @@ -- documentation. -- -- @module builtins -import Builtin, Op, PureOp, T, FnDef, Input, const, val, evt, Struct, Array +import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, Struct, Array from require 'alv.base' import Constant from require 'alv.result' import Error from require 'alv.error' @@ -329,7 +329,7 @@ print_ = Constant.meta value: class extends Op setup: (inputs) => - value = (val.str / evt.str)\match inputs + value = (sig.str / evt.str)\match inputs super value: Input.hot value tick: => @@ -361,7 +361,7 @@ Casts !-stream to ~-stream by always reproducing the last received value. Since ~-streams cannot be emtpy, specifying an `initial` value is necessary." value: class extends Op setup: (inputs) => - { event, initial } = (evt! + val!)\match inputs + { event, initial } = (evt! + sig!)\match inputs assert event\type! == initial\type!, Error 'argument', "~ arguments have to be of the same type" @@ -383,7 +383,7 @@ to_evt = Constant.meta - if `val` is a !-stream, emits a bang for each incoming event. - if `trig` is given, samples `sig` as a new event when `trig` arrives." value: class extends Op - pattern = (val! + evt.bang) / (val! / evt!)\rep(1,1) + pattern = (sig! + evt.bang) / (sig! / evt!)\rep(1,1) setup: (inputs) => { sig, trig } = pattern\match inputs if trig @@ -409,7 +409,7 @@ array = Constant.meta description: "Produces an array of values." value: do - any = val! / evt! + any = sig! / evt! class extends PureOp pattern: any!*0 @@ -428,7 +428,7 @@ struct = Constant.meta value: do key = const.str / const.sym - val = val! / evt! + val = sig! / evt! pair = (key + val)\named 'key', 'val' class extends PureOp @@ -447,7 +447,7 @@ get = Constant.meta examples: { '(get val key [key2…])' } value: class extends Op - pattern = (val! / evt!) + (const.str / const.sym / const.num)*0 + pattern = (sig! / evt!) + (const.str / const.sym / const.num)*0 setup: (inputs) => { val, keys } = pattern\match inputs super val: Input.hot val diff --git a/docs/internals/extensions.md b/docs/internals/extensions.md index 29cc075..0140e15 100644 --- a/docs/internals/extensions.md +++ b/docs/internals/extensions.md @@ -79,14 +79,14 @@ and the `Scope` the evaluation happened in. Ops generally shouldn't use the scope, but might look up 'magic' dynamic symbols like `\*clock\*`. #### argument parsing -Arguments should be parsed using `base.match`. The two exports `base.match.val` +Arguments should be parsed using `base.match`. The two exports `base.match.sig` and `base.match.evt` are used to build complex patterns that can parse and validate the Op arguments into complex structures (see the module documentation for more information). - import val, evt from require 'alv.base' + import sig, evt from require 'alv.base' - pattern = evt.bang + val.str + val.num*3 + -evt! + pattern = evt.bang + sig.str + sig.num*3 + -evt! { trig, str, numbers, optional } = pattern\match inputs This example matches first an `EvtStream` of type `bang`, then a `SigStream` diff --git a/spec/match_spec.moon b/spec/match_spec.moon index 0047fd4..0f06c64 100644 --- a/spec/match_spec.moon +++ b/spec/match_spec.moon @@ -1,4 +1,4 @@ -import const, val, evt from require 'alv.base.match' +import const, sig, evt from require 'alv.base.match' import Op, Input from require 'alv.base' import RTNode, T, Error from require 'alv' @@ -18,13 +18,13 @@ mk_evt = (type, const) -> result = T[type]\mk_evt! RTNode :result, op: op_with_inputs { Input.hot result } -describe 'val and evt', -> +describe 'sig and evt', -> describe 'type-less shorthand', -> it 'matches metatype', -> str = mk_val 'str' num = mk_val 'num' - assert.is.equal str, val!\match { str } - assert.is.equal num, val!\match { num } + assert.is.equal str, sig!\match { str } + assert.is.equal num, sig!\match { num } assert.has.error -> const!\match { str } assert.has.error -> const!\match { num } assert.has.error -> evt!\match { str } @@ -32,8 +32,8 @@ describe 'val and evt', -> str = mk_evt 'str' num = mk_evt 'num' - assert.has.error -> val!\match { str } - assert.has.error -> val!\match { num } + assert.has.error -> sig!\match { str } + assert.has.error -> sig!\match { num } assert.has.error -> const!\match { str } assert.has.error -> const!\match { num } assert.is.equal str, evt!\match { str } @@ -41,15 +41,15 @@ describe 'val and evt', -> str = mk_const 'str' num = mk_const 'num' - assert.is.equal str, val!\match { str } - assert.is.equal num, val!\match { num } + assert.is.equal str, sig!\match { str } + assert.is.equal num, sig!\match { num } assert.is.equal str, const!\match { str } assert.is.equal num, const!\match { num } assert.has.error -> evt!\match { str } assert.has.error -> evt!\match { num } it 'can recall the type', -> - value = val!! + value = sig!! event = evt!! two_equal_values = value + value two_equal_events = event + event @@ -77,14 +77,14 @@ describe 'val and evt', -> it 'stringifies well', -> assert.is.equal 'any=', tostring const! assert.is.equal 'any!', tostring evt! - assert.is.equal 'any~', tostring val! + assert.is.equal 'any~', tostring sig! describe 'typed shorthand', -> it 'matches by metatype', -> str = mk_val 'str' num = mk_val 'num' - assert.is.equal str, val.str\match { str } - assert.is.equal num, val.num\match { num } + assert.is.equal str, sig.str\match { str } + assert.is.equal num, sig.num\match { num } assert.has.error -> const.str\match { str } assert.has.error -> const.num\match { num } assert.has.error -> evt.str\match { str } @@ -92,8 +92,8 @@ describe 'val and evt', -> str = mk_evt 'str' num = mk_evt 'num' - assert.has.error -> val.str\match { str } - assert.has.error -> val.num\match { num } + assert.has.error -> sig.str\match { str } + assert.has.error -> sig.num\match { num } assert.has.error -> const.str\match { str } assert.has.error -> const.num\match { num } assert.is.equal str, evt.str\match { str } @@ -101,8 +101,8 @@ describe 'val and evt', -> str = mk_const 'str' num = mk_const 'num' - assert.is.equal str, val.str\match { str } - assert.is.equal num, val.num\match { num } + assert.is.equal str, sig.str\match { str } + assert.is.equal num, sig.num\match { num } assert.is.equal str, const.str\match { str } assert.is.equal num, const.num\match { num } assert.has.error -> evt.str\match { str } @@ -111,21 +111,21 @@ describe 'val and evt', -> it 'matches by type', -> str = mk_const 'str' num = mk_const 'num' - assert.is.equal str, val.str\match { str } - assert.is.equal num, val.num\match { num } + assert.is.equal str, sig.str\match { str } + assert.is.equal num, sig.num\match { num } assert.is.equal str, const.str\match { str } assert.is.equal num, const.num\match { num } - assert.has.error -> val.num\match { str } - assert.has.error -> val.str\match { num } + assert.has.error -> sig.num\match { str } + assert.has.error -> sig.str\match { num } str = mk_val 'str' num = mk_val 'num' - assert.is.equal str, val.str\match { str } - assert.is.equal num, val.num\match { num } + assert.is.equal str, sig.str\match { str } + assert.is.equal num, sig.num\match { num } assert.has.error -> const.num\match { str } assert.has.error -> const.str\match { num } - assert.has.error -> val.num\match { str } - assert.has.error -> val.str\match { num } + assert.has.error -> sig.num\match { str } + assert.has.error -> sig.str\match { num } str = mk_evt 'str' num = mk_evt 'num' @@ -139,8 +139,8 @@ describe 'val and evt', -> it 'stringifies well', -> assert.is.equal 'str!', tostring evt.str assert.is.equal 'num!', tostring evt.num - assert.is.equal 'str~', tostring val.str - assert.is.equal 'num~', tostring val.num + assert.is.equal 'str~', tostring sig.str + assert.is.equal 'num~', tostring sig.num assert.is.equal 'str=', tostring const.str assert.is.equal 'num=', tostring const.num @@ -148,7 +148,7 @@ describe 'choice', -> str = mk_val 'str' num = mk_val 'num' bool = mk_val 'bool' - choice = val.str / val.num + choice = sig.str / sig.num it 'matches either type', -> assert.is.equal str, choice\match { str } @@ -167,7 +167,7 @@ describe 'choice', -> assert.has.error -> same\match { bool, bool } it 'makes inner types recall', -> - same = (val! / evt!)! + same = (sig! / evt!)! same = same + same assert.is.same { str, str }, same\match { str, str } assert.is.same { num, num }, same\match { num, num } @@ -182,7 +182,7 @@ describe 'sequence', -> str = mk_val 'str' num = mk_val 'num' bool = mk_evt 'bool' - seq = val.str + val.num + evt.bool + seq = sig.str + sig.num + evt.bool it 'matches all types in order', -> assert.is.same { str, num, bool }, seq\match { str, num, bool } @@ -199,14 +199,14 @@ describe 'sequence', -> assert.has.error -> seq\match { str, num, bool, bool } it 'can handle optional children', -> - opt = -val.str + val.num + opt = -sig.str + sig.num assert.is.same { str, num }, opt\match { str, num } assert.is.same { nil, num }, opt\match { num } assert.has.error -> opt\match { str, str, num } assert.has.error -> opt\match { str, num, num } it 'can handle repeat children', -> - rep = val.str + val.num*2 + rep = sig.str + sig.num*2 assert.is.same { str, {num} }, rep\match { str, num } assert.is.same { str, {num,num} }, rep\match { str, num, num } assert.has.error -> rep\match { str } @@ -222,7 +222,7 @@ describe 'repeat', -> times = (n, arg) -> return for i=1,n do arg it '*x is [1,x[', -> - rep = val.str*3 + rep = sig.str*3 assert.has.error -> rep\match (times 0, str) assert.is.same (times 1, str), rep\match (times 1, str) assert.is.same (times 2, str), rep\match (times 2, str) @@ -231,7 +231,7 @@ describe 'repeat', -> assert.has.error -> rep\match (times 3, num) it '*0 is [1,[', -> - rep = val.str*0 + rep = sig.str*0 assert.has.error -> rep\match (times 0, str) assert.is.same (times 1, str), rep\match (times 1, str) assert.is.same (times 2, str), rep\match (times 2, str) @@ -239,7 +239,7 @@ describe 'repeat', -> assert.has.error -> rep\match (times 3, num) it '^x is [0,x[', -> - rep = val.str^3 + rep = sig.str^3 assert.is.same {}, rep\match {} assert.is.same (times 1, str), rep\match (times 1, str) assert.is.same (times 2, str), rep\match (times 2, str) @@ -248,7 +248,7 @@ describe 'repeat', -> assert.has.error -> rep\match (times 3, num) it '^0 is [0,[', -> - rep = val.str^0 + rep = sig.str^0 assert.is.same {}, rep\match {} assert.is.same (times 1, str), rep\match (times 1, str) assert.is.same (times 2, str), rep\match (times 2, str) @@ -256,7 +256,7 @@ describe 'repeat', -> assert.has.error -> rep\match (times 3, num) it ':rep(min, max) does anything else', -> - rep = val.str\rep 2, 2 + rep = sig.str\rep 2, 2 assert.has.error -> rep\match {} assert.has.error -> rep\match (times 1, str) assert.is.same (times 2, str), rep\match (times 2, str) @@ -264,7 +264,7 @@ describe 'repeat', -> assert.has.error -> rep\match (times 2, num) it 'works with complex inner types', -> - rep = (val.num + val.str)\rep 2, 2 + rep = (sig.num + sig.str)\rep 2, 2 assert.has.error -> rep\match {} assert.has.error -> rep\match {num, str} assert.has.error -> rep\match {num, num} @@ -273,18 +273,18 @@ describe 'repeat', -> assert.has.error -> rep\match {num, str, num, str, num, str} it 'stringifies well', -> - assert.is.equal 'str~{1-3}', tostring val.str*3 - assert.is.equal 'str~{1-*}', tostring val.str*0 - assert.is.equal 'str~{0-*}', tostring val.str^0 - assert.is.equal 'str~{2-2}', tostring val.str\rep 2, 2 + assert.is.equal 'str~{1-3}', tostring sig.str*3 + assert.is.equal 'str~{1-*}', tostring sig.str*0 + assert.is.equal 'str~{0-*}', tostring sig.str^0 + assert.is.equal 'str~{2-2}', tostring sig.str\rep 2, 2 describe 'complex nesting', -> bang = mk_evt 'bang' str = mk_val 'str' num = mk_val 'num' num_c = mk_const 'num' - pattern = -evt.bang + val.num*4 + - (val.str + (val.num / val.str))\named('key', 'val')^0 + pattern = -evt.bang + sig.num*4 + + (sig.str + (sig.num / sig.str))\named('key', 'val')^0 it 'just works', -> assert.is.same { bang, { num, num }, {} }, pattern\match { bang, num, num } diff --git a/spec/pureop_spec.moon b/spec/pureop_spec.moon index 78dce4d..d2a4a89 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, val, evt from require 'alv.base' +import PureOp, Input, T, sig, evt from require 'alv.base' import RTNode from require 'alv' setup do_setup teardown do_teardown class TestPureOp extends PureOp - pattern: (val.num / val.str / evt.num)*3 + pattern: (sig.num / sig.str / evt.num)*3 type: T.num tick: => @out\set 1 @@ -81,9 +81,9 @@ describe 'PureOp', -> assert.has.error -> invoke_op TestPureOp, { (literal a), (literal b) } it 'supports nested input patterns', -> - num = val.num / evt.num + num = sig.num / evt.num class NestedInputOp extends PureOp - pattern: (num + val.str)\named('a', 'b')\rep 2, 2 + pattern: (num + sig.str)\named('a', 'b')\rep 2, 2 type: T.num tick: => @out\set 1 @@ -106,7 +106,7 @@ describe 'PureOp', -> it 'supports dynamically generating the output type', -> class DynamicOp extends PureOp - pattern: val.num + (val! / evt!) + pattern: sig.num + (sig! / evt!) type: (inputs) => inputs[2]\type! tick: => @out\set @inputs[2]! typ = spy.on DynamicOp, 'type' |
