eval: Store docstrings for lambdas.
[bpt/guile.git] / test-suite / tests / procprop.test
dissimilarity index 67%
index 40e89c7..ceb6e56 100644 (file)
@@ -1,63 +1,81 @@
-;;;; procprop.test --- Procedure properties               -*- Scheme -*-
-;;;; Ludovic Courtès <ludo@gnu.org>
-;;;;
-;;;;   Copyright (C) 2009 Free Software Foundation, Inc.
-;;;;
-;;;; This program is free software; you can redistribute it and/or modify
-;;;; it under the terms of the GNU General Public License as published by
-;;;; the Free Software Foundation; either version 2, or (at your option)
-;;;; any later version.
-;;;;
-;;;; This program 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 General Public License for more details.
-;;;;
-;;;; You should have received a copy of the GNU General Public License
-;;;; along with this software; see the file COPYING.  If not, write to
-;;;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;;;; Boston, MA 02110-1301 USA
-
-(define-module (test-procpop)
-  :use-module (test-suite lib))
-
-\f
-(with-test-prefix "procedure-name"
-  (pass-if "simple subr"
-    (eq? 'display (procedure-name display)))
-
-  (pass-if "gsubr"
-    (eq? 'hashq-ref (procedure-name hashq-ref))))
-
-\f
-(with-test-prefix "procedure-arity"
-  (pass-if "simple subr"
-    (equal? (procedure-property display 'arity)
-            '(1 1 #f)))
-
-  (pass-if "gsubr"
-    (equal? (procedure-property hashq-ref 'arity)
-            '(2 1 #f)))
-
-  (pass-if "port-closed?"
-    (equal? (procedure-property port-closed? 'arity)
-            '(1 0 #f)))
-
-  (pass-if "apply"
-    (equal? (if ((@ (system vm program) program?) apply)
-                (throw 'unresolved)
-                (procedure-property apply 'arity))
-            '(1 0 #t)))
-
-  (pass-if "cons*"
-    (equal? (procedure-property cons* 'arity)
-            '(1 0 #t)))
-
-  (pass-if "list"
-    (equal? (procedure-property list 'arity)
-            '(0 0 #t))))
-
-
-;;; Local Variables:
-;;; coding: latin-1
-;;; End:
+;;;; procprop.test --- Procedure properties -*- mode: scheme; coding: utf-8; -*-
+;;;; Ludovic Courtès <ludo@gnu.org>
+;;;;
+;;;;   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
+;;;; 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-procpop)
+  :use-module (test-suite lib))
+
+\f
+(with-test-prefix "procedure-name"
+  (pass-if "simple subr"
+    (eq? 'display (procedure-name display)))
+
+  (pass-if "gsubr"
+    (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-minimum-arity display)
+            '(1 1 #f)))
+
+  (pass-if "gsubr"
+    (equal? (procedure-minimum-arity hashq-ref)
+            '(2 1 #f)))
+
+  (pass-if "port-closed?"
+    (equal? (procedure-minimum-arity port-closed?)
+            '(1 0 #f)))
+
+  (pass-if "apply"
+    (equal? (procedure-minimum-arity apply)
+            '(1 0 #t)))
+
+  (pass-if "cons*"
+    (equal? (procedure-minimum-arity cons*)
+            '(1 0 #t)))
+
+  (pass-if "list"
+    (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))