git.fiddlerwoaroof.com
Browse code

fix(ci): add tests, fix test-op

Edward Langley authored on 28/09/2022 06:08:46
Showing 3 changed files
... ...
@@ -48,10 +48,11 @@ jobs:
48 48
       - name: run tests
49 49
         run: |
50 50
           cd "$GITHUB_WORKSPACE"
51
-          sbcl --load "$HOME/quicklisp/setup.lisp" \
51
+          sbcl --disable-debugger --no-userinit \
52
+               --load "$HOME/quicklisp/setup.lisp" \
52 53
                --eval "(mapcar 'asdf:load-asd (directory \"*.asd\"))" \
53 54
                --eval "(ql:quickload :data-lens/test)" \
54
-               --eval "(asdf:test-system :data-lens/test)" \
55
+               --eval "(handler-case (asdf:test-system :data-lens/test) (error () (uiop:quit 42)))" \
55 56
                --eval "(ql:quickload :data-lens/transducers/test)" \
56
-               --eval "(asdf:test-system :data-lens/transducers/test)" \
57
+               --eval "(handler-case (asdf:test-system :data-lens/transducers/test) (error () (uiop:quit 43)))" \
57 58
                --quit
... ...
@@ -22,7 +22,9 @@
22 22
   :depends-on (:data-lens
23 23
                :fiveam)
24 24
   :serial t
25
-  :perform (test-op (o c) (symbol-call :fiveam '#:run! :data-lens.lens))
25
+  :perform (test-op (o c)
26
+                    (unless (symbol-call :fiveam '#:run! :data-lens.lens)
27
+                      (error "some tests failed")))
26 28
   :components ((:module "t"
27 29
                 :components ((:file "lens")))))
28 30
 
... ...
@@ -49,6 +51,6 @@
49 51
                :fiveam)
50 52
   :serial t
51 53
   :perform (test-op (o c) (unless (symbol-call :fiveam '#:run! :data-lens.transducers)
52
-                            (quit 42)))
54
+                            (error "some tests failed")))
53 55
   :components ((:module "t"
54 56
                 :components ((:file "transducers")))))
55 57
new file mode 100644
... ...
@@ -0,0 +1,58 @@
1
+(defpackage :data-lens.t.lens
2
+  (:use :cl )
3
+  (:export ))
4
+(in-package :data-lens.t.lens)
5
+
6
+(5am:def-suite :data-lens.lens)
7
+(5am:in-suite :data-lens.lens)
8
+
9
+(5am:def-test == (:suite :data-lens.lens)
10
+  (5am:is (equal t
11
+                 (funcall (data-lens:== 1)
12
+                          1)))
13
+  (5am:is (equal nil
14
+                 (funcall (data-lens:== (list "1"))
15
+                          (list "1"))))
16
+  (5am:is (equal nil
17
+                 (funcall (data-lens:== (list "1") :test #'equal)
18
+                          (list "1")))))
19
+
20
+(5am:def-test functionalize (:suite :data-lens.lens)
21
+  (5am:is (equal 2
22
+                 (funcall (data-lens:functionalize #'1+) 1)))
23
+  (5am:is (equal 0
24
+                 (funcall (data-lens:functionalize '1-) 1)))
25
+  (5am:is (equal 3
26
+                 (funcall (data-lens:functionalize #(0 3)) 1)))
27
+  (5am:is (equal 8
28
+                 (funcall (data-lens:functionalize
29
+                           (alexandria:plist-hash-table '(1 8 2 4)))
30
+                          1))))
31
+
32
+(5am:def-test on (:suite :data-lens.lens :depends-on (and functionalize))
33
+  (5am:is (equal 2
34
+                 (funcall (data-lens:on '1+ 'car)
35
+                          '(1 2))))
36
+  (5am:is (equal 5
37
+                 (funcall (data-lens:on '+ 'car)
38
+                          '(1 2)
39
+                          '(4 5))))
40
+  (5am:is (equal 13
41
+                 (funcall (data-lens:on '+ 'car)
42
+                          '(1 2)
43
+                          '(4 5)
44
+                          '(8 9)))))
45
+
46
+(5am:def-test over (:suite :data-lens.lens :depends-on (and functionalize))
47
+  (5am:is (equal '(1 2 3)
48
+                 (funcall (data-lens:over '1+)
49
+                          '(0 1 2))))
50
+  (5am:is (equal '(1 2 3)
51
+                 (funcall (data-lens:over '1+)
52
+                          #(0 1 2))))
53
+  (5am:is (equalp #(1 2 3)
54
+                  (funcall (data-lens:over '1+ :result-type 'vector)
55
+                           '(0 1 2))))
56
+  (5am:is (equalp #(1 2 3)
57
+                  (funcall (data-lens:over '1+ :result-type 'vector)
58
+                           #(0 1 2)))))