Skip to content

Commit 4caa2e0

Browse files
author
José Valim
committed
Move is_odd and is_even to Integer
1 parent 71129bc commit 4caa2e0

File tree

7 files changed

+45
-35
lines changed

7 files changed

+45
-35
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
* [ExUnit] Show failures on CLIFormatter as soon as they pop up
99
* [IEx] Allow for strings in `h` helper
1010
* [IEx] Helpers `r` and `c` can handle erlang sources
11+
* [Integer] Add `odd?/1` and `even?/1`
1112
* [IO] Added support to specifying a number of bytes to stream to `IO.stream`, `IO.binstream`, `File.stream!` and `File.binstream!`
1213
* [Kernel] Include file and line on error report for overriding an existing function/macro
13-
* [Kernel] Add `is_odd/1` and `is_even/1`
1414
* [Kernel] Convert external functions into quoted expressions. This allows record fields to contain functions as long as they point to an `&Mod.fun/arity`
1515
* [Kernel] Allow `foo?` and `bar!` as valid variable names
1616
* [List] Add `List.replace_at/3`

lib/elixir/lib/integer.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
defmodule Integer do
2+
@moduledoc """
3+
Functions for working with integers.
4+
"""
5+
6+
@doc """
7+
Returns true if `n` is an odd number, otherwise false.
8+
"""
9+
defmacro odd?(n) do
10+
quote do: rem(unquote(n), 2) != 0
11+
end
12+
13+
@doc """
14+
Returns true if `n` is an even number, otherwise false.
15+
"""
16+
defmacro even?(n) do
17+
quote do: rem(unquote(n), 2) == 0
18+
end
19+
end

lib/elixir/lib/kernel.ex

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3528,20 +3528,6 @@ defmodule Kernel do
35283528
split_words(string, modifiers)
35293529
end
35303530

3531-
@doc """
3532-
Returns true if `n` is an odd number, otherwise false.
3533-
"""
3534-
defmacro is_odd(n) do
3535-
quote do: rem(unquote(n), 2) != 0
3536-
end
3537-
3538-
@doc """
3539-
Returns true if `n` is an even number, otherwise false.
3540-
"""
3541-
defmacro is_even(n) do
3542-
quote do: rem(unquote(n), 2) == 0
3543-
end
3544-
35453531
## Private functions
35463532

35473533
# Extracts concatenations in order to optimize many

lib/elixir/src/elixir_dispatch.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ default_functions() ->
1717
default_macros() ->
1818
[ { ?builtin, elixir_imported_macros() } ].
1919
default_requires() ->
20-
[ ?builtin, 'Elixir.Kernel.Typespec', 'Elixir.Record' ].
20+
[ 'Elixir.Integer', 'Elixir.Kernel', 'Elixir.Kernel.Typespec', 'Elixir.Record' ].
2121

2222
find_import(Meta, Name, Arity, S) ->
2323
Tuple = { Name, Arity },
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Code.require_file "test_helper.exs", __DIR__
2+
3+
defmodule IntegerTest do
4+
use ExUnit.Case, async: true
5+
6+
test :odd? do
7+
assert Integer.odd?(1) == true
8+
assert Integer.odd?(2) == false
9+
assert Integer.odd?(3) == true
10+
assert Integer.odd?(-1) == true
11+
assert Integer.odd?(-2) == false
12+
assert Integer.odd?(-3) == true
13+
end
14+
15+
test :even? do
16+
assert Integer.even?(1) == false
17+
assert Integer.even?(2) == true
18+
assert Integer.even?(3) == false
19+
assert Integer.even?(-1) == false
20+
assert Integer.even?(-2) == true
21+
assert Integer.even?(-3) == false
22+
end
23+
end

lib/elixir/test/elixir/kernel/errors_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ defmodule Kernel.ErrorsTest do
304304
test :unrequired_macro do
305305
assert_compile_fail CompileError,
306306
"nofile:2: tried to invoke macro Kernel.ErrorsTest.UnproperMacro.unproper/1 " <>
307-
"but module was not required. Required: Kernel, Kernel.Typespec, Record",
307+
"but module was not required. Required: Integer, Kernel, Kernel.Typespec, Record",
308308
'''
309309
defmodule ErrorsTest do
310310
Kernel.ErrorsTest.UnproperMacro.unproper([])

lib/elixir/test/elixir/kernel_test.exs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -458,24 +458,6 @@ defmodule KernelTest do
458458
end
459459
end
460460

461-
test :is_odd do
462-
assert is_odd(1) == true
463-
assert is_odd(2) == false
464-
assert is_odd(3) == true
465-
assert is_odd(-1) == true
466-
assert is_odd(-2) == false
467-
assert is_odd(-3) == true
468-
end
469-
470-
test :is_even do
471-
assert is_even(1) == false
472-
assert is_even(2) == true
473-
assert is_even(3) == false
474-
assert is_even(-1) == false
475-
assert is_even(-2) == true
476-
assert is_even(-3) == false
477-
end
478-
479461
defp a_list, do: [1, 2, 3]
480462
defp a_nil, do: nil
481463
end

0 commit comments

Comments
 (0)