mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 13:00:26 +02:00
(let-keywords, let-keywords*, let-optional,
let-optional*): Add tests of internal defines when no bindings.
This commit is contained in:
parent
c5bc6e2e2e
commit
dd64bb8e18
1 changed files with 89 additions and 2 deletions
|
@ -18,8 +18,9 @@
|
|||
;;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
;;;; Boston, MA 02111-1307 USA
|
||||
|
||||
(use-modules (test-suite lib)
|
||||
(ice-9 optargs))
|
||||
(define-module (test-suite test-optargs)
|
||||
:use-module (test-suite lib)
|
||||
:use-module (ice-9 optargs))
|
||||
|
||||
(with-test-prefix "optional argument processing"
|
||||
(define* (test-1 #:optional (x 0))
|
||||
|
@ -27,3 +28,89 @@
|
|||
#t)
|
||||
(pass-if "local defines work with optional arguments"
|
||||
(false-if-exception (test-1))))
|
||||
|
||||
;;;
|
||||
;;; let-keywords
|
||||
;;;
|
||||
|
||||
(with-test-prefix "let-keywords"
|
||||
|
||||
;; in guile 1.6.4 and earlier, an empty binding list only used `begin',
|
||||
;; which caused apparently internal defines to "leak" out into the
|
||||
;; encompasing environment
|
||||
(pass-if-exception "empty bindings internal defines leaking out"
|
||||
exception:unbound-var
|
||||
(let ((rest '()))
|
||||
(let-keywords rest #f ()
|
||||
(define localvar #f)
|
||||
#f)
|
||||
localvar))
|
||||
|
||||
(pass-if "one key"
|
||||
(let-keywords '(#:foo 123) #f (foo)
|
||||
(= foo 123))))
|
||||
|
||||
;;;
|
||||
;;; let-keywords*
|
||||
;;;
|
||||
|
||||
(with-test-prefix "let-keywords*"
|
||||
|
||||
;; in guile 1.6.4 and earlier, an empty binding list only used `begin',
|
||||
;; which caused apparently internal defines to "leak" out into the
|
||||
;; encompasing environment
|
||||
(pass-if-exception "empty bindings internal defines leaking out"
|
||||
exception:unbound-var
|
||||
(let ((rest '()))
|
||||
(let-keywords* rest #f ()
|
||||
(define localvar #f)
|
||||
#f)
|
||||
localvar))
|
||||
|
||||
(pass-if "one key"
|
||||
(let-keywords* '(#:foo 123) #f (foo)
|
||||
(= foo 123))))
|
||||
|
||||
;;;
|
||||
;;; let-optional
|
||||
;;;
|
||||
|
||||
(with-test-prefix "let-optional"
|
||||
|
||||
;; in guile 1.6.4 and earlier, an empty binding list only used `begin',
|
||||
;; which caused apparently internal defines to "leak" out into the
|
||||
;; encompasing environment
|
||||
(pass-if-exception "empty bindings internal defines leaking out"
|
||||
exception:unbound-var
|
||||
(let ((rest '()))
|
||||
(let-optional rest ()
|
||||
(define localvar #f)
|
||||
#f)
|
||||
localvar))
|
||||
|
||||
(pass-if "one var"
|
||||
(let ((rest '(123)))
|
||||
(let-optional rest ((foo 999))
|
||||
(= foo 123)))))
|
||||
|
||||
;;;
|
||||
;;; let-optional*
|
||||
;;;
|
||||
|
||||
(with-test-prefix "let-optional*"
|
||||
|
||||
;; in guile 1.6.4 and earlier, an empty binding list only used `begin',
|
||||
;; which caused apparently internal defines to "leak" out into the
|
||||
;; encompasing environment
|
||||
(pass-if-exception "empty bindings internal defines leaking out"
|
||||
exception:unbound-var
|
||||
(let ((rest '()))
|
||||
(let-optional* rest ()
|
||||
(define localvar #f)
|
||||
#f)
|
||||
localvar))
|
||||
|
||||
(pass-if "one var"
|
||||
(let ((rest '(123)))
|
||||
(let-optional* rest ((foo 999))
|
||||
(= foo 123)))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue