]> code.delx.au - gnu-emacs-elpa/commitdiff
Update seq.el to version 2.14
authorNicolas Petton <nicolas@petton.fr>
Tue, 29 Mar 2016 07:25:33 +0000 (09:25 +0200)
committerNicolas Petton <nicolas@petton.fr>
Tue, 29 Mar 2016 07:27:10 +0000 (09:27 +0200)
* packages/seq/seq.el: Bump version number.
* packages/seq/seq-24.el (seq-sort-by): New function.
* packages/seq/seq-25.el (seq-sort-by): New function.
* packages/seq/tests/seq-tests.el: Add a test for seq-sort-by.

packages/seq/seq-24.el
packages/seq/seq-25.el
packages/seq/seq.el
packages/seq/tests/seq-tests.el

index f34fd11897c80e3b07c9810d2c2b79771fc4f573..fc1d9567bc359d8158ceb7472aa2bdc776ea6fe5 100644 (file)
@@ -202,6 +202,16 @@ The result is a sequence of the same type as SEQUENCE."
     (let ((result (seq-sort predicate (append sequence nil))))
       (seq-into result (type-of sequence)))))
 
+(defun seq-sort-by (function pred sequence)
+  "Sort SEQUENCE using PRED as a comparison function.
+Elements of SEQUENCE are transformed by FUNCTION before being
+sorted.  FUNCTION must be a function of one argument."
+  (seq-sort (lambda (a b)
+              (funcall pred
+                       (funcall function a)
+                       (funcall function b)))
+            sequence))
+
 (defun seq-contains (sequence elt &optional testfn)
   "Return the first element in SEQUENCE that equals to ELT.
 Equality is defined by TESTFN if non-nil or by `equal' if nil."
index 74153f317426a1b93dd9a7d46451e9553588d122..ecfea3b4e3347222fb0e4e5b32a1c57a3b1b0ed4 100644 (file)
@@ -218,6 +218,16 @@ The result is a sequence of the same type as SEQUENCE."
   (let ((result (seq-sort pred (append sequence nil))))
     (seq-into result (type-of sequence))))
 
+(defun seq-sort-by (function pred sequence)
+  "Sort SEQUENCE using PRED as a comparison function.
+Elements of SEQUENCE are transformed by FUNCTION before being
+sorted.  FUNCTION must be a function of one argument."
+  (seq-sort (lambda (a b)
+              (funcall pred
+                       (funcall function a)
+                       (funcall function b)))
+            sequence))
+
 (cl-defmethod seq-sort (pred (list list))
   (sort (seq-copy list) pred))
 
index 78d9ec1863016c28e098a71989507230a849fdb0..603e200df1244f115966bfa737c164c638a7f7e7 100644 (file)
@@ -4,7 +4,7 @@
 
 ;; Author: Nicolas Petton <nicolas@petton.fr>
 ;; Keywords: sequences
-;; Version: 2.13
+;; Version: 2.14
 ;; Package: seq
 
 ;; Maintainer: emacs-devel@gnu.org
index cd9c213640357f8f85c2c169c3354dd7e541a828..cf3da78b1c622d0cdb47edbbf4181aa209200b0a 100644 (file)
@@ -345,5 +345,10 @@ Evaluate BODY for each created sequence.
                      '(11 22 33 44 55)))
       (should (equal (seq-mapn #'+ seq seq-2 nil) nil)))))
 
+(ert-deftest test-seq-sort-by ()
+  (let ((seq ["x" "xx" "xxx"]))
+    (should (equal (seq-sort-by #'seq-length #'> seq)
+                   ["xxx" "xx" "x"]))))
+
 (provide 'seq-tests)
 ;;; seq-tests.el ends here