diff options
author | James Fish <james@fishcakez.com> | 2017-11-25 15:42:16 -0800 |
---|---|---|
committer | James Fish <james@fishcakez.com> | 2017-11-25 16:05:06 -0800 |
commit | 79e3c2f658999f6f2b9ebdb12a16e5fa1d4bb0ef (patch) | |
tree | 8ddc2b2051373af2e688d7c9fdb73936ceb3154a | |
parent | 36fde8be21ce15b74304b29f8b8cf633f31ae0db (diff) | |
download | elixir-jf-integer-safe-guards.tar.gz |
Do not raise on non-integer values in is_odd/is_evenjf-integer-safe-guards
-rw-r--r-- | lib/elixir/lib/integer.ex | 8 | ||||
-rw-r--r-- | lib/elixir/test/elixir/integer_test.exs | 4 |
2 files changed, 6 insertions, 6 deletions
diff --git a/lib/elixir/lib/integer.ex b/lib/elixir/lib/integer.ex index 2c7ae9736..67295f833 100644 --- a/lib/elixir/lib/integer.ex +++ b/lib/elixir/lib/integer.ex @@ -28,9 +28,7 @@ defmodule Integer do false """ - defmacro is_odd(integer) do - quote(do: (unquote(integer) &&& 1) == 1) - end + defguard is_odd(integer) when is_integer(integer) and (integer &&& 1) == 1 @doc """ Determines if an `integer` is even. @@ -55,9 +53,7 @@ defmodule Integer do true """ - defmacro is_even(integer) do - quote(do: (unquote(integer) &&& 1) == 0) - end + defguard is_even(integer) when is_integer(integer) and (integer &&& 1) == 0 @doc """ Computes the modulo remainder of an integer division. diff --git a/lib/elixir/test/elixir/integer_test.exs b/lib/elixir/test/elixir/integer_test.exs index b3d993edc..9d6352778 100644 --- a/lib/elixir/test/elixir/integer_test.exs +++ b/lib/elixir/test/elixir/integer_test.exs @@ -8,9 +8,11 @@ defmodule IntegerTest do require Integer def test_is_odd_in_guards(number) when Integer.is_odd(number), do: number + def test_is_odd_in_guards(atom) when is_atom(atom) and not Integer.is_odd(atom), do: :atom def test_is_odd_in_guards(_number), do: false def test_is_even_in_guards(number) when Integer.is_even(number), do: number + def test_is_even_in_guards(atom) when is_atom(atom) and not Integer.is_even(atom), do: :atom def test_is_even_in_guards(_number), do: false test "is_odd/1" do @@ -23,6 +25,7 @@ defmodule IntegerTest do assert Integer.is_odd(-3) == true assert test_is_odd_in_guards(10) == false assert test_is_odd_in_guards(11) == 11 + assert test_is_odd_in_guards(:not_integer) == :atom end test "is_even/1" do @@ -35,6 +38,7 @@ defmodule IntegerTest do assert Integer.is_even(-3) == false assert test_is_even_in_guards(10) == 10 assert test_is_even_in_guards(11) == false + assert test_is_even_in_guards(:not_integer) == :atom end test "mod/2" do |