Merge pull request #215 from elixirkoans/minor-koan-rearrangement

Minor koan rearrangement
This commit is contained in:
Felipe Seré
2018-02-02 09:33:57 +00:00
committed by GitHub
8 changed files with 32 additions and 28 deletions

View File

@@ -31,17 +31,4 @@ defmodule KeywordLists do
assert_raise ArgumentError, fn -> not_kw_list[___] end assert_raise ArgumentError, fn -> not_kw_list[___] end
end end
koan "Conveniently keyword lists can be used for function options" do
transform = fn str, opts ->
if opts[:upcase] do
String.upcase(str)
else
str
end
end
assert transform.("good", upcase: true) == ___
assert transform.("good", upcase: false) == ___
end
end end

View File

@@ -28,24 +28,16 @@ defmodule Structs do
assert older.age == ___ assert older.age == ___
end end
defmodule Plane do
defstruct passengers: 0, maker: :boeing
end
def plane?(%Plane{}), do: true
def plane?(_), do: false
koan "Or onto the type of the struct itself" do
assert plane?(%Plane{passengers: 417, maker: :boeing}) == ___
assert plane?(%Person{}) == ___
end
koan "Struct can be treated like maps" do koan "Struct can be treated like maps" do
silvia = %Person{age: 22, name: "Silvia"} silvia = %Person{age: 22, name: "Silvia"}
assert Map.fetch(silvia, :age) == ___ assert Map.fetch(silvia, :age) == ___
end end
defmodule Plane do
defstruct passengers: 0, maker: :boeing
end
defmodule Airline do defmodule Airline do
defstruct plane: %Plane{}, name: "Southwest" defstruct plane: %Plane{}, name: "Southwest"
end end
@@ -57,7 +49,7 @@ defmodule Structs do
koan "Use the update_in macro to modify a nested value" do koan "Use the update_in macro to modify a nested value" do
airline = %Airline{plane: %Plane{maker: :boeing, passengers: 200}} airline = %Airline{plane: %Plane{maker: :boeing, passengers: 200}}
assert update_in(airline.plane.passengers, &(&1 + 2)) == ___ assert update_in(airline.plane.passengers, fn(x) -> (x + 2) end) == ___
end end
koan "Use the put_in macro with atoms to replace a nested value in a non-struct" do koan "Use the put_in macro with atoms to replace a nested value in a non-struct" do

View File

@@ -101,6 +101,18 @@ defmodule PatternMatching do
assert name == ___ assert name == ___
end end
defmodule Plane do
defstruct passengers: 0, maker: :boeing
end
def plane?(%Plane{}), do: true
def plane?(_), do: false
koan "...or onto the type of the struct itself" do
assert plane?(%Plane{passengers: 417, maker: :boeing}) == ___
assert plane?(%Animal{}) == ___
end
koan "Structs will even match with a regular map" do koan "Structs will even match with a regular map" do
%{name: name} = %Animal{kind: "dog", name: "Max"} %{name: name} = %Animal{kind: "dog", name: "Max"}
assert name == ___ assert name == ___

View File

@@ -97,4 +97,17 @@ defmodule Functions do
assert result == ___ assert result == ___
end end
koan "Conveniently keyword lists can be used for function options" do
transform = fn str, opts ->
if opts[:upcase] do
String.upcase(str)
else
str
end
end
assert transform.("good", upcase: true) == ___
assert transform.("good", upcase: false) == ___
end
end end

View File

@@ -18,6 +18,7 @@ defmodule FunctionsTests do
100, 100,
1000, 1000,
"Full Name", "Full Name",
{:multiple, ["GOOD", "good"]},
] ]
test_all(Functions, answers) test_all(Functions, answers)

View File

@@ -9,7 +9,6 @@ defmodule KeywordListsTests do
"baz", "baz",
{:multiple, [:foo, "bar"]}, {:multiple, [:foo, "bar"]},
"foo", "foo",
{:multiple, ["GOOD", "good"]},
] ]
test_all(KeywordLists, answers) test_all(KeywordLists, answers)

View File

@@ -17,6 +17,7 @@ defmodule PatternsTests do
{:multiple, ["Mickey", "Donald", "I need a name!"]}, {:multiple, ["Mickey", "Donald", "I need a name!"]},
"dog", "dog",
"Max", "Max",
{:multiple, [true, false]},
"Max", "Max",
1, 1,
2, 2,

View File

@@ -8,7 +8,6 @@ defmodule StructsTests do
nil, nil,
"Joe", "Joe",
33, 33,
{:multiple, [true, false]},
{:ok, 22}, {:ok, 22},
%Structs.Airline{plane: %Structs.Plane{maker: :airbus}, name: "Southwest"}, %Structs.Airline{plane: %Structs.Plane{maker: :airbus}, name: "Southwest"},
%Structs.Airline{plane: %Structs.Plane{maker: :boeing, passengers: 202}, name: "Southwest"}, %Structs.Airline{plane: %Structs.Plane{maker: :boeing, passengers: 202}, name: "Southwest"},