;;;; coerce-test.scm (use test) (use coerce) (test-group "Coerce" (define unspecified-coerce (case-coerce ((char) #\nul) ((number) +nan) ((string) "") ((symbol) '||) ((list) (list)) ((vector) (vector)) (else (void) ) ) ) (define (unspecified? obj) (eq? (void) obj)) (test "lvs" '((#\s #\t #\r #\i #\n #\g) #(#\s #\t #\r #\i #\n #\g) "string" "23.45") (coerce-all '("string" (#\s #\t #\r #\i #\n #\g) #(#\s #\t #\r #\i #\n #\g) 23.45) '(list vector string string))) ; while unspecified is builtin there is no conversion (test-assert "extn" (coerce-extend! 'unspecified unspecified? unspecified-coerce)) (test "ut" 'unspecified (type-of (void))) (test "ns" "" (coerce (void) 'string)) (test-assert "string extension" (coerce-extend! 'string string? (case-coerce ((unspecified) (if (string=? "" object) (void) (on-error)))))) (test-error "su1" (coerce "abc" 'unspecified)) (test "su2" (void) (coerce "" 'unspecified)) (let-values (((pred proc) (coerce-extension 'string))) (test-assert "override string extension" (coerce-extend! 'string string? (case-coerce ((input-port) `(open-input-file ,object)) ((output-port) `(open-output-file ,object)) (else (proc object 'string on-error))))) ) (test "sp" '(open-output-file "foo") (coerce "foo" 'output-port)) )