diff --git a/lib/koans/04_numbers.ex b/lib/koans/04_numbers.ex new file mode 100644 index 0000000..89d4bb9 --- /dev/null +++ b/lib/koans/04_numbers.ex @@ -0,0 +1,92 @@ +defmodule Numbers do + require Integer + use Koans + + @intro "Why is the number six so scared? Because seven eight nine!\nWe should get to know numbers a bit more!" + + koan "Are you odd?" do + assert Integer.is_odd(3) == ___ + end + + koan "Actually you might be even" do + assert Integer.is_even(4) == ___ + end + + koan "Let's grab the individual digits in a list" do + individual_digits = Integer.digits(58127) + assert individual_digits == ___ + end + + koan "Oh no! I need it back together" do + number = Integer.undigits([1, 2, 3, 4]) + + assert number == ___ + end + + koan "I think I need my number as a char" do + char_digit = Integer.to_char_list(7) + + assert char_digit == ___ + end + + koan "Actually I want my number as a string" do + string_digit = Integer.to_string(1234) + + assert string_digit == ___ + end + + koan "The meaning of life in hexidecimal is 2A!" do + assert Integer.parse("2A", 16) == {___, ""} + end + + koan "I don't want this decimal point, let's round up" do + assert Float.ceil(34.25) == ___ + end + + koan "OK, I only want it to 1 decimal place" do + assert Float.ceil(34.25, 1) == ___ + end + + koan "Rounding down is what I need" do + assert Float.floor(99.99) == ___ + end + + koan "Rounding down to 2 decimal places" do + assert Float.floor(12.345, 2) == ___ + end + + koan "Just want to parse to a float" do + assert Float.parse("34.5") == {___, ""} + end + + koan "Hmm, I want to parse this but it has some strings" do + assert Float.parse("1 million dollars") == {___, " million dollars"} + end + + koan "Round the number up or down for me" do + assert Float.round(5.5) == ___ + assert Float.round(5.4) == ___ + assert Float.round(8.94, 1) == ___ + assert Float.round(-5.5674, 3) == ___ + end + + koan "I want the first and last in the range" do + first..last = Range.new(1, 10) + + assert first == ___ + assert last == ___ + end + + koan "Does my number exist in the range?" do + range = Range.new(1, 10) + + assert 4 in range == ___ + assert 10 in range == ___ + assert 0 in range == ___ + end + + koan "Is this a range?" do + assert Range.range?(1..10) == ___ + assert Range.range?(0) == ___ + end +end \ No newline at end of file diff --git a/lib/koans/04_atoms.ex b/lib/koans/05_atoms.ex similarity index 100% rename from lib/koans/04_atoms.ex rename to lib/koans/05_atoms.ex diff --git a/lib/koans/05_tuples.ex b/lib/koans/06_tuples.ex similarity index 100% rename from lib/koans/05_tuples.ex rename to lib/koans/06_tuples.ex diff --git a/lib/koans/06_lists.ex b/lib/koans/07_lists.ex similarity index 100% rename from lib/koans/06_lists.ex rename to lib/koans/07_lists.ex diff --git a/lib/koans/07_keyword_lists.ex b/lib/koans/08_keyword_lists.ex similarity index 100% rename from lib/koans/07_keyword_lists.ex rename to lib/koans/08_keyword_lists.ex diff --git a/lib/koans/08_maps.ex b/lib/koans/09_maps.ex similarity index 100% rename from lib/koans/08_maps.ex rename to lib/koans/09_maps.ex diff --git a/lib/koans/09_structs.ex b/lib/koans/10_structs.ex similarity index 100% rename from lib/koans/09_structs.ex rename to lib/koans/10_structs.ex diff --git a/lib/koans/10_pattern_matching.ex b/lib/koans/11_pattern_matching.ex similarity index 100% rename from lib/koans/10_pattern_matching.ex rename to lib/koans/11_pattern_matching.ex diff --git a/lib/koans/11_functions.ex b/lib/koans/12_functions.ex similarity index 100% rename from lib/koans/11_functions.ex rename to lib/koans/12_functions.ex diff --git a/lib/koans/12_enums.ex b/lib/koans/13_enums.ex similarity index 100% rename from lib/koans/12_enums.ex rename to lib/koans/13_enums.ex diff --git a/lib/koans/13_processes.ex b/lib/koans/14_processes.ex similarity index 100% rename from lib/koans/13_processes.ex rename to lib/koans/14_processes.ex diff --git a/lib/koans/14_tasks.ex b/lib/koans/15_tasks.ex similarity index 100% rename from lib/koans/14_tasks.ex rename to lib/koans/15_tasks.ex diff --git a/lib/koans/15_agents.ex b/lib/koans/16_agents.ex similarity index 100% rename from lib/koans/15_agents.ex rename to lib/koans/16_agents.ex diff --git a/lib/runner.ex b/lib/runner.ex index 98cc08b..9741bb4 100644 --- a/lib/runner.ex +++ b/lib/runner.ex @@ -3,6 +3,7 @@ defmodule Runner do Equalities, Strings, Sigils, + Numbers, Atoms, Tuples, Lists, diff --git a/test/koans/numbers_koans_test.exs b/test/koans/numbers_koans_test.exs new file mode 100644 index 0000000..f60690e --- /dev/null +++ b/test/koans/numbers_koans_test.exs @@ -0,0 +1,28 @@ +defmodule NumbersTests do + use ExUnit.Case + import TestHarness + + test "Numbers" do + answers = [ + true, + true, + [5, 8, 1, 2, 7], + 1234, + '7', + "1234", + 42, + 35.0, + 34.3, + 99.0, + 12.34, + 34.5, + 1.0, + {:multiple, [6.0, 5.0, 8.9, -5.567]}, + {:multiple, [1, 10]}, + {:multiple, [true, true, false]}, + {:multiple, [true, false]}, + ] + + test_all(Numbers, answers) + end +end