* packages/seq/seq.el:
* packages/seq/tests/seq-tests.el: Update.
;; Author: Nicolas Petton <nicolas@petton.fr>
;; Keywords: sequences
;; Author: Nicolas Petton <nicolas@petton.fr>
;; Keywords: sequences
;; Package: seq
;; Maintainer: emacs-devel@gnu.org
;; Package: seq
;; Maintainer: emacs-devel@gnu.org
acc)))
(defun seq-some (pred seq)
acc)))
(defun seq-some (pred seq)
- "Return non-nil if (PRED element) is non-nil for any element in SEQ, nil otherwise.
-If so, return the non-nil value returned by PRED."
+ "Return the first value for which if (PRED element) is non-nil for in SEQ."
(catch 'seq--break
(seq-doseq (elt seq)
(let ((result (funcall pred elt)))
(catch 'seq--break
(seq-doseq (elt seq)
(let ((result (funcall pred elt)))
(funcall (or testfn #'equal) elt e))
seq))
(funcall (or testfn #'equal) elt e))
seq))
+(defun seq-position (seq elt &optional testfn)
+ "Return the index of the first element in SEQ that is equal to ELT.
+Equality is defined by TESTFN if non-nil or by `equal' if nil."
+ (let ((index 0))
+ (catch 'seq--break
+ (seq-doseq (e seq)
+ (when (funcall (or testfn #'equal) e elt)
+ (throw 'seq--break index))
+ (setq index (1+ index)))
+ nil)))
+
(defun seq-uniq (seq &optional testfn)
"Return a list of the elements of SEQ with duplicates removed.
TESTFN is used to compare elements, or `equal' if TESTFN is nil."
(defun seq-uniq (seq &optional testfn)
"Return a list of the elements of SEQ with duplicates removed.
TESTFN is used to compare elements, or `equal' if TESTFN is nil."
(should (= (seq-min seq) 0))
(should (= (seq-max seq) 5))))
(should (= (seq-min seq) 0))
(should (= (seq-max seq) 5))))
+(ert-deftest test-seq-position ()
+ (with-test-sequences (seq '(2 4 6))
+ (should (null (seq-position seq 1)))
+ (should (= (seq-position seq 4) 1)))
+ (let ((seq '(a b c)))
+ (should (null (seq-position seq 'd #'eq)))
+ (should (= (seq-position seq 'a #'eq) 0))
+ (should (null (seq-position seq (make-symbol "a") #'eq)))))
+
(provide 'seq-tests)
;;; seq-tests.el ends here
(provide 'seq-tests)
;;; seq-tests.el ends here