diff --git a/csys.lisp b/csys.lisp index 2cfaab9..4762994 100644 --- a/csys.lisp +++ b/csys.lisp @@ -5,7 +5,8 @@ (:local-nicknames (:actor :scopes/core/actor) (:util :scopes/util)) (:export #:neuron #:synapse - #:forward)) + #:forward + #:set-content)) (in-package :decons/csys) @@ -22,3 +23,10 @@ (defun forward (msg state syns env) (dolist (s syns) (funcall s msg))) + +;;;; helpers for operating on messages + +(defun set-content (fn) + (lambda (msg) (actor:message + (funcall fn (actor:content msg)) + (actor:customer msg)))) diff --git a/test-csys.lisp b/test-csys.lisp index 814229c..a339d25 100644 --- a/test-csys.lisp +++ b/test-csys.lisp @@ -9,10 +9,11 @@ )) (deftest test-neuron () - (let* ((prb (csys:neuron #'probe :env t:*test-suite* :state '(42 43))) - (fw (csys:neuron #'csys:forward :syns (list (csys:synapse prb))))) - (actor:send fw (actor:message 42)) - (actor:send fw (actor:message 43)) + (let* ((prb (csys:neuron #'probe :env t:*test-suite* :state '(43 44))) + (syn (csys:synapse prb (csys:set-content (lambda (c) (+ 1 c))))) + (fw (csys:neuron #'csys:forward :syns (list syn)))) + (actor:send fw 42) + (actor:send fw 43) (sleep 0.1) (actor:stop prb) (actor:stop fw)