summaryrefslogtreecommitdiff
path: root/test/lisp/emacs-lisp
diff options
context:
space:
mode:
authorEarl Hyatt <okamsn@protonmail.com>2021-08-11 23:54:31 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2021-08-11 23:54:31 +0200
commit2f90fa19b8fdc70303232d389553afa524c72509 (patch)
tree1d544d5e950d09542eb78e41083c920af35a310e /test/lisp/emacs-lisp
parent3b5f8ab0d06f6c39aaa716b6279c2ceb4bfc5b14 (diff)
downloademacs-2f90fa19b8fdc70303232d389553afa524c72509.tar.gz
emacs-2f90fa19b8fdc70303232d389553afa524c72509.tar.bz2
emacs-2f90fa19b8fdc70303232d389553afa524c72509.zip
Add a `pcase-setq' macro
* doc/lispref/control.texi (Destructuring with pcase Patterns): Document this macro. * lisp/emacs-lisp/pcase.el (pcase-setq): New macro. This macro is the 'setq' equivalent of 'pcase-let'. * test/lisp/emacs-lisp/pcase-tests.el (pcase-setq): Test this new macro. (bug#49809).
Diffstat (limited to 'test/lisp/emacs-lisp')
-rw-r--r--test/lisp/emacs-lisp/pcase-tests.el48
1 files changed, 48 insertions, 0 deletions
diff --git a/test/lisp/emacs-lisp/pcase-tests.el b/test/lisp/emacs-lisp/pcase-tests.el
index 02d3878ad08..67882d00d86 100644
--- a/test/lisp/emacs-lisp/pcase-tests.el
+++ b/test/lisp/emacs-lisp/pcase-tests.el
@@ -110,4 +110,52 @@
(should-error (pcase 1
((cl-type notatype) 'integer))))
+(ert-deftest pcase-setq ()
+ (should (equal (let (a b)
+ (pcase-setq `(,a ,b) nil)
+ (list a b))
+ (list nil nil)))
+
+ (should (equal (let (a b)
+ (pcase-setq `((,a) (,b)) '((1) (2)))
+ (list a b))
+ (list 1 2)))
+
+ (should (equal (list 'unset 'unset)
+ (let ((a 'unset)
+ (b 'unset))
+ (pcase-setq `(,a ,b) nil)
+ (list a b))))
+
+ (should (equal (let (a b)
+ (pcase-setq `[,a ,b] [1 2])
+ (list a b))
+ '(1 2)))
+
+ (should (equal (let (a b)
+ (pcase-setq a 1 b 2)
+ (list a b))
+ '(1 2)))
+
+ (should (= (let (a)
+ (pcase-setq a 1 `(,a) '(2))
+ a)
+ 2))
+
+ (should (equal (let (array list-item array-copy)
+ (pcase-setq (or `(,list-item) array) [1 2 3]
+ array-copy array
+ ;; This re-sets `array' to nil.
+ (or `(,list-item) array) '(4))
+ (list array array-copy list-item))
+ '(nil [1 2 3] 4)))
+
+ (let ((a nil))
+ (should-error (pcase-setq a 1 b)
+ :type '(wrong-number-of-arguments))
+ (should (eq a nil)))
+
+ (should-error (pcase-setq a)
+ :type '(wrong-number-of-arguments)))
+
;;; pcase-tests.el ends here.