-(test-equal "fold2, 1 list"
- (list (reverse (iota 5))
- (map - (reverse (iota 5))))
- (call-with-values
- (lambda ()
- (fold2 (lambda (i r1 r2)
- (values (cons i r1)
- (cons (- i) r2)))
- '() '()
- (iota 5)))
- list))
-
-(test-equal "fold2, 2 lists"
- (list (reverse '((a . 0) (b . 1) (c . 2) (d . 3)))
- (reverse '((a . 0) (b . -1) (c . -2) (d . -3))))
- (call-with-values
- (lambda ()
- (fold2 (lambda (k v r1 r2)
- (values (alist-cons k v r1)
- (alist-cons k (- v) r2)))
- '() '()
- '(a b c d)
- '(0 1 2 3)))
- list))
+(test-equal "strip-keyword-arguments"
+ '(a #:b b #:c c)
+ (strip-keyword-arguments '(#:foo #:bar #:baz)
+ '(a #:foo 42 #:b b #:baz 3
+ #:c c #:bar 4)))
+
+(test-equal "ensure-keyword-arguments"
+ '((#:foo 2)
+ (#:foo 2 #:bar 3)
+ (#:foo 42 #:bar 3))
+ (list (ensure-keyword-arguments '(#:foo 2) '(#:foo 2))
+ (ensure-keyword-arguments '(#:foo 2) '(#:bar 3))
+ (ensure-keyword-arguments '(#:foo 2) '(#:bar 3 #:foo 42))))
+
+(test-equal "default-keyword-arguments"
+ '((#:foo 2)
+ (#:foo 2)
+ (#:foo 2 #:bar 3)
+ (#:foo 2 #:bar 3)
+ (#:foo 2 #:bar 3))
+ (list (default-keyword-arguments '() '(#:foo 2))
+ (default-keyword-arguments '(#:foo 2) '(#:foo 4))
+ (default-keyword-arguments '() '(#:bar 3 #:foo 2))
+ (default-keyword-arguments '(#:bar 3) '(#:foo 2))
+ (default-keyword-arguments '(#:foo 2 #:bar 3) '(#:bar 6))))
+
+(test-equal "substitute-keyword-arguments"
+ '((#:foo 3)
+ (#:foo 3)
+ (#:foo 3 #:bar (1 2))
+ (#:bar (1 2) #:foo 3)
+ (#:foo 3))
+ (list (substitute-keyword-arguments '(#:foo 2)
+ ((#:foo f) (1+ f)))
+ (substitute-keyword-arguments '()
+ ((#:foo f 2) (1+ f)))
+ (substitute-keyword-arguments '(#:foo 2 #:bar (2))
+ ((#:foo f) (1+ f))
+ ((#:bar b) (cons 1 b)))
+ (substitute-keyword-arguments '(#:foo 2)
+ ((#:foo _) 3)
+ ((#:bar b '(2)) (cons 1 b)))
+ (substitute-keyword-arguments '(#:foo 2)
+ ((#:foo f 1) (1+ f))
+ ((#:bar b) (cons 42 b)))))