diff options
author | Nic Ferrier <nferrier@ferrier.me.uk> | 2013-08-18 11:37:57 +0100 |
---|---|---|
committer | Nic Ferrier <nferrier@ferrier.me.uk> | 2013-08-18 11:37:57 +0100 |
commit | 335bd318eaf39bd85efb5b29997dd413cf6935ba (patch) | |
tree | 50095067aae17dce5cb0a00c63b6948cc4b2d1ed | |
parent | 100ec3d037b9c8cc5245489ace6e58dfcac5fa68 (diff) |
add some tests and kvfa
-rw-r--r-- | kv-tests.el | 48 | ||||
-rw-r--r-- | kv.el | 11 |
2 files changed, 58 insertions, 1 deletions
diff --git a/kv-tests.el b/kv-tests.el index ed97035..79b6d03 100644 --- a/kv-tests.el +++ b/kv-tests.el @@ -71,6 +71,54 @@ '(("A" . 10)(10 . 20)((a b c) . 30)) :first-fn 'downcase)))) +(ert-deftest kvfa () + "Destructuring kva through functions." + (should + (equal '("b") + (kvfa "a" '((:a :b)("a" "b")) + (lambda (key &rest result) result)))) + (should + (equal "b" + (kvfa "a" '((:a :b)("a" "b")) + (lambda (k v &rest any) v)))) + (should + (equal "b" + (kvfa "a" '((:a . :b)("a" . "b")) + (cl-function + (lambda (k v &rest any) v))))) + (should + (equal 1 + (kvfa "a" '((:a :b :c 1)("a" "b" :a 1)) + (cl-function + (lambda (k v &key a) a)))))) + +(ert-deftest kva () + "Test the simple assoc." + (should (equal :b (kva :a '((:a . :b)("a" . "b"))))) + (should (equal "b" (kva "a" '((:a . :b)("a" . "b"))))) + (should-not (kva "b" '((:a . :b)("a" . "b"))))) + +(ert-deftest kvaq () + "Test the simple assq." + (should (equal :b (kvaq :a '((:a . :b)("a" . "b"))))) + (should (equal 2 (kvaq 1 '((1 . 2)("a" . "b"))))) + (should-not (equal "b" (kvaq "a" '((:a . :b)("a" . "b"))))) + (should-not (kvaq "b" '((:a . :b)("a" . "b"))))) + +(ert-deftest kvaq () + "Test the simple assq." + (should (equal :b (kvaq :a '((:a . :b)("a" . "b"))))) + (should (equal 2 (kvaq 1 '((1 . 2)("a" . "b"))))) + (should-not (equal "b" (kvaq "a" '((:a . :b)("a" . "b"))))) + (should-not (kvaq "b" '((:a . :b)("a" . "b"))))) + +(ert-deftest kvaqc () + "Test the simple assq." + (should (equal :b (kvaqc :a '((:a . :b)("a" . "b"))))) + (should (equal 2 (kvaqc 1 '((1 . 2)("a" . "b"))))) + (should (equal "b" (kvaqc "a" '((:a . :b)("a" . "b"))))) + (should-not (kvaqc "b" '((:a . :b)("a" . "b"))))) + (ert-deftest kvassoc= () (should (equal @@ -4,7 +4,7 @@ ;; Author: Nic Ferrier <nferrier@ferrier.me.uk> ;; Keywords: lisp -;; Version: 0.0.17 +;; Version: 0.0.18 ;; Maintainer: Nic Ferrier <nferrier@ferrier.me.uk> ;; Created: 7th September 2012 @@ -64,6 +64,15 @@ key." hash) store))) +(defun kvfa (key alist receive) + "Call RECEIVE with whatever comes out of ALIST for KEY. + +RECEIVE can do whatever destructuring you want, the first +argument is always the car of the alist pair." + (apply receive (let ((a (assoc key alist))) + (append (list (car a)) + (if (listp (cdr a))(cdr a)(list (cdr a))))))) + (defun kva (key alist) "Retrieve the value assigned to KEY in ALIST. |