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.
This commit is contained in:
parent
398afbaf6f
commit
41450a8ea5
1 changed files with 8 additions and 21 deletions
|
@ -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."
|
||||
|
|
Loading…
Add table
Reference in a new issue