Files
data-lens/t/lens.lisp
2022-09-27 23:11:21 -07:00

59 lines
2.0 KiB
Common Lisp

(defpackage :data-lens.t.lens
(:use :cl )
(:export ))
(in-package :data-lens.t.lens)
(5am:def-suite :data-lens.lens)
(5am:in-suite :data-lens.lens)
(5am:def-test == (:suite :data-lens.lens)
(5am:is (equal t
(funcall (data-lens:== 1)
1)))
(5am:is (equal nil
(funcall (data-lens:== (list "1"))
(list "1"))))
(5am:is (equal t
(funcall (data-lens:== (list "1") :test #'equal)
(list "1")))))
(5am:def-test functionalize (:suite :data-lens.lens)
(5am:is (equal 2
(funcall (data-lens:functionalize #'1+) 1)))
(5am:is (equal 0
(funcall (data-lens:functionalize '1-) 1)))
(5am:is (equal 3
(funcall (data-lens:functionalize #(0 3)) 1)))
(5am:is (equal 8
(funcall (data-lens:functionalize
(alexandria:plist-hash-table '(1 8 2 4)))
1))))
(5am:def-test on (:suite :data-lens.lens :depends-on (and functionalize))
(5am:is (equal 2
(funcall (data-lens:on '1+ 'car)
'(1 2))))
(5am:is (equal 5
(funcall (data-lens:on '+ 'car)
'(1 2)
'(4 5))))
(5am:is (equal 13
(funcall (data-lens:on '+ 'car)
'(1 2)
'(4 5)
'(8 9)))))
(5am:def-test over (:suite :data-lens.lens :depends-on (and functionalize))
(5am:is (equal '(1 2 3)
(funcall (data-lens:over '1+)
'(0 1 2))))
(5am:is (equal '(1 2 3)
(funcall (data-lens:over '1+)
#(0 1 2))))
(5am:is (equalp #(1 2 3)
(funcall (data-lens:over '1+ :result-type 'vector)
'(0 1 2))))
(5am:is (equalp #(1 2 3)
(funcall (data-lens:over '1+ :result-type 'vector)
#(0 1 2)))))