Attempt at making maps easier to go through
This commit is contained in:
@@ -1,65 +1,65 @@
|
|||||||
defmodule Maps do
|
defmodule Maps do
|
||||||
use Koans
|
use Koans
|
||||||
|
|
||||||
|
@person %{
|
||||||
|
name: "Jon",
|
||||||
|
last_name: "Snow",
|
||||||
|
age: 27
|
||||||
|
}
|
||||||
|
|
||||||
koan "Maps represent structured data, like a person" do
|
koan "Maps represent structured data, like a person" do
|
||||||
assert %{ :name => "Jon",
|
assert @person == %{name: :__,
|
||||||
:last_name => "Snow",
|
last_name: "Snow",
|
||||||
:age => 27 } == %{ :name => :__,
|
age: 27 }
|
||||||
:last_name => "Snow",
|
|
||||||
:age => 27 }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "You can get all the keys from the map" do
|
koan "You can get all the keys from the map" do
|
||||||
assert Map.keys(%{ :name => "Jon", :last_name => "Snow", :age => 27 }) |> Enum.sort == :__
|
assert Map.keys(@person) |> Enum.sort == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Or you can also get all the values from it" do
|
koan "Or you can also get all the values from it" do
|
||||||
assert Map.values(%{ :name => "Jon", :last_name => "Snow", :age => 27 }) |> Enum.sort == :__
|
assert Map.values(@person) |> Enum.sort == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Fetching a value returns a tuple with ok when it exists" do
|
koan "Fetching a value returns a tuple with ok when it exists" do
|
||||||
assert Map.fetch(%{ :name => "Jon", :last_name => "Snow", :age => 27 }, :age) == :__
|
assert Map.fetch(@person, :age) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Or the atom :error when it doesnt" do
|
koan "Or the atom :error when it doesnt" do
|
||||||
assert Map.fetch(%{ :name => "Jon", :last_name => "Snow", :age => 27 }, :family) == :__
|
assert Map.fetch(@person, :family) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Extending a map is a simple as putting in a new pair" do
|
koan "Extending a map is a simple as putting in a new pair" do
|
||||||
assert Map.put(%{ :name => "Jon", :last_name => "Snow"}, :age, 27) == :__
|
person_with_hobby = Map.put(@person, :hobby, "Kayaking")
|
||||||
|
assert Map.fetch(person_with_hobby, :hobby) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Put can also overwrite existing values" do
|
koan "Put can also overwrite existing values" do
|
||||||
assert Map.put(%{ :name => "Jon", :last_name => "Snow", :age => 15}, :age, 27) == :__
|
older_person = Map.put(@person, :age, 37)
|
||||||
|
assert Map.fetch(older_person, :age) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Or you can use some syntactic sugar for existing elements" do
|
koan "Or you can use some syntactic sugar for existing elements" do
|
||||||
initial = %{ :name => "Jon", :last_name => "Snow", :age => 16}
|
younger_person = %{ @person | age: 16 }
|
||||||
assert %{ initial | :age => 27 } == :__
|
assert Map.fetch(younger_person, :age) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Can remove pairs by key" do
|
koan "Can remove pairs by key" do
|
||||||
assert Map.delete(%{ :name => "Jon", :last_name => "Snow", :age => 15}, :age) == :__
|
without_age = Map.delete(@person, :age)
|
||||||
end
|
assert Map.keys(without_age) |> Enum.sort == :__
|
||||||
|
|
||||||
koan "If you have a list of pairs, you can turn them into a map" do
|
|
||||||
assert Map.new( [{:name, "Jon"}, {:last_name, "Snow"}, {:age, 27}] ) == :__
|
|
||||||
end
|
|
||||||
|
|
||||||
koan "Going back to a list of pairs is just as easy" do
|
|
||||||
assert Map.to_list(%{ :name => "Jon", :last_name => "Snow", :age => 27 }) == :__
|
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "Can merge maps" do
|
koan "Can merge maps" do
|
||||||
assert Map.merge(%{:name => "Jon"}, %{ :last_name => "Snow"}) == :__
|
assert Map.merge(%{name: "Jon"}, %{last_name: "Snow"}) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "When merging, the last map wins" do
|
koan "When merging, the last map wins" do
|
||||||
assert Map.merge(%{:name => "Robert", :last_name => "Snow"}, %{ :last_name => "Baratheon"}) == :__
|
merged = Map.merge(@person, %{ last_name: "Baratheon"})
|
||||||
|
assert Map.fetch(merged, :last_name) == :__
|
||||||
end
|
end
|
||||||
|
|
||||||
koan "You can also select sub-maps out of a larger map" do
|
koan "You can also select sub-maps out of a larger map" do
|
||||||
initial = %{ :name => "Jon", :last_name => "Snow", :age => 15}
|
initial = %{ name: "Jon", last_name: "Snow", age: 15}
|
||||||
assert Map.take(initial, [:name, :last_name]) == :__
|
assert Map.take(initial, [:name, :last_name]) == :__
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -90,14 +90,12 @@ defmodule KoansHarnessTest do
|
|||||||
[27, "Jon", "Snow"],
|
[27, "Jon", "Snow"],
|
||||||
{:ok, 27},
|
{:ok, 27},
|
||||||
:error,
|
:error,
|
||||||
%{ :name => "Jon", :last_name => "Snow", :age => 27 },
|
{:ok, "Kayaking"},
|
||||||
%{ :name => "Jon", :last_name => "Snow", :age => 27 },
|
{:ok, 37},
|
||||||
%{ :name => "Jon", :last_name => "Snow", :age => 27 },
|
{:ok, 16},
|
||||||
%{ :name => "Jon", :last_name => "Snow"},
|
[:last_name, :name],
|
||||||
%{ :name => "Jon", :last_name => "Snow", :age => 27 },
|
|
||||||
[age: 27, last_name: "Snow", name: "Jon" ],
|
|
||||||
%{:name => "Jon", :last_name => "Snow"},
|
%{:name => "Jon", :last_name => "Snow"},
|
||||||
%{:name => "Robert", :last_name => "Baratheon"},
|
{:ok, "Baratheon"},
|
||||||
%{ :name => "Jon", :last_name => "Snow"}
|
%{ :name => "Jon", :last_name => "Snow"}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user