]> git.eshelyaron.com Git - emacs.git/commitdiff
Less bad permutation generator in regexp-opt test
authorMattias Engdegård <mattiase@acm.org>
Mon, 17 Feb 2020 19:55:09 +0000 (20:55 +0100)
committerMattias Engdegård <mattiase@acm.org>
Thu, 20 Feb 2020 21:00:44 +0000 (22:00 +0100)
* 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

index 0179ac4f1f461d65fc29147455b704060d7e8cbd..2d316b5829f88ddeeae0bf59bc47a29a0cf56954 100644 (file)
 
 (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."