From 65fb82097bc35a8b06da6b8a1c4b36c0c459932d Mon Sep 17 00:00:00 2001 From: William Carroll Date: Fri, 29 Jul 2022 20:56:29 -0700 Subject: fix(wpcarro/emacs): Fix list.el tests I was getting false-positive ERT test results because I forgot to use the `should` macro in my assertions. I discovered this when debugging a subtle bug in cycle.el that depends on `list-contains?` return `t` or `nil` instead of truthy or falsy values. Change-Id: Ibbf89fd1c4f50f86d5efcaa4cd87280b97e111ce Reviewed-on: https://cl.tvl.fyi/c/depot/+/6003 Reviewed-by: wpcarro Autosubmit: wpcarro Tested-by: BuildkiteCI --- users/wpcarro/emacs/pkgs/list/default.nix | 1 + users/wpcarro/emacs/pkgs/list/list.el | 18 +++++++++------- users/wpcarro/emacs/pkgs/list/tests.el | 36 ++++++++++++++++++++----------- 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 490c0ba174..cc94df87dc 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 836eee89eb..03382991e0 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 2f7090d467..abba6b59d6 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"))))) -- cgit 1.4.1