diff --git a/data-lens.asd b/data-lens.asd index 6dfe796..b9a0cad 100644 --- a/data-lens.asd +++ b/data-lens.asd @@ -21,5 +21,17 @@ :depends-on (:data-lens :alexandria) :serial t + :in-order-to ((test-op (test-op :data-lens/transducer/test))) :components ((:file "package") (:file "transducers"))) + +(asdf:defsystem #:data-lens/transducer/test + :description "tests for the transducers" + :author "Edward Langley " + :license "MIT" + :depends-on (:data-lens/beta/transducer + :fiveam) + :serial t + :perform (test-op (o c) (symbol-call :fiveam '#:run! :data-lens.transducers)) + :components ((:module "t" + :components ((:file "transducer"))))) diff --git a/t/transducer.lisp b/t/transducer.lisp new file mode 100644 index 0000000..6e29fcb --- /dev/null +++ b/t/transducer.lisp @@ -0,0 +1,39 @@ +(defpackage :fwoar.lisp-sandbox.t.transducer + (:use :cl ) + (:export )) +(in-package :fwoar.lisp-sandbox.t.transducer) + +(5am:def-suite :data-lens.transducers) +(5am:in-suite :data-lens.transducers) + +(5am:def-test mapping (:suite :data-lens.transducers) + (5am:is (equal '(2 3 4) + (data-lens.transducers:transduce (data-lens.transducers:mapping '1+) + 'data-lens.transducers:list-builder + '(1 2 3))))) + +(5am:def-test mv-mapping (:suite :data-lens.transducers) + (5am:is (equal '((2 0) (3 1) (4 2)) + (data-lens.transducers:transduce (data-lens.transducers:mv-mapping + (lambda (it) + (values (1+ it) (1- it)))) + 'data-lens.transducers:list-builder + '(1 2 3))))) + +(5am:def-test transducer-composition (:suite :data-lens.transducers) + (5am:is (equal '(3 5 7) + (data-lens.transducers:transduce (data-lens:• + (data-lens.transducers:mapping + (lambda (x) + (* 2 x))) + (data-lens.transducers:mapping '1+)) + 'data-lens.transducers:list-builder + '(1 2 3)))) + (5am:is (equal '(3 5 7) + (data-lens.transducers:transduce (data-lens:• + (data-lens.transducers:mapping + (lambda (x) + (* 2 x))) + (data-lens.transducers:mapping '1+)) + 'data-lens.transducers:list-builder + '(1 2 3)))))