123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- ;;; r6rs-control.test --- Test suite for R6RS (rnrs control)
- ;; Copyright (C) 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-rnrs-records-procedural)
- :use-module ((rnrs conditions) :version (6))
- :use-module ((rnrs exceptions) :version (6))
- :use-module ((rnrs records inspection) :version (6))
- :use-module ((rnrs records procedural) :version (6))
- :use-module (test-suite lib))
- (with-test-prefix "record?"
- (pass-if "record? recognizes non-opaque records"
- (let* ((rec (make-record-type-descriptor 'rec #f #f #f #f '#()))
- (make-rec (record-constructor
- (make-record-constructor-descriptor rec #f #f))))
- (record? (make-rec))))
-
- (pass-if "record? doesn't recognize opaque records"
- (let* ((rec (make-record-type-descriptor 'rec #f #f #f #t '#()))
- (make-rec (record-constructor
- (make-record-constructor-descriptor rec #f #f))))
- (not (record? (make-rec)))))
- (pass-if "record? doesn't recognize non-records" (not (record? 'foo))))
- (with-test-prefix "record-rtd"
- (pass-if "simple"
- (let* ((rtd (make-record-type-descriptor 'rec #f #f #f #f '#()))
- (make-rec (record-constructor
- (make-record-constructor-descriptor rtd #f #f))))
- (eq? (record-rtd (make-rec)) rtd)))
- (pass-if "&assertion on opaque record"
- (let* ((rtd (make-record-type-descriptor 'rec #f #f #f #t '#()))
- (make-rec (record-constructor
- (make-record-constructor-descriptor rtd #f #f)))
- (success #f))
- (call/cc
- (lambda (continuation)
- (with-exception-handler
- (lambda (condition)
- (set! success (assertion-violation? condition))
- (continuation))
- (lambda () (record-rtd (make-rec))))))
- success)))
- (with-test-prefix "record-type-name"
- (pass-if "simple"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #f '#())))
- (eq? (record-type-name rtd) 'foo))))
- (with-test-prefix "record-type-parent"
- (pass-if "eq? to parent"
- (let* ((rtd-parent (make-record-type-descriptor 'foo #f #f #f #f '#()))
- (rtd (make-record-type-descriptor 'bar rtd-parent #f #f #f '#())))
- (eq? (record-type-parent rtd) rtd-parent)))
- (pass-if "#f when parent not present"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #f '#())))
- (not (record-type-parent rtd)))))
- (with-test-prefix "record-type-uid"
- (pass-if "eq? to uid"
- (let* ((uid (gensym))
- (rtd (make-record-type-descriptor uid #f uid #f #f '#())))
- (eq? (record-type-uid rtd) uid)))
- (pass-if "#f when uid not present"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #f '#())))
- (not (record-type-uid rtd)))))
- (with-test-prefix "record-type-generative?"
- (pass-if "#f when uid is not #f"
- (let* ((uid (gensym))
- (rtd (make-record-type-descriptor uid #f uid #f #f '#())))
- (not (record-type-generative? rtd))))
- (pass-if "#t when uid is #f"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #f '#())))
- (record-type-generative? rtd))))
- (with-test-prefix "record-type-sealed?"
- (pass-if "#t when sealed? is #t"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #t #f '#())))
- (record-type-sealed? rtd)))
- (pass-if "#f when sealed? is #f"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #f '#())))
- (not (record-type-sealed? rtd)))))
- (with-test-prefix "record-type-opaque?"
- (pass-if "#t when opaque? is #t"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #t '#())))
- (record-type-opaque? rtd)))
- (pass-if "#f when opaque? is #f"
- (let* ((rtd (make-record-type-descriptor 'foo #f #f #f #f '#())))
- (not (record-type-opaque? rtd))))
- (pass-if "#t when parent is opaque"
- (let* ((parent-rtd (make-record-type-descriptor 'foo #f #f #f #t '#()))
- (rtd (make-record-type-descriptor 'bar parent-rtd #f #f #f '#())))
- (record-type-opaque? rtd))))
- (with-test-prefix "record-type-field-names"
- (pass-if "simple"
- (let* ((rtd (make-record-type-descriptor 'foobar #f #f #f #f
- '#((immutable foo)
- (mutable bar)))))
- (equal? (record-type-field-names rtd) '#(foo bar))))
- (pass-if "parent fields not included"
- (let* ((parent-rtd (make-record-type-descriptor 'foo #f #f #f #f
- '#((mutable foo))))
- (rtd (make-record-type-descriptor 'bar parent-rtd #f #f #f
- '#((immutable bar)))))
- (equal? (record-type-field-names rtd) '#(bar))))
- (pass-if "subtype fields not included"
- (let* ((parent-rtd (make-record-type-descriptor 'foo #f #f #f #f
- '#((mutable foo))))
- (rtd (make-record-type-descriptor 'bar parent-rtd #f #f #f
- '#((immutable bar)))))
- (equal? (record-type-field-names parent-rtd) '#(foo)))))
- (with-test-prefix "record-field-mutable?"
- (pass-if "simple"
- (let* ((rtd (make-record-type-descriptor 'foobar #f #f #f #f
- '#((mutable foo)
- (immutable bar)))))
- (and (record-field-mutable? rtd 0)
- (not (record-field-mutable? rtd 1))))))
|