emacs-diffs
[Top][All Lists]
Advanced

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

master 41450a8: Less bad permutation generator in regexp-opt test


From: Mattias Engdegård
Subject: master 41450a8: Less bad permutation generator in regexp-opt test
Date: Thu, 20 Feb 2020 16:01:38 -0500 (EST)

branch: master
commit 41450a8ea5a156a34f6641a0768cadb174fa261c
Author: Mattias Engdegård <address@hidden>
Commit: Mattias Engdegård <address@hidden>

    Less bad permutation generator in regexp-opt test
    
    * test/lisp/emacs-lisp/regexp-opt-tests.el
    (regexp-opt-test--permutation, regexp-opt-test--factorial): Remove.
    (regexp-opt-test--permutations): Rewrite.
---
 test/lisp/emacs-lisp/regexp-opt-tests.el | 29 ++++++++---------------------
 1 file changed, 8 insertions(+), 21 deletions(-)

diff --git a/test/lisp/emacs-lisp/regexp-opt-tests.el 
b/test/lisp/emacs-lisp/regexp-opt-tests.el
index 0179ac4..2d316b5 100644
--- a/test/lisp/emacs-lisp/regexp-opt-tests.el
+++ b/test/lisp/emacs-lisp/regexp-opt-tests.el
@@ -25,27 +25,14 @@
 
 (require 'regexp-opt)
 
-(defun regexp-opt-test--permutation (n list)
-  "The Nth permutation of LIST, 0 ≤ N < (length LIST)!."
-  (let ((len (length list))
-        (perm-list nil))
-    (dotimes (i len)
-      (let* ((d (- len i))
-             (k (mod n d)))
-        (push (nth k list) perm-list)
-        (setq list (append (butlast list (- (length list) k))
-                           (nthcdr (1+ k) list)))
-        (setq n (/ n d))))
-    (nreverse perm-list)))
-
-(defun regexp-opt-test--factorial (n)
-  "N!"
-  (apply #'* (number-sequence 1 n)))
-
-(defun regexp-opt-test--permutations (list)
-  "All permutations of LIST."
-  (mapcar (lambda (i) (regexp-opt-test--permutation i list))
-          (number-sequence 0 (1- (regexp-opt-test--factorial (length list))))))
+(defun regexp-opt-test--permutations (l)
+  "All permutations of L, assuming no duplicates."
+  (if (cdr l)
+      (mapcan (lambda (x)
+                (mapcar (lambda (p) (cons x p))
+                        (perm (remove x l))))
+              l)
+    (list l)))
 
 (ert-deftest regexp-opt-longest-match ()
   "Check that the regexp always matches as much as possible."



reply via email to

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