emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/dash d870282 013/426: Add some tests, and fix the bugs


From: Phillip Lord
Subject: [elpa] externals/dash d870282 013/426: Add some tests, and fix the bugs they uncovered.
Date: Tue, 04 Aug 2015 19:36:23 +0000

branch: externals/dash
commit d87028298426b896d85fefd140ea0fe79e5668ec
Author: Magnar Sveen <address@hidden>
Commit: Magnar Sveen <address@hidden>

    Add some tests, and fix the bugs they uncovered.
---
 README.md |    6 ++++--
 bang.el   |    9 +++++----
 tests.el  |    8 ++++++++
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/README.md b/README.md
index b6c806d..530575c 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ This is so much a work in progress that you should definitely 
not be using it ye
 ## Anaphoric functions
 
 While `!filter` takes a function to filter the list by, you can also pass
-it a forms - which will then be executed with `it` exposed as the list item.
+it a form - which will then be executed with `it` exposed as the list item.
 Here's an example:
 
     (!filter (lambda (num) (= 0 (% num 2))) '(1 2 3 4)) ;; normal version
@@ -22,7 +22,9 @@ Here's an example:
 
 of course the original can also be written like
 
-    (!filter 'even? '(1 2 3 4))
+    (defun even? (num) (= 0 (% num 2)))
+
+    (!filter even? '(1 2 3 4))
 
 which demonstrates the usefulness of both versions.
 
diff --git a/bang.el b/bang.el
index dc330f9..9f67ed0 100644
--- a/bang.el
+++ b/bang.el
@@ -46,12 +46,13 @@ It should only be set using dynamic scope with a let, like:
   (!concat (!map fn list)))
 
 (defmacro !filter (form-or-fn list)
-  `(let (!--result)
-     (while list
-       (let ((it (car list)))
+  `(let ((!--list ,list)
+         (!--result '()))
+     (while !--list
+       (let ((it (car !--list)))
          (when ,(if (functionp form-or-fn) (list form-or-fn 'it) (list 'progn 
form-or-fn))
            (setq !--result (cons it !--result))))
-       (setq list (cdr list)))
+       (setq !--list (cdr !--list)))
      (nreverse !--result)))
 
 (defun !uniq (list)
diff --git a/tests.el b/tests.el
index 139df00..5f1a9dc 100644
--- a/tests.el
+++ b/tests.el
@@ -1,6 +1,14 @@
 (require 'ert)
 (require 'bang)
 
+(defun even? (num) (= 0 (% num 2)))
+
+(ert-deftest filter ()
+  "`!filter' returns a new list of only those elements where the predicate was 
non-nil."
+  (should (equal (!filter (lambda (num) (= 0 (% num 2))) '(1 2 3 4)) '(2 4)))
+  (should (equal (!filter (= 0 (% it 2)) '(1 2 3 4)) '(2 4)))
+  (should (equal (!filter even? '(1 2 3 4)) '(2 4))))
+
 (ert-deftest difference ()
   "`!difference' returns a new list of only elements in list1 that are not in 
list2."
   (should (equal (!difference '() '()) '()))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]