about summary refs log tree commit diff
path: root/users/wpcarro/emacs/pkgs/list
diff options
context:
space:
mode:
Diffstat (limited to 'users/wpcarro/emacs/pkgs/list')
-rw-r--r--users/wpcarro/emacs/pkgs/list/default.nix1
-rw-r--r--users/wpcarro/emacs/pkgs/list/list.el18
-rw-r--r--users/wpcarro/emacs/pkgs/list/tests.el36
3 files changed, 35 insertions, 20 deletions
diff --git a/users/wpcarro/emacs/pkgs/list/default.nix b/users/wpcarro/emacs/pkgs/list/default.nix
index 490c0ba1745b..cc94df87dc37 100644
--- a/users/wpcarro/emacs/pkgs/list/default.nix
+++ b/users/wpcarro/emacs/pkgs/list/default.nix
@@ -12,6 +12,7 @@ let
             dash
           ]) ++
           (with depot.users.wpcarro.emacs.pkgs; [
+            maybe
             set
           ]);
       })
diff --git a/users/wpcarro/emacs/pkgs/list/list.el b/users/wpcarro/emacs/pkgs/list/list.el
index 836eee89ebf3..03382991e035 100644
--- a/users/wpcarro/emacs/pkgs/list/list.el
+++ b/users/wpcarro/emacs/pkgs/list/list.el
@@ -53,6 +53,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (require 'dash)
+(require 'maybe)
 (require 'set)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -73,7 +74,7 @@
       ""
     (list-reduce (list-first xs)
                  (lambda (x acc)
-                   (string-concat acc joint x))
+                   (format "%s%s%s" acc joint x))
                  (list-tail xs))))
 
 (defun list-length (xs)
@@ -151,12 +152,13 @@
 ;; TODO: Add tests.
 (defun list-dedupe-adjacent (xs)
   "Return XS without adjacent duplicates."
-  (list-reduce (list (list-first xs))
-    (lambda (x acc)
-      (if (equal x (list-first acc))
-          acc
-        (list-cons x acc)))
-    xs))
+  (list-reverse
+   (list-reduce (list (list-first xs))
+                (lambda (x acc)
+                  (if (equal x (list-first acc))
+                      acc
+                    (list-cons x acc)))
+                xs)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Predicates
@@ -182,7 +184,7 @@ Be leery of using this with things like alists.  Many data structures in Elisp
 
 (defun list-contains? (x xs)
   "Return t if X is in XS using `equal'."
-  (-contains? xs x))
+  (maybe-some? (-contains? xs x)))
 
 (defun list-xs-distinct-by? (f xs)
   "Return t if all elements in XS are distinct after applying F to each."
diff --git a/users/wpcarro/emacs/pkgs/list/tests.el b/users/wpcarro/emacs/pkgs/list/tests.el
index 2f7090d4676c..abba6b59d62f 100644
--- a/users/wpcarro/emacs/pkgs/list/tests.el
+++ b/users/wpcarro/emacs/pkgs/list/tests.el
@@ -9,24 +9,36 @@
 ;; Tests
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+(setq xs '(1 2 3 4 5))
+
 (ert-deftest list-length ()
-  (= 0 (list-length '()))
-  (= 5 (list-length '(1 2 3 4 5))))
+  (should (= 0 (list-length '())))
+  (should (= 5 (list-length xs))))
 
 (ert-deftest list-reduce ()
-  (= 16 (list-reduce 1 (lambda (x acc) (+ x acc)) '(1 2 3 4 5))))
+  (should (= 16 (list-reduce 1 (lambda (x acc) (+ x acc)) xs))))
 
 (ert-deftest list-map ()
-  (equal '(2 4 6 8 10)
-         (list-map (lambda (x) (* x 2)) '(1 2 3 4 5))))
+  (should
+   (equal '(2 4 6 8 10)
+          (list-map (lambda (x) (* x 2)) xs))))
 
 (ert-deftest list-xs-distinct-by? ()
-  (list-xs-distinct-by?
-   (lambda (x) (plist-get x :kbd))
-     '((:kbd "C-a" [:name] "foo")
-
-       (:kbd "C-b" :name "[]foo"))))
+  (should
+   (equal t (list-xs-distinct-by?
+             (lambda (x) (plist-get x :kbd))
+             '((:kbd "C-a" :name "foo")
+               (:kbd "C-b" :name "foo"))))))
 
 (ert-deftest list-dedupe-adjacent ()
-  (equal '(1 2 3 4 3 5)
-         (list-dedupe-adjacent '(1 1 1 2 2 3 4 4 3 5 5))))
+  (should (equal '(1 2 3 4 3 5)
+                 (list-dedupe-adjacent '(1 1 1 2 2 3 4 4 3 5 5)))))
+
+(ert-deftest list-contains? ()
+  ;; Assert returns t or nil
+  (should (equal t (list-contains? 1 xs)))
+  (should (equal nil (list-contains? 100 xs))))
+
+(ert-deftest list-join ()
+  (should (equal "foo-bar-baz"
+                 (list-join "-" '("foo" "bar" "baz")))))