]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve TCO test coverage
authorMattias Engdegård <mattiase@acm.org>
Tue, 19 Oct 2021 10:03:15 +0000 (12:03 +0200)
committerMattias Engdegård <mattiase@acm.org>
Tue, 19 Oct 2021 19:59:41 +0000 (21:59 +0200)
* test/lisp/emacs-lisp/cl-macs-tests.el (cl-macs--labels):
Exercise `cond` in tail position in two different ways.

test/lisp/emacs-lisp/cl-macs-tests.el

index f4e2e46a019b74d793327b2b37e3661b16384e77..033764a7f98504839ceb7591e8190967df352717 100644 (file)
@@ -637,17 +637,26 @@ collection clause."
                        (/ 1 (logand n 1))
                      (arith-error (len3 (cdr xs) (1+ n)))
                      (:success (len3 (cdr xs) (+ n k))))
-                 n)))
+                 n))
+
+         ;; Tail calls in `cond'.
+         (len4 (xs n)
+           (cond (xs (cond (nil 'nevertrue)
+                           ((len4 (cdr xs) (1+ n)))))
+                 (t n))))
       (should (equal (len nil 0) 0))
       (should (equal (len2 nil 0) 0))
       (should (equal (len3 nil 0) 0))
+      (should (equal (len4 nil 0) 0))
       (should (equal (len list-42 0) 42))
       (should (equal (len2 list-42 0) 42))
       (should (equal (len3 list-42 0) 42))
+      (should (equal (len4 list-42 0) 42))
       ;; Should not bump into stack depth limits.
       (should (equal (len list-42k 0) 42000))
       (should (equal (len2 list-42k 0) 42000))
-      (should (equal (len3 list-42k 0) 42000))))
+      (should (equal (len3 list-42k 0) 42000))
+      (should (equal (len4 list-42k 0) 42000))))
 
   ;; Check that non-recursive functions are handled more efficiently.
   (should (pcase (macroexpand '(cl-labels ((f (x) (+ x 1))) (f 5)))