;;;; t1.scm - test fast-generic (import scheme (chicken base) fast-generic) (define-type symbol symbol?) (define-type list list?) (define-type string string?) (define-type real real?) (define-type number number?) (define-type integer integer? number) (define-generic (foo (symbol p) x) (print "symbol: " p) 2) (define-generic (foo (list p) (any c)) (print "list: " p) 3) (define-generic (foo (list p) (list c)) (print "list2: " p) 4) (assert (eq? 2 (foo 'abc #t))) (assert (eq? 3 (foo '(1) '(2 . 3)))) (assert (eq? 4 (foo '(1) '(2 3)))) (define-generic (add (number a) (number b)) (+ a b)) (define-generic (add (string a) (string b)) (string-append a b)) (assert (= 7 (add 3 4))) (assert (equal? "automobile" (add "auto" "mobile"))) (define-generic (process (integer a) (integer b)) "processing integers") (define-generic (process (real a) (real b)) "processing reals") (print (process 2 4)) (print (process 2.3 4.5)) (print (process 2.3 4)) (print (process 2 4.5)) (define-type natural (lambda (x) (and (integer? x) (positive? x))) number) (define-generic (process (natural a) b) "processing natural and any") (print (process 5 2.4))