;;;; srfi-17.test --- test suite for Guile's SRFI-17 functions. -*- scheme -*- ;;;; ;;;; Copyright (C) 2001, 2003, 2005, 2006, 2010 Free Software Foundation, Inc. ;;;; ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public ;;;; License as published by the Free Software Foundation; either ;;;; version 3 of the License, or (at your option) any later version. ;;;; ;;;; This library is distributed in the hope that it will be useful, ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;;; Lesser General Public License for more details. ;;;; ;;;; You should have received a copy of the GNU Lesser General Public ;;;; License along with this library; if not, write to the Free Software ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA (define-module (test-suite test-srfi-17) #:use-module (ice-9 regex) #:use-module (test-suite lib) #:use-module (srfi srfi-17)) (pass-if "cond-expand srfi-17" (cond-expand (srfi-17 #t) (else #f))) ;; ;; car ;; (with-test-prefix "car" ;; this test failed in guile 1.8.1 and 1.6.8 and earlier, since `define' ;; didn't set a name on a procedure-with-setter (pass-if "procedure-name" (if (memq 'procnames (debug-options)) ;; enabled by default (eq? 'car (procedure-name car)) (throw 'unsupported))) (pass-if "set! (car x)" (let ((lst (list 1))) (set! (car lst) 2) (eqv? 2 (car lst))))) ;; ;; set! ;; (define %some-variable #f) (define exception:bad-quote '(quote . "bad syntax")) ;; (put 'pass-if-syntax-error 'scheme-indent-function 1) (define-syntax pass-if-syntax-error (syntax-rules () ((_ name pat exp) (pass-if name (catch 'syntax-error (lambda () exp (error "expected uri-error exception")) (lambda (k who what where form . maybe-subform) (if (if (pair? pat) (and (eq? who (car pat)) (string-match (cdr pat) what)) (string-match pat what)) #t (error "unexpected syntax-error exception" what pat)))))))) (with-test-prefix "set!" (with-test-prefix "target is not procedure with setter" (pass-if-exception "(set! (symbol->string 'x) 1)" exception:wrong-type-arg (set! (symbol->string 'x) 1)) (pass-if-syntax-error "(set! '#f 1)" exception:bad-quote (eval '(set! '#f 1) (interaction-environment)))) (with-test-prefix "target uses macro" (pass-if "(set! (@@ ...) 1)" (eval '(set! (@@ (test-suite test-srfi-17) %some-variable) 1) (interaction-environment)) (equal? %some-variable 1)) ;; The `(quote x)' below used to be memoized as an infinite list before ;; Guile 1.8.3. (pass-if-syntax-error "(set! 'x 1)" exception:bad-quote (eval '(set! 'x 1) (interaction-environment))))) ;; ;; setter ;; (with-test-prefix "setter" (pass-if-exception "set! (setter x)" (cons 'misc-error ".*") (set! (setter car) noop)) (pass-if "car" (eq? set-car! (setter car))))