feat: core.async Phase 3 — channel transducers + dropping/sliding buffers
(chan n xform) applies a transducer on the put side: a jolt transducer is a directly-callable closure, composed over a reducing fn whose step gives each output value into the channel (honoring its buffer kind). One put may yield zero or more values; a reduced result (e.g. from take) closes the channel; close! runs the transducer completion arity to flush stateful remainders. Works with map/filter/mapcat/take/comp/etc. Buffers: (buffer n) fixed, (dropping-buffer n) drops new values when full, (sliding-buffer n) drops the oldest. Implemented via a non-blocking give — (ev/select [ch v] closed-chan) detects a full buffer without parking. harness: run-spec flushes per suite. spec: core.async/channel-transducers (5), core.async/buffers (3). jpm test green. Note: distinct/dedupe/partition-all/partition-by still lack a 0-coll transducer arity in core (separate gap), so they can't yet be used as channel xforms.
This commit is contained in:
parent
e8cb4605ac
commit
54db79e927
5 changed files with 94 additions and 9 deletions
|
|
@ -54,6 +54,7 @@
|
|||
(= (r 1) true) (++ pass)
|
||||
(array/push fails [label (string "want " expected ", got " (show actual))])))))
|
||||
(printf " %s: %d/%d" suite pass (length cases))
|
||||
(flush)
|
||||
(each [l m] fails (printf " FAIL [%s] %s" l m))
|
||||
(when (> (length fails) 0)
|
||||
(error (string suite ": " (length fails) " failing behavior(s)")))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue