diff --git a/lib/koans/10_map_sets.ex b/lib/koans/10_map_sets.ex new file mode 100644 index 0000000..353e8b7 --- /dev/null +++ b/lib/koans/10_map_sets.ex @@ -0,0 +1,70 @@ +defmodule MapSets do + use Koans + + @intro "My name is Set, MapSet." + + @set MapSet.new([1, 2, 3, 4, 5]) + + koan "I am very similar to a list" do + assert Enum.fetch(@set, 0) == {:ok, ___} + end + + koan "However, I do not allow duplication" do + new_set = MapSet.new([1, 1, 2, 3, 3, 3]) + + assert MapSet.size(new_set) == ___ + end + + koan "Even though I am like a list I am unordered after 32 elements" do + assert 1..33 |> MapSet.new() |> Enum.fetch(0) == {___, 11} + end + + koan "I am merely another collection but, you can perform some operations on me" do + new_set = MapSet.new(@set, fn x -> 3 * x end) + + assert MapSet.member?(new_set, 15) == ___ + assert MapSet.member?(new_set, 1) == ___ + end + + koan "Does this value exist in the map set?" do + assert MapSet.member?(@set, 3) == ___ + end + + koan "Add this value into a map set" do + modified_set = MapSet.put(@set, 6) + + assert MapSet.member?(modified_set, 6) == ___ + end + + koan "Delete this value from the map set" do + modified_set = MapSet.delete(@set, 1) + + assert MapSet.member?(modified_set, 1) == ___ + end + + koan "How large is my map set?" do + assert MapSet.size(@set) == ___ + end + + koan "Are these maps twins?" do + new_set = MapSet.new([1, 2, 3]) + + assert MapSet.equal?(@set, new_set) == ___ + end + + koan "I want only the common values in both sets" do + intersection_set = MapSet.intersection(@set, MapSet.new([5, 6, 7])) + + assert MapSet.member?(intersection_set, 5) == ___ + end + + koan "Unify my sets" do + new_set = MapSet.union(@set, MapSet.new([1, 5, 6, 7])) + + assert MapSet.size(new_set) == ___ + end + + koan "I want my set in a list" do + assert MapSet.to_list(@set) == ___ + end +end \ No newline at end of file diff --git a/lib/koans/10_structs.ex b/lib/koans/11_structs.ex similarity index 100% rename from lib/koans/10_structs.ex rename to lib/koans/11_structs.ex diff --git a/lib/koans/11_pattern_matching.ex b/lib/koans/12_pattern_matching.ex similarity index 100% rename from lib/koans/11_pattern_matching.ex rename to lib/koans/12_pattern_matching.ex diff --git a/lib/koans/12_functions.ex b/lib/koans/13_functions.ex similarity index 100% rename from lib/koans/12_functions.ex rename to lib/koans/13_functions.ex diff --git a/lib/koans/13_enums.ex b/lib/koans/14_enums.ex similarity index 100% rename from lib/koans/13_enums.ex rename to lib/koans/14_enums.ex diff --git a/lib/koans/14_processes.ex b/lib/koans/15_processes.ex similarity index 100% rename from lib/koans/14_processes.ex rename to lib/koans/15_processes.ex diff --git a/lib/koans/15_tasks.ex b/lib/koans/16_tasks.ex similarity index 100% rename from lib/koans/15_tasks.ex rename to lib/koans/16_tasks.ex diff --git a/lib/koans/16_agents.ex b/lib/koans/17_agents.ex similarity index 100% rename from lib/koans/16_agents.ex rename to lib/koans/17_agents.ex diff --git a/lib/koans/16_protocols.ex b/lib/koans/18_protocols.ex similarity index 100% rename from lib/koans/16_protocols.ex rename to lib/koans/18_protocols.ex diff --git a/lib/runner.ex b/lib/runner.ex index 870ed25..ac87ae5 100644 --- a/lib/runner.ex +++ b/lib/runner.ex @@ -9,6 +9,7 @@ defmodule Runner do Lists, KeywordLists, Maps, + MapSets, Structs, PatternMatching, Functions, diff --git a/test/koans/map_sets_koans_test.exs b/test/koans/map_sets_koans_test.exs new file mode 100644 index 0000000..2bb25ea --- /dev/null +++ b/test/koans/map_sets_koans_test.exs @@ -0,0 +1,23 @@ +defmodule MapSetsTest do + use ExUnit.Case + import TestHarness + + test "MapSets" do + answers = [ + 1, + 3, + :ok, + {:multiple, [true, false]}, + true, + true, + false, + 5, + false, + true, + 7, + [1, 2, 3, 4, 5], + ] + + test_all(MapSets, answers) + end +end \ No newline at end of file