emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 0bb0fbe: Improve TCO test coverage


From: Mattias Engdegård
Subject: master 0bb0fbe: Improve TCO test coverage
Date: Tue, 19 Oct 2021 16:00:12 -0400 (EDT)

branch: master
commit 0bb0fbee68498be1a74e03fe97ea3ad9297f8bfe
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    Improve TCO test coverage
    
    * 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 | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el 
b/test/lisp/emacs-lisp/cl-macs-tests.el
index f4e2e46..033764a 100644
--- a/test/lisp/emacs-lisp/cl-macs-tests.el
+++ b/test/lisp/emacs-lisp/cl-macs-tests.el
@@ -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)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]