From 8c9d3d654e59af10350342aee1f742d3ec6b5a14 Mon Sep 17 00:00:00 2001 From: Brandon Stubbs Date: Thu, 18 Aug 2022 22:36:42 -0400 Subject: [PATCH] [feat] - `filter` closes #45 --- core.js | 10 ++++++++++ resources/clava/core.edn | 2 +- test/clava/compiler_test.cljs | 9 +++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core.js b/core.js index 22aef20a..1e298ea2 100644 --- a/core.js +++ b/core.js @@ -316,6 +316,16 @@ export function map(f, coll) { return ret; } +export function filter(pred, coll) { + let ret = []; + for (const x of iterable(coll)) { + if (pred(x)) { + ret.push(x); + } + } + return ret; +} + export function map_indexed(f, coll) { let ret = []; let i = 0; diff --git a/resources/clava/core.edn b/resources/clava/core.edn index c48262fb..914e0715 100644 --- a/resources/clava/core.edn +++ b/resources/clava/core.edn @@ -1 +1 @@ -#{seq reduce first dissoc atom dec map assoc_in reset_BANG_ rest PROTOCOL_SENTINEL _PLUS_ reduced_QMARK_ range disj seqable_QMARK_ iterable conj get disj_BANG_ vec second prn odd_QMARK_ assoc_BANG_ println Atom nth nil_QMARK_ assoc_in_BANG_ dissoc_BANG_ not pr_str swap_BANG_ vector mapv subvec reduced even_QMARK_ inc str apply map_indexed deref assoc complement constantly conj_BANG_ re_matches} \ No newline at end of file +#{seq reduce first dissoc atom dec map assoc_in reset_BANG_ rest PROTOCOL_SENTINEL _PLUS_ reduced_QMARK_ range disj seqable_QMARK_ iterable conj get disj_BANG_ vec second prn odd_QMARK_ assoc_BANG_ println Atom nth nil_QMARK_ assoc_in_BANG_ dissoc_BANG_ not pr_str swap_BANG_ vector mapv subvec reduced even_QMARK_ inc filter str apply map_indexed deref assoc complement constantly conj_BANG_ re_matches} \ No newline at end of file diff --git a/test/clava/compiler_test.cljs b/test/clava/compiler_test.cljs index c053a08d..53f7e409 100644 --- a/test/clava/compiler_test.cljs +++ b/test/clava/compiler_test.cljs @@ -660,6 +660,15 @@ (is (eq () (jsv! '(map inc nil)))) (is (eq () (jsv! '(map inc js/undefined)))))) +(deftest filter-test + (is (eq [2 4 6 8] (jsv! '(filter even? [1 2 3 4 5 6 7 8 9])))) + (is (every? (set (jsv! '(filter even? #{1 2 3 4 5 6 7 8 9}))) + [2 4 6 8])) + (is (eq [[:a 1]] (jsv! '(filter #(= :a (first %)) {:a 1 :b 2})))) + (testing "nil" + (is (eq () (jsv! '(filter even? nil)))) + (is (eq () (jsv! '(filter even? js/undefined)))))) + (deftest map-indexed-test (is (eq [[0 0] [1 1] [2 2] [3 3] [4 4]] (jsv! '(map-indexed vector [0 1 2 3 4]))))