Making libraries portable where possible.

Many still import (chibi), and as (scheme base) is somewhat more
expensive to load at present these are changed to cond-expand.
Many libraries also rely on (srfi 33), and these have been changed
to a cond-expand first trying (srfi 60) where available.
Also fixing a few portability concerns (duplicate imports of the
same binding), and adding a few libraries missing from lib-tests.scm.
This commit is contained in:
Alex Shinn 2015-04-26 16:17:38 +09:00
parent 12c9dc1038
commit 00691b64f1
40 changed files with 336 additions and 160 deletions

View file

@ -1,8 +1,11 @@
(define-library (chibi binary-record) (define-library (chibi binary-record)
(import (scheme base) (import (scheme base)
(srfi 1) (srfi 9) (srfi 33) (srfi 1) (srfi 9)
(chibi io) (chibi string) (chibi io) (chibi string)
(only (chibi) identifier? er-macro-transformer)) (only (chibi) identifier? er-macro-transformer))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(export define-binary-record-type) (export define-binary-record-type)
(include "binary-record.scm")) (include "binary-record.scm"))

View file

@ -7,5 +7,8 @@
integer->bytevector bytevector->integer integer->bytevector bytevector->integer
integer->hex-string hex-string->integer integer->hex-string hex-string->integer
bytevector->hex-string hex-string->bytevector) bytevector->hex-string hex-string->bytevector)
(import (scheme base) (srfi 33)) (import (scheme base))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(include "bytevector.scm")) (include "bytevector.scm"))

View file

@ -1,6 +1,9 @@
(define-library (chibi channel) (define-library (chibi channel)
(import (chibi) (srfi 9) (srfi 18)) (cond-expand
(chibi (import (chibi) (srfi 9)))
(else (import (scheme base))))
(import (srfi 18))
(export Channel make-channel channel? channel-empty? (export Channel make-channel channel? channel-empty?
channel-send! channel-receive!) channel-send! channel-receive!)
(include "channel.scm")) (include "channel.scm"))

View file

@ -1,6 +1,6 @@
(define-library (chibi char-set) (define-library (chibi char-set)
(import (chibi) (chibi char-set base) (chibi char-set extras)) (import (chibi char-set base) (chibi char-set extras))
(export (export
Char-Set char-set? char-set-contains? Char-Set char-set? char-set-contains?
char-set ucs-range->char-set char-set-copy char-set-size char-set ucs-range->char-set char-set-copy char-set-size

View file

@ -1,14 +1,23 @@
(define-library (chibi char-set base) (define-library (chibi char-set base)
(import (chibi) (chibi iset base)) (cond-expand
(chibi
(import (chibi))
(begin
(define-syntax immutable-char-set
(sc-macro-transformer
(lambda (expr use-env)
(eval (cadr expr) use-env))))))
(else
(import (scheme base))
(begin
(define-syntax immutable-char-set
(syntax-rules () ((immutable-char-set cs) cs))))))
(import (chibi iset base))
(export (rename Integer-Set Char-Set) (export (rename Integer-Set Char-Set)
(rename iset? char-set?) (rename iset? char-set?)
immutable-char-set immutable-char-set
char-set-contains?) char-set-contains?)
(begin (begin
(define-syntax immutable-char-set
(sc-macro-transformer
(lambda (expr use-env)
(eval (cadr expr) use-env))))
(define (char-set-contains? cset ch) (define (char-set-contains? cset ch)
(iset-contains? cset (char->integer ch))))) (iset-contains? cset (char->integer ch)))))

View file

@ -4,10 +4,12 @@
(define-library (chibi char-set boundary) (define-library (chibi char-set boundary)
(cond-expand (cond-expand
(chibi (chibi (import (chibi)))
(import (chibi) (chibi char-set))) (else (import (scheme base))))
(cond-expand
((library (chibi char-set)) (import (chibi char-set)))
(else (else
(import (scheme base) (srfi 14)) (import (srfi 14))
(begin (define (immutable-char-set cs) cs)))) (begin (define (immutable-char-set cs) cs))))
(export char-set:regional-indicator (export char-set:regional-indicator
char-set:extend-or-spacing-mark char-set:extend-or-spacing-mark

View file

@ -1,6 +1,9 @@
(define-library (chibi char-set extras) (define-library (chibi char-set extras)
(import (chibi) (chibi iset) (chibi char-set base)) (cond-expand
(chibi (import (chibi)))
(else (import (scheme base))))
(import (chibi iset) (chibi char-set base))
(include "extras.scm") (include "extras.scm")
(export (export
char-set ucs-range->char-set char-set-copy char-set-size char-set ucs-range->char-set char-set-copy char-set-size

View file

@ -1,5 +1,8 @@
(define-library (chibi crypto md5) (define-library (chibi crypto md5)
(import (scheme base) (srfi 33) (chibi bytevector)) (import (scheme base) (chibi bytevector))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(export md5) (export md5)
(include "md5.scm")) (include "md5.scm"))

View file

@ -1,7 +1,10 @@
(define-library (chibi crypto rsa) (define-library (chibi crypto rsa)
(import (scheme base) (srfi 27) (srfi 33) (import (scheme base) (srfi 27)
(chibi bytevector) (chibi math prime)) (chibi bytevector) (chibi math prime))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(export make-rsa-key rsa-key-gen rsa-key-gen-from-primes rsa-pub-key (export make-rsa-key rsa-key-gen rsa-key-gen-from-primes rsa-pub-key
rsa-encrypt rsa-decrypt rsa-sign rsa-verify rsa-verify? rsa-encrypt rsa-decrypt rsa-sign rsa-verify rsa-verify?
rsa-key? rsa-key-bits rsa-key-n rsa-key-e rsa-key-d rsa-key? rsa-key-bits rsa-key-n rsa-key-e rsa-key-d

View file

@ -7,7 +7,10 @@
(include "sha2-native.scm") (include "sha2-native.scm")
(include-shared "crypto")) (include-shared "crypto"))
(else (else
(import (srfi 33) (chibi bytevector)) (cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(import (chibi bytevector))
(include "sha2.scm")))) (include "sha2.scm"))))
;;> \procedure{(sha-224 src)} ;;> \procedure{(sha-224 src)}

View file

@ -3,13 +3,13 @@
(import (chibi) (chibi io) (chibi filesystem) (chibi test) (srfi 33)) (import (chibi) (chibi io) (chibi filesystem) (chibi test) (srfi 33))
(begin (begin
(define (run-tests) (define (run-tests)
(test-begin "filesystem")
(define tmp-file "/tmp/chibi-fs-test-0123456789") (define tmp-file "/tmp/chibi-fs-test-0123456789")
(define tmp-file2 "/tmp/chibi-fs-test-0123456789-2") (define tmp-file2 "/tmp/chibi-fs-test-0123456789-2")
(define tmp-link "/tmp/chibi-fs-test-0123456789-link") (define tmp-link "/tmp/chibi-fs-test-0123456789-link")
(define tmp-dir "/tmp/chibi-fs-test-0123456789-dir") (define tmp-dir "/tmp/chibi-fs-test-0123456789-dir")
(test-begin "filesystem")
(call-with-output-file tmp-file (call-with-output-file tmp-file
(lambda (out) (display "0123456789" out))) (lambda (out) (display "0123456789" out)))

View file

@ -1,4 +1,4 @@
(define-library (chibi filesystem-test) (define-library (chibi generic-test)
(export run-tests) (export run-tests)
(import (chibi) (chibi generic) (chibi test)) (import (chibi) (chibi generic) (chibi test))
(begin (begin

View file

@ -1,16 +1,19 @@
(define-library (chibi iset-test) (define-library (chibi iset-test)
(export run-tests) (export run-tests)
(import (chibi) (chibi iset) (chibi iset optimize) (srfi 1) (chibi test)) (import (scheme base) (scheme write)
(except (srfi 1) make-list list-copy)
(chibi iset) (chibi iset optimize)
(chibi test))
(begin (begin
(define (run-tests) (define (run-tests)
(define (test-name iset op) (define (test-name iset op)
(call-with-output-string (let ((out (open-output-string)))
(lambda (out) (let* ((ls (iset->list iset))
(let* ((ls (iset->list iset)) (ls (if (> (length ls) 10)
(ls (if (> (length ls) 10) `(,@(take ls 5) ... ,@(take-right ls 5))
`(,@(take ls 5) ... ,@(take-right ls 5)) ls)))
ls))) (write `(,(car op) (iset ,@ls) ,@(cdr op)) out)
(write `(,(car op) (iset ,@ls) ,@(cdr op)) out))))) (get-output-string out))))
(test-begin "iset") (test-begin "iset")
@ -122,10 +125,10 @@
;; initial creation and sanity checks ;; initial creation and sanity checks
(test-assert (lset= equal? ls2 (iset->list is))) (test-assert (lset= equal? ls2 (iset->list is)))
(test (length ls2) (iset-size is)) (test (length ls2) (iset-size is))
(test-assert (call-with-output-string (test-assert (let ((out (open-output-string)))
(lambda (out) (display "init: " out)
(display "init: " out) (write ls out)
(write ls out))) (get-output-string out))
(every (every
(lambda (x) (iset-contains? is x)) (lambda (x) (iset-contains? is x))
ls)) ls))

View file

@ -68,7 +68,7 @@
(chibi iset constructors)) (chibi iset constructors))
(export (export
%make-iset make-iset iset? iset-contains? Integer-Set %make-iset make-iset iset? iset-contains? Integer-Set
iset iset-copy list->iset list->iset! iset-map iset iset-copy list->iset list->iset!
iset-adjoin iset-adjoin! iset-delete iset-delete! iset-adjoin iset-adjoin! iset-delete iset-delete!
iset-union iset-union! iset-intersection iset-intersection! iset-union iset-union! iset-intersection iset-intersection!
iset-difference iset-difference! iset-difference iset-difference!

View file

@ -1,6 +1,11 @@
(define-library (chibi iset base) (define-library (chibi iset base)
(import (chibi) (srfi 9) (srfi 33)) (cond-expand
(chibi (import (chibi) (srfi 9)))
(else (import (scheme base))))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(include "base.scm") (include "base.scm")
(export (export
%make-iset make-iset iset? iset-contains? Integer-Set %make-iset make-iset iset? iset-contains? Integer-Set

View file

@ -1,6 +1,12 @@
(define-library (chibi iset constructors) (define-library (chibi iset constructors)
(import (chibi) (srfi 33) (chibi iset base) (chibi iset iterators)) (cond-expand
(chibi (import (chibi)))
(else (import (scheme base))))
(import (chibi iset base) (chibi iset iterators))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(include "constructors.scm") (include "constructors.scm")
(export (export
iset iset-copy list->iset list->iset! iset-map iset iset-copy list->iset list->iset! iset-map

View file

@ -1,6 +1,12 @@
(define-library (chibi iset iterators) (define-library (chibi iset iterators)
(import (chibi) (srfi 9) (srfi 33) (chibi iset base)) (cond-expand
(chibi (import (chibi) (srfi 9)))
(else (import (scheme base))))
(import (chibi iset base))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(include "iterators.scm") (include "iterators.scm")
(export (export
iset-empty? iset-fold iset-fold-node iset-for-each iset-for-each-node iset-empty? iset-fold iset-fold-node iset-for-each iset-for-each-node

View file

@ -1,9 +1,19 @@
(define-library (chibi iset optimize) (define-library (chibi iset optimize)
(import (chibi) (srfi 9) (srfi 33) (cond-expand
(chibi iset base) (chibi (import (chibi) (srfi 9)))
(else (import (scheme base))))
(import (chibi iset base)
(chibi iset iterators) (chibi iset iterators)
(chibi iset constructors)) (chibi iset constructors))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else
(import (srfi 33))
(begin
(define (%mask size) (bitwise-not (arithmetic-shift -1 size)))
(define (extract-bit-field size position n)
(bitwise-and (%mask size) (arithmetic-shift n (- position)))))))
(include "optimize.scm") (include "optimize.scm")
(export (export
iset-balance iset-balance! iset-optimize iset-optimize! iset->code)) iset-balance iset-balance! iset-optimize iset-optimize! iset->code))

View file

@ -1,6 +1,9 @@
(define-library (chibi math prime) (define-library (chibi math prime)
(import (scheme base) (scheme inexact) (srfi 27) (srfi 33)) (import (scheme base) (scheme inexact) (srfi 27))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(export prime? nth-prime prime-above prime-below factor perfect? (export prime? nth-prime prime-above prime-below factor perfect?
totient aliquot totient aliquot
provable-prime? probable-prime? provable-prime? probable-prime?

View file

@ -1,8 +1,10 @@
(define-library (chibi parse-test) (define-library (chibi parse-test)
(export run-tests) (export run-tests)
(import (chibi) (chibi test) (import (scheme base) (scheme char)
(chibi char-set) (chibi char-set ascii) (chibi test) (chibi parse) (chibi parse common))
(chibi parse) (chibi parse common)) (cond-expand
(chibi (import (chibi char-set) (chibi char-set ascii)))
(else (import (srfi 14))))
(begin (begin
(define (run-tests) (define (run-tests)
(test-begin "parse") (test-begin "parse")
@ -73,68 +75,73 @@
;; partial match (grammar isn't checking end) ;; partial match (grammar isn't checking end)
(test 42 (parse term "42*"))) (test 42 (parse term "42*")))
(define calculator (let ()
(grammar expr (define calculator
(space ((: ,char-set:whitespace ,space)) (grammar expr
(() #f)) (space ((: ,char-set:whitespace ,space))
(digit ((=> d ,char-set:digit) d)) (() #f))
(number ((=> n (+ ,digit)) (digit ((=> d ,char-set:digit) d))
(string->number (list->string n)))) (number ((=> n (+ ,digit))
(simple ((=> n ,number) n) (string->number (list->string n))))
((: "(" (=> e1 ,expr) ")") e1)) (simple ((=> n ,number) n)
(term-op ("*" *) ((: "(" (=> e1 ,expr) ")") e1))
("/" /) (term-op ("*" *)
("%" modulo)) ("/" /)
(term ((: (=> e1 ,simple) ,space (=> op ,term-op) ,space (=> e2 ,term)) ("%" modulo))
(op e1 e2)) (term ((: (=> e1 ,simple) ,space (=> op ,term-op) ,space
((=> e1 ,simple) (=> e2 ,term))
e1)) (op e1 e2))
(expr-op ("+" +) ("-" -)) ((=> e1 ,simple)
(expr ((: ,space (=> e1 ,term) ,space (=> op ,expr-op) ,space (=> e2 ,expr)) e1))
(op e1 e2)) (expr-op ("+" +) ("-" -))
((: ,space (=> e1 ,term)) (expr ((: ,space (=> e1 ,term) ,space (=> op ,expr-op) ,space
e1)))) (=> e2 ,expr))
(op e1 e2))
((: ,space (=> e1 ,term))
e1))))
(test 42 (parse calculator "42")) (test 42 (parse calculator "42"))
(test 4 (parse calculator "2 + 2")) (test 4 (parse calculator "2 + 2"))
(test 23 (parse calculator "2 + 2*10 + 1")) (test 23 (parse calculator "2 + 2*10 + 1"))
(test 25 (parse calculator "2+2 * 10+1 * 3")) (test 25 (parse calculator "2+2 * 10+1 * 3"))
(test 41 (parse calculator "(2 + 2) * 10 + 1")) (test 41 (parse calculator "(2 + 2) * 10 + 1")))
(define prec-calc (let ()
(grammar expr (define prec-calc
(simple (,(parse-integer)) (grammar expr
((: "(" (=> e1 ,expr) ")") e1)) (simple (,(parse-integer))
(op ((: "(" (=> e1 ,expr) ")") e1))
("+" '+) ("-" '-) ("*" '*) ("/" '/) ("^" '^)) (op
(expr ("+" '+) ("-" '-) ("*" '*) ("/" '/) ("^" '^))
(,(parse-binary-op op (expr
`((+ 5) (- 5) (* 3) (/ 3) (^ 1 right)) (,(parse-binary-op op
simple))))) `((+ 5) (- 5) (* 3) (/ 3) (^ 1 right))
simple)))))
(test 42 (parse prec-calc "42")) (test 42 (parse prec-calc "42"))
(test '(+ 2 2) (parse prec-calc "2 + 2")) (test '(+ 2 2) (parse prec-calc "2 + 2"))
(test '(+ (+ 2 2) 2) (parse prec-calc "2 + 2 + 2")) (test '(+ (+ 2 2) 2) (parse prec-calc "2 + 2 + 2"))
(test '(+ (+ 2 (* 2 10)) 1) (parse prec-calc "2 + 2*10 + 1")) (test '(+ (+ 2 (* 2 10)) 1) (parse prec-calc "2 + 2*10 + 1"))
(test '(+ (+ 2 (* 2 10)) (* 1 3)) (parse prec-calc "2+2 * 10+1 * 3")) (test '(+ (+ 2 (* 2 10)) (* 1 3)) (parse prec-calc "2+2 * 10+1 * 3"))
(test '(+ (* (+ 2 2) 10) 1) (parse prec-calc "(2 + 2) * 10 + 1")) (test '(+ (* (+ 2 2) 10) 1) (parse prec-calc "(2 + 2) * 10 + 1"))
(test '(^ 2 (^ 2 2)) (parse prec-calc "2 ^ 2 ^ 2")) (test '(^ 2 (^ 2 2)) (parse prec-calc "2 ^ 2 ^ 2"))
(test '(+ (+ (+ 1 (* (* 2 (^ 3 (^ 4 5))) 6)) (^ 7 8)) 9) (test '(+ (+ (+ 1 (* (* 2 (^ 3 (^ 4 5))) 6)) (^ 7 8)) 9)
(parse prec-calc "1 + 2 * 3 ^ 4 ^ 5 * 6 + 7 ^ 8 + 9")) (parse prec-calc "1 + 2 * 3 ^ 4 ^ 5 * 6 + 7 ^ 8 + 9")))
;; this takes exponential time without memoization ;; this takes exponential time without memoization
(define explode (let ()
(grammar start (define explode
(start ((: ,S eos) #t)) (grammar start
(S ((+ ,A) #t)) (start ((: ,S eos) #t))
(A ((: "a" ,S "b") #t) (S ((+ ,A) #t))
((: "a" ,S "c") #t) (A ((: "a" ,S "b") #t)
((: "a") #t)))) ((: "a" ,S "c") #t)
((: "a") #t))))
(test-assert (parse explode "aaabb")) (test-assert (parse explode "aaabb"))
(test-not (parse explode "bbaa")) (test-not (parse explode "bbaa"))
(test-assert (test-assert
(parse explode (parse explode
(string-append (make-string 10 #\a) (make-string 8 #\c)))) (string-append (make-string 10 #\a) (make-string 8 #\c)))))
(test-end)))) (test-end))))

View file

@ -14,15 +14,13 @@
parse-string parse-token parse-sre parse-string parse-token parse-sre
parse-beginning parse-end parse-beginning parse-end
parse-beginning-of-line parse-end-of-line parse-beginning-of-line parse-end-of-line
parse-beginning-of-line parse-end-of-line
parse-beginning-of-word parse-end-of-word parse-beginning-of-word parse-end-of-word
parse-word parse-word+ parse-word parse-word+
parse-with-failure-reason parse-with-failure-reason
make-parse-stream) make-parse-stream)
(import (chibi) (chibi char-set) (srfi 9))
(include "parse/parse.scm")
(cond-expand (cond-expand
(chibi (chibi
(import (chibi) (chibi char-set) (srfi 9))
(begin (begin
(define-syntax grammar-bind (define-syntax grammar-bind
(er-macro-transformer (er-macro-transformer
@ -59,6 +57,7 @@
(cons (list name new-tmp) bindings)))) (cons (list name new-tmp) bindings))))
(append k (list f bindings))))))))) (append k (list f bindings)))))))))
(else (else
(import (scheme base) (scheme char) (scheme file) (srfi 14))
(begin (begin
(define-syntax grammar-bind (define-syntax grammar-bind
(syntax-rules () (syntax-rules ()
@ -77,4 +76,5 @@
(lambda (r s i fk) (set! new-tmp r) (sk r s i fk)) (lambda (r s i fk) (set! new-tmp r) (sk r s i fk))
(lambda (s i r) (set! new-tmp save-tmp) (fk s i r))))) (lambda (s i r) (set! new-tmp save-tmp) (fk s i r)))))
((var tmp) ... (name new-tmp))) ((var tmp) ... (name new-tmp)))
(k ... f ((var tmp) ...))))))))))) (k ... f ((var tmp) ...))))))))))
(include "parse/parse.scm"))

View file

@ -7,5 +7,8 @@
parse-ipv4-address parse-ipv6-address parse-ip-address parse-ipv4-address parse-ipv6-address parse-ip-address
parse-domain parse-common-domain parse-email parse-uri parse-domain parse-common-domain parse-email parse-uri
char-hex-digit? char-octal-digit?) char-hex-digit? char-octal-digit?)
(import (chibi) (chibi parse)) (cond-expand
(chibi (import (chibi)))
(else (import (scheme base) (scheme char))))
(import (chibi parse))
(include "common.scm")) (include "common.scm"))

View file

@ -1,6 +1,6 @@
(define-library (chibi pathname-test) (define-library (chibi pathname-test)
(export run-tests) (export run-tests)
(import (chibi) (chibi pathname) (chibi test)) (import (scheme base) (chibi pathname) (chibi test))
(begin (begin
(define (run-tests) (define (run-tests)
(test-begin "pathname") (test-begin "pathname")

View file

@ -80,7 +80,7 @@
(define (path-strip-leading-parents path) (define (path-strip-leading-parents path)
(if (string-prefix? "../" path) (if (string-prefix? "../" path)
(path-strip-leading-parents (substring path 3)) (path-strip-leading-parents (substring-cursor path 3))
(if (equal? path "..") "" path))) (if (equal? path "..") "" path)))
;;> Returns \scheme{#t} iff \var{path} is an absolute path, ;;> Returns \scheme{#t} iff \var{path} is an absolute path,

View file

@ -4,5 +4,8 @@
path-extension path-strip-extension path-replace-extension path-extension path-strip-extension path-replace-extension
path-absolute? path-relative? path-strip-leading-parents path-absolute? path-relative? path-strip-leading-parents
path-relative-to path-resolve path-normalize make-path) path-relative-to path-resolve path-normalize make-path)
(import (chibi) (chibi string)) (cond-expand
(chibi (import (chibi)))
(else (import (except (scheme base) string-map string-for-each))))
(import (chibi string))
(include "pathname.scm")) (include "pathname.scm"))

View file

@ -8,7 +8,10 @@
regexp-match-submatch regexp-match-submatch/list regexp-match-submatch regexp-match-submatch/list
regexp-match-submatch-start regexp-match-submatch-end regexp-match-submatch-start regexp-match-submatch-end
regexp-match->list regexp-match->sexp) regexp-match->list regexp-match->sexp)
(import (srfi 33) (srfi 69)) (import (srfi 69))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
;; Chibi's char-set library is more factored than SRFI-14. ;; Chibi's char-set library is more factored than SRFI-14.
(cond-expand (cond-expand
(chibi (chibi

View file

@ -2,6 +2,9 @@
(define-library (chibi regexp pcre) (define-library (chibi regexp pcre)
(export pcre->sre pcre->regexp) (export pcre->sre pcre->regexp)
(import (scheme base) (scheme char) (scheme cxr) (import (scheme base) (scheme char) (scheme cxr)
(srfi 1) (srfi 33) (srfi 1)
(chibi string) (chibi regexp)) (chibi string) (chibi regexp))
(cond-expand
((library (srfi 60)) (import (srfi 60)))
(else (import (srfi 33))))
(include "pcre.scm")) (include "pcre.scm"))

View file

@ -1,16 +1,22 @@
(define-library (chibi scribble-test) (define-library (chibi scribble-test)
(export run-tests) (export run-tests)
(import (chibi) (chibi scribble) (only (chibi test) test-begin test test-end)) (import (scheme base) (scheme write) (chibi scribble)
(only (chibi test) test-begin test test-end))
(begin (begin
(define (call-with-output-string proc)
(let ((out (open-output-string)))
(proc out)
(get-output-string out)))
(define (call-with-input-string str proc)
(proc (open-input-string str)))
(define (test-scribble expect str)
(test (call-with-output-string (lambda (out) (write str out)))
expect
(call-with-input-string str scribble-parse)))
(define (run-tests) (define (run-tests)
(test-begin "scribble") (test-begin "scribble")
(define (test-scribble expect str)
(test (call-with-output-string (lambda (out) (write str out)))
expect
(call-with-input-string str scribble-parse)))
(test-scribble '((foo "blah blah blah")) "\\foo{blah blah blah}") (test-scribble '((foo "blah blah blah")) "\\foo{blah blah blah}")
(test-scribble '((foo "blah \"blah\" (`blah'?)")) "\\foo{blah \"blah\" (`blah'?)}") (test-scribble '((foo "blah \"blah\" (`blah'?)")) "\\foo{blah \"blah\" (`blah'?)}")
(test-scribble '((foo 1 2 "3 4")) "\\foo[1 2]{3 4}") (test-scribble '((foo 1 2 "3 4")) "\\foo[1 2]{3 4}")

View file

@ -67,7 +67,7 @@
((eqv? #\. ch) ((eqv? #\. ch)
(read-char in) (read-char in)
(if (= base 10) (if (= base 10)
(begin (read-char in) (read-float-tail in (exact->inexact acc))) (begin (read-char in) (read-float-tail in (inexact acc)))
(error "non-base-10 floating point"))) (error "non-base-10 floating point")))
(else (error "invalid numeric syntax")))))) (else (error "invalid numeric syntax"))))))

View file

@ -1,5 +1,5 @@
(define-library (chibi scribble) (define-library (chibi scribble)
(export scribble-parse scribble-read) (export scribble-parse scribble-read)
(import (chibi)) (import (scheme base) (scheme char) (scheme read))
(include "scribble.scm")) (include "scribble.scm"))

View file

@ -311,11 +311,11 @@
delightful delightful
wubbleflubbery)\n") wubbleflubbery)\n")
(test-pretty '(test-pretty
"#(0 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 "#(0 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)\n") 26 27 28 29 30 31 32 33 34 35 36 37)\n")
(test-pretty '(test-pretty
"(0 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 "(0 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)\n") 26 27 28 29 30 31 32 33 34 35 36 37)\n")

View file

@ -1,8 +1,13 @@
(define-library (chibi string-test) (define-library (chibi string-test)
(export run-tests) (export run-tests)
(import (only (chibi test) test-begin test test-end) (import (scheme base) (scheme char)
(only (chibi test) test-begin test test-end)
(chibi string)) (chibi string))
(begin (begin
(define (digit-value ch)
(case ch
((#\0) 0) ((#\1) 1) ((#\2) 2) ((#\3) 3) ((#\4) 4)
((#\5) 5) ((#\6) 6) ((#\7) 7) ((#\8) 8) ((#\9) 9) (else #f)))
(define (run-tests) (define (run-tests)
(test-begin "strings") (test-begin "strings")
@ -14,11 +19,6 @@
(test #f (string-every char-alphabetic? " abc")) (test #f (string-every char-alphabetic? " abc"))
(test #f (string-every char-alphabetic? "a.c")) (test #f (string-every char-alphabetic? "a.c"))
(define (digit-value ch)
(case ch
((#\0) 0) ((#\1) 1) ((#\2) 2) ((#\3) 3) ((#\4) 4)
((#\5) 5) ((#\6) 6) ((#\7) 7) ((#\8) 8) ((#\9) 9) (else #f)))
(test 3 (string-any digit-value "a3c")) (test 3 (string-any digit-value "a3c"))
(test #f (string-any digit-value "abc")) (test #f (string-any digit-value "abc"))

View file

@ -1,5 +1,5 @@
;; strings.scm -- cursor-oriented string library ;; strings.scm -- cursor-oriented string library
;; Copyright (c) 2012 Alex Shinn. All rights reserved. ;; Copyright (c) 2012-2015 Alex Shinn. All rights reserved.
;; BSD-style license: http://synthcode.com/license.txt ;; BSD-style license: http://synthcode.com/license.txt
(define (string-null? str) (define (string-null? str)
@ -164,26 +164,6 @@
(let ((pred (make-char-predicate x))) (let ((pred (make-char-predicate x)))
(string-fold (lambda (ch count) (if (pred ch) (+ count 1) count)) 0 str))) (string-fold (lambda (ch count) (if (pred ch) (+ count 1) count)) 0 str)))
(define (string-for-each proc str . los)
(if (null? los)
(string-fold (lambda (ch a) (proc ch)) #f str)
(let ((los (cons str los)))
(let lp ((is (map string-cursor-start los)))
(cond
((any (lambda (str i)
(string-cursor>=? i (string-cursor-end str)))
los is))
(else
(apply proc (map string-cursor-ref los is))
(lp (map string-cursor-next los is))))))))
(define (string-map proc str . los)
(call-with-output-string
(lambda (out)
(apply string-for-each
(lambda args (write-char (apply proc args) out))
str los))))
(define (make-string-searcher needle) (define (make-string-searcher needle)
(lambda (haystack) (string-contains haystack needle))) (lambda (haystack) (string-contains haystack needle)))

View file

@ -13,5 +13,62 @@
string-fold string-fold-right string-map string-for-each string-fold string-fold-right string-map string-for-each
string-contains make-string-searcher string-contains make-string-searcher
string-downcase-ascii string-upcase-ascii) string-downcase-ascii string-upcase-ascii)
(import (chibi) (chibi ast) (chibi char-set base)) (cond-expand
(chibi
(import (chibi) (chibi ast) (chibi char-set base))
(begin
(define (string-for-each proc str . los)
(if (null? los)
(string-fold (lambda (ch a) (proc ch)) #f str)
(let ((los (cons str los)))
(let lp ((is (map string-cursor-start los)))
(cond
((any (lambda (str i)
(string-cursor>=? i (string-cursor-end str)))
los is))
(else
(apply proc (map string-cursor-ref los is))
(lp (map string-cursor-next los is))))))))
(define (string-map proc str . los)
(call-with-output-string
(lambda (out)
(apply string-for-each
(lambda args (write-char (apply proc args) out))
str los))))))
(else
(import (scheme base) (scheme char) (srfi 14)
(except (srfi 1) make-list list-copy))
(begin
(define string-cursor<? <)
(define string-cursor>? >)
(define string-cursor=? =)
(define string-cursor<=? <=)
(define string-cursor>=? >=)
(define string-cursor-ref string-ref)
(define (string-cursor-start s) 0)
(define string-cursor-end string-length)
(define (string-cursor-next s i) (+ i 1))
(define (string-cursor-prev s i) (- i 1))
(define (substring-cursor s start . o)
(substring s start (if (pair? o) (car o) (string-length s))))
(define (string-concatenate ls) (apply string-append ls))
(define string-size string-length)
(define (call-with-output-string proc)
(let ((out (open-output-string)))
(proc out)
(get-output-string out))))))
(cond-expand
(chibi)
((library (srfi 13))
(import (only (srfi 13) string-contains)))
(else
(begin
(define (string-contains a b)
(let ((alen (string-length a))
(blen (string-length b)))
(let lp ((i 0))
(and (<= (+ i blen) alen)
(if (string=? b (substring a i (+ i blen)))
i
(lp (+ i 1))))))))))
(include "string.scm")) (include "string.scm"))

View file

@ -64,7 +64,7 @@
(when (not (and (exact-integer? blue-level) (<= 0 blue-level 5))) (when (not (and (exact-integer? blue-level) (<= 0 blue-level 5)))
(error "invalid blue-level value" blue-level)) (error "invalid blue-level value" blue-level))
(string-append (string-append
"\x1B[38;5;" "\x1B;[38;5;"
(number->string (+ (* 36 red-level) (* 6 green-level) blue-level 16)) (number->string (+ (* 36 red-level) (* 6 green-level) blue-level 16))
"m")) "m"))
@ -78,7 +78,7 @@
(define (gray-escape gray-level) (define (gray-escape gray-level)
(when (not (and (exact-integer? gray-level) (<= 0 gray-level 23))) (when (not (and (exact-integer? gray-level) (<= 0 gray-level 23)))
(error "invalid gray-level value" gray-level)) (error "invalid gray-level value" gray-level))
(string-append "\x1B[38;5;" (string-append "\x1B;[38;5;"
(number->string (+ gray-level 232)) (number->string (+ gray-level 232))
"m")) "m"))
@ -196,7 +196,7 @@
(when (not (and (exact-integer? blue-level) (<= 0 blue-level 5))) (when (not (and (exact-integer? blue-level) (<= 0 blue-level 5)))
(error "invalid blue-level value" blue-level)) (error "invalid blue-level value" blue-level))
(string-append (string-append
"\x1B[48;5;" "\x1B;[48;5;"
(number->string (+ (* 36 red-level) (* 6 green-level) blue-level 16)) (number->string (+ (* 36 red-level) (* 6 green-level) blue-level 16))
"m")) "m"))
@ -210,7 +210,7 @@
(define (gray-background-escape gray-level) (define (gray-background-escape gray-level)
(when (not (and (exact-integer? gray-level) (<= 0 gray-level 23))) (when (not (and (exact-integer? gray-level) (<= 0 gray-level 23)))
(error "invalid gray-level value" gray-level)) (error "invalid gray-level value" gray-level))
(string-append "\x1B[48;5;" (string-append "\x1B;[48;5;"
(number->string (+ gray-level 232)) (number->string (+ gray-level 232))
"m")) "m"))

View file

@ -5,22 +5,20 @@
test-group current-test-group test-group current-test-group
test-begin test-end test-syntax-error test-propagate-info test-begin test-end test-syntax-error test-propagate-info
test-vars test-run test-exit test-vars test-run test-exit
current-test-verbosity current-test-epsilon current-test-comparator current-test-verbosity
current-test-applier current-test-handler current-test-skipper current-test-applier current-test-handler current-test-skipper
current-test-group-reporter test-failure-count current-test-group-reporter test-failure-count
current-test-epsilon current-test-comparator) current-test-epsilon current-test-comparator)
(import (scheme write) (import (scheme base)
(scheme write)
(scheme complex) (scheme complex)
(scheme process-context) (scheme process-context)
(scheme time) (scheme time)
(chibi term ansi)) (chibi term ansi))
(cond-expand (cond-expand
(chibi (chibi
(import (except (scheme base) guard) (import (only (chibi) pair-source print-exception protect)))
(rename (only (chibi) pair-source print-exception protect)
(protect guard))))
(else (else
(import (scheme base))
(begin (begin
(define (pair-source x) #f) (define (pair-source x) #f)
(define print-exception write)))) (define print-exception write))))

View file

@ -1,6 +1,6 @@
(define-library (chibi uri-test) (define-library (chibi uri-test)
(export run-tests) (export run-tests)
(import (chibi) (chibi test) (chibi uri)) (import (scheme base) (chibi test) (chibi uri))
(begin (begin
(define (run-tests) (define (run-tests)
(test-begin "uri") (test-begin "uri")

View file

@ -5,5 +5,14 @@
uri-with-scheme uri-with-user uri-with-host uri-with-path uri-with-scheme uri-with-user uri-with-host uri-with-path
uri-with-query uri-with-fragment uri-resolve uri-with-query uri-with-fragment uri-resolve
uri-encode uri-decode uri-query->alist uri-alist->query) uri-encode uri-decode uri-query->alist uri-alist->query)
(import (chibi) (chibi string) (chibi pathname) (srfi 9)) (cond-expand
(chibi
(import (chibi) (srfi 9)))
(else
(import (except (scheme base) string-map string-for-each)
(scheme char))
(begin
(define (string-concatenate ls)
(apply string-append ls)))))
(import (chibi string) (chibi pathname))
(include "uri.scm")) (include "uri.scm"))

View file

@ -18,7 +18,39 @@
lset<= lset= lset-adjoin lset-union lset-union! lset-intersection lset<= lset= lset-adjoin lset-union lset-union! lset-intersection
lset-intersection! lset-difference lset-difference! lset-xor lset-xor! lset-intersection! lset-difference lset-difference! lset-xor lset-xor!
lset-diff+intersection lset-diff+intersection!) lset-diff+intersection lset-diff+intersection!)
(import (chibi)) (cond-expand
(chibi
(import (chibi)))
(else
(import (scheme base))
(begin
(define reverse! reverse)
(define (find-tail pred ls)
(and (pair? ls) (if (pred (car ls)) ls (find-tail pred (cdr ls)))))
(define (find pred ls)
(cond ((find-tail pred ls) => car) (else #f)))
(define (any pred ls . lol)
(define (any1 pred ls)
(if (pair? (cdr ls))
((lambda (x) (if x x (any1 pred (cdr ls)))) (pred (car ls)))
(pred (car ls))))
(define (anyn pred lol)
(if (every pair? lol)
((lambda (x) (if x x (anyn pred (map cdr lol))))
(apply pred (map car lol)))
#f))
(if (null? lol)
(if (pair? ls) (any1 pred ls) #f)
(anyn pred (cons ls lol))))
(define (every pred ls . lol)
(define (every1 pred ls)
(if (null? (cdr ls))
(pred (car ls))
(if (pred (car ls)) (every1 pred (cdr ls)) #f)))
(if (null? lol)
(if (pair? ls) (every1 pred ls) #t)
(not (apply any (lambda xs (not (apply pred xs))) ls lol))))
)))
(include "1/predicates.scm" (include "1/predicates.scm"
"1/selectors.scm" "1/selectors.scm"
"1/search.scm" "1/search.scm"
@ -28,4 +60,3 @@
"1/deletion.scm" "1/deletion.scm"
"1/alists.scm" "1/alists.scm"
"1/lset.scm")) "1/lset.scm"))

View file

@ -15,20 +15,27 @@
(rename (chibi crypto md5-test) (run-tests run-md5-tests)) (rename (chibi crypto md5-test) (run-tests run-md5-tests))
(rename (chibi crypto rsa-test) (run-tests run-rsa-tests)) (rename (chibi crypto rsa-test) (run-tests run-rsa-tests))
(rename (chibi crypto sha2-test) (run-tests run-sha2-tests)) (rename (chibi crypto sha2-test) (run-tests run-sha2-tests))
;;(rename (chibi filesystem-test) (run-tests run-filesystem-tests))
(rename (chibi generic-test) (run-tests run-generic-tests))
(rename (chibi io-test) (run-tests run-io-tests)) (rename (chibi io-test) (run-tests run-io-tests))
(rename (chibi iset-test) (run-tests run-iset-tests)) (rename (chibi iset-test) (run-tests run-iset-tests))
(rename (chibi loop-test) (run-tests run-loop-tests)) (rename (chibi loop-test) (run-tests run-loop-tests))
(rename (chibi match-test) (run-tests run-match-tests)) (rename (chibi match-test) (run-tests run-match-tests))
(rename (chibi math prime-test) (run-tests run-prime-tests)) (rename (chibi math prime-test) (run-tests run-prime-tests))
;;(rename (chibi memoize-test) (run-tests run-memoize-tests))
(rename (chibi mime-test) (run-tests run-mime-tests)) (rename (chibi mime-test) (run-tests run-mime-tests))
(rename (chibi parse-test) (run-tests run-parse-tests)) (rename (chibi parse-test) (run-tests run-parse-tests))
(rename (chibi pathname-test) (run-tests run-pathname-tests))
(rename (chibi process-test) (run-tests run-process-tests)) (rename (chibi process-test) (run-tests run-process-tests))
(rename (chibi regexp-test) (run-tests run-regexp-tests)) (rename (chibi regexp-test) (run-tests run-regexp-tests))
(rename (chibi scribble-test) (run-tests run-scribble-tests)) (rename (chibi scribble-test) (run-tests run-scribble-tests))
(rename (chibi show-test) (run-tests run-show-tests))
(rename (chibi string-test) (run-tests run-string-tests))
(rename (chibi system-test) (run-tests run-system-tests)) (rename (chibi system-test) (run-tests run-system-tests))
(rename (chibi tar-test) (run-tests run-tar-tests)) (rename (chibi tar-test) (run-tests run-tar-tests))
(rename (chibi term ansi-test) (run-tests run-term-ansi-tests)) (rename (chibi term ansi-test) (run-tests run-term-ansi-tests))
(rename (chibi uri-test) (run-tests run-uri-tests)) (rename (chibi uri-test) (run-tests run-uri-tests))
;;(rename (chibi weak-test) (run-tests run-weak-tests))
) )
(test-begin "libraries") (test-begin "libraries")
@ -44,6 +51,7 @@
(run-srfi-95-tests) (run-srfi-95-tests)
(run-srfi-99-tests) (run-srfi-99-tests)
(run-base64-tests) (run-base64-tests)
(run-generic-tests)
(run-io-tests) (run-io-tests)
(run-iset-tests) (run-iset-tests)
(run-loop-tests) (run-loop-tests)
@ -51,12 +59,15 @@
(run-md5-tests) (run-md5-tests)
(run-mime-tests) (run-mime-tests)
(run-parse-tests) (run-parse-tests)
(run-pathname-tests)
(run-prime-tests) (run-prime-tests)
(run-process-tests) (run-process-tests)
(run-regexp-tests) (run-regexp-tests)
(run-rsa-tests) (run-rsa-tests)
(run-scribble-tests) (run-scribble-tests)
(run-string-tests)
(run-sha2-tests) (run-sha2-tests)
(run-show-tests)
(run-system-tests) (run-system-tests)
(run-tar-tests) (run-tar-tests)
(run-term-ansi-tests) (run-term-ansi-tests)