summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNic Ferrier <nferrier@ferrier.me.uk>2013-08-18 11:37:57 +0100
committerNic Ferrier <nferrier@ferrier.me.uk>2013-08-18 11:37:57 +0100
commit335bd318eaf39bd85efb5b29997dd413cf6935ba (patch)
tree50095067aae17dce5cb0a00c63b6948cc4b2d1ed
parent100ec3d037b9c8cc5245489ace6e58dfcac5fa68 (diff)
add some tests and kvfa
-rw-r--r--kv-tests.el48
-rw-r--r--kv.el11
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
diff --git a/kv.el b/kv.el
index f34c11b..f232dbf 100644
--- a/kv.el
+++ b/kv.el
@@ -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.