diff --git a/t/transducer.lisp b/t/transducer.lisp index 26f5147..1112076 100644 --- a/t/transducer.lisp +++ b/t/transducer.lisp @@ -89,7 +89,23 @@ (5am:is (equal '(1 2) (data-lens.transducers:transduce (data-lens.transducers:compressing-runs) 'data-lens.transducers:list-builder - input))))) + input)))) + + (5am:is + (equal '((1 2 2 2 3 3 3) + (2 4 4 4 5 5 5) + (3 6 6 6)) + (data-lens.transducers:transduce + (data-lens.transducers:compressing-runs + :test (lambda (a b) (eql (car a) (car b))) + :combiner (lambda (a b) + (if a + (append a (cdr b)) + b))) + 'data-lens.transducers:list-builder + '((1 2 2 2) (1 3 3 3) + (2 4 4 4) (2 5 5 5) + (3 6 6 6)))))) (5am:def-test catting (:suite :data-lens.transducers) (5am:is (equal '(1 1 2 1 2 2 3 3 4 1) diff --git a/transducers.lisp b/transducers.lisp index 5a32818..18b8bb3 100644 --- a/transducers.lisp +++ b/transducers.lisp @@ -79,14 +79,13 @@ leftovers t) acc) (progn (prog1 (funcall rf acc last) - (setf last (funcall combiner last next)))))) + (setf last next))))) ((it) (funcall rf (if leftovers (funcall rf it last) it))))))) - (defun deduping (&optional (test 'eql)) (compressing-runs :test test))