/
srfi-88.lisp
49 lines (36 loc) · 1.3 KB
/
srfi-88.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
;;;; srfi-88.lisp
(cl:in-package "https://github.com/g000001/srfi-88#internals")
(def-suite* srfi-88)
(declaim (inline keyword?))
(defun keyword? (obj)
(cl:keywordp obj))
(defun keyword->string (k)
(cl:string k))
(defun string->keyword (x)
(assert (stringp x))
(values (cl:intern x :keyword)))
(macrolet ((tst (&body clauses)
(do ((*gensym-counter* 0)
(c clauses (cdddr c))
(ans '()
(cons `(test ,(gensym)
(is (equal ,(first c)
,(third c))))
ans)))
((null c)
`(progn ,@ans)))))
(tst
(keyword? ':foo) ==> T
(keyword? :foo) ==> T
(keyword? 'foo) ==> nil
(keyword? '\:) ==> nil
(keyword? :||) ==> T
(keyword? (car '(:a :b))) ==> T
(keyword? "bar") ==> nil
(keyword->string :foo) ==> "FOO"
(keyword->string :||) ==> ""
(keyword->string
(string->keyword "a b c")) ==> "a b c"
(string->keyword "foo") ==> :|foo|
(string->keyword "") ==> (values :||)))
;;; *EOF*