;;;; procprop.test --- Procedure properties -*- mode: scheme; coding: utf-8; -*-
;;;; Ludovic Courtès <ludo@gnu.org>
;;;;
-;;;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+;;;; Copyright (C) 2009, 2010, 2011, 2012 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
(eq? 'display (procedure-name display)))
(pass-if "gsubr"
- (eq? 'hashq-ref (procedure-name hashq-ref))))
+ (eq? 'hashq-ref (procedure-name hashq-ref)))
+
+ (pass-if "from eval"
+ (eq? 'foobar (procedure-name
+ (eval '(begin (define (foobar) #t) foobar)
+ (current-module))))))
\f
(with-test-prefix "procedure-arity"
(pass-if "simple subr"
- (equal? (procedure-property display 'arity)
+ (equal? (procedure-minimum-arity display)
'(1 1 #f)))
(pass-if "gsubr"
- (equal? (procedure-property hashq-ref 'arity)
+ (equal? (procedure-minimum-arity hashq-ref)
'(2 1 #f)))
(pass-if "port-closed?"
- (equal? (procedure-property port-closed? 'arity)
+ (equal? (procedure-minimum-arity port-closed?)
'(1 0 #f)))
(pass-if "apply"
- (equal? (procedure-property apply 'arity)
+ (equal? (procedure-minimum-arity apply)
'(1 0 #t)))
(pass-if "cons*"
- (equal? (procedure-property cons* 'arity)
+ (equal? (procedure-minimum-arity cons*)
'(1 0 #t)))
(pass-if "list"
- (equal? (procedure-property list 'arity)
- '(0 0 #t))))
+ (equal? (procedure-minimum-arity list)
+ '(0 0 #t)))
+
+ (pass-if "fixed, eval"
+ (equal? (procedure-minimum-arity (eval '(lambda (a b) #t)
+ (current-module)))
+ '(2 0 #f)))
+
+ (pass-if "rest, eval"
+ (equal? (procedure-minimum-arity (eval '(lambda (a b . c) #t)
+ (current-module)))
+ '(2 0 #t)))
+
+ (pass-if "opt, eval"
+ (equal? (procedure-minimum-arity (eval '(lambda* (a b #:optional c) #t)
+ (current-module)))
+ '(2 1 #f)))
+
+ (if (include-deprecated-features)
+ (pass-if-exception "set-procedure-properties! arity"
+ '(misc-error . "arity is a read-only property")
+ (set-procedure-properties! (lambda x x) '((arity . 3))))
+ #t))