From b892ec4e66da9467f71e2210cfd9242e84851e40 Mon Sep 17 00:00:00 2001 From: kaizoku Date: Mon, 2 Sep 2013 02:28:21 -0700 Subject: [PATCH] Add zero? predicate to check if an object is zero --- AUTHORS | 1 + docs/language/core.rst | 21 +++++++++++++++++++++ hy/core/language.hy | 7 ++++++- tests/native_tests/core.hy | 12 ++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/AUTHORS b/AUTHORS index eb253ba..0f5bc7f 100644 --- a/AUTHORS +++ b/AUTHORS @@ -16,3 +16,4 @@ * Guillermo Vayá * Bob Tolbert * Ralph Möritz +* Josh McLaughlin diff --git a/docs/language/core.rst b/docs/language/core.rst index c0e2c77..d655dd3 100644 --- a/docs/language/core.rst +++ b/docs/language/core.rst @@ -270,6 +270,27 @@ Return True if x is greater than zero (0). False +.. _zero?-fn: + +zero? +---- + +Usage: ``(zero? x)`` + +Return True if x is zero (0). + +.. code-block:: clojure + + => (zero? 3) + False + + => (zero? -2) + False + + => (zero? 0) + True + + Sequence Functions ======================= diff --git a/hy/core/language.hy b/hy/core/language.hy index db6a265..9768c39 100644 --- a/hy/core/language.hy +++ b/hy/core/language.hy @@ -154,7 +154,12 @@ (yield val) (break))))) +(defn zero? [n] + "Return true if n is 0" + (_numeric_check n) + (= n 0)) + (def *exports* ["cycle" "dec" "distinct" "drop" "even?" "filter" "inc" "instance?" "iterable?" "iterate" "iterator?" "neg?" "none?" "nth" "numeric?" "odd?" "pos?" "remove" "repeat" - "repeatedly" "take" "take_nth" "take_while"]) + "repeatedly" "take" "take_nth" "take_while" "zero?"]) diff --git a/tests/native_tests/core.hy b/tests/native_tests/core.hy index ff9464a..3bb115b 100644 --- a/tests/native_tests/core.hy +++ b/tests/native_tests/core.hy @@ -181,6 +181,18 @@ (try (do (neg? None) (assert False)) (catch [e [TypeError]] (assert (in "not a number" (str e)))))) +(defn test-zero [] + "NATIVE: testing the zero? function" + (assert-false (zero? -2)) + (assert-false (zero? 1)) + (assert-true (zero? 0)) + (try (do (zero? "foo") (assert False)) + (catch [e [TypeError]] (assert (in "not a number" (str e))))) + (try (do (zero? []) (assert False)) + (catch [e [TypeError]] (assert (in "not a number" (str e))))) + (try (do (zero? None) (assert False)) + (catch [e [TypeError]] (assert (in "not a number" (str e)))))) + (defn test-none [] "NATIVE: testing for `is None`" (assert-true (none? None))