Extract answers from Structs module
This commit is contained in:
@@ -5,38 +5,31 @@ defmodule Structs do
|
||||
defstruct [:name, :age ]
|
||||
end
|
||||
|
||||
koan "structs are defined and named after a module" do
|
||||
person = %Person{}
|
||||
assert person == %Person{}
|
||||
end
|
||||
|
||||
koan "you can access the fields of a struct" do
|
||||
nobody = %Person{}
|
||||
assert nobody.age == nil
|
||||
assert nobody.name == nil
|
||||
assert nobody.age == :__
|
||||
end
|
||||
|
||||
koan "You can pass initial values to structs" do
|
||||
joe = %Person{name: "Joe", age: 23}
|
||||
assert joe.age == 23
|
||||
assert joe.name == "Joe"
|
||||
assert joe.name == :__
|
||||
end
|
||||
|
||||
koan "update fields with the pipe '|' operator" do
|
||||
joe = %Person{name: "Joe", age: 23}
|
||||
older = %{ joe | age: joe.age + 10}
|
||||
assert older.age == 33
|
||||
assert older.age == :__
|
||||
end
|
||||
|
||||
koan "the original struct is not affected by updates" do
|
||||
joe = %Person{name: "Joe", age: 23}
|
||||
assert %{ joe | age: joe.age + 10}.age == 33
|
||||
assert joe.age == 23
|
||||
assert joe.age == :__
|
||||
end
|
||||
|
||||
koan "you can pattern match into the fields of a struct" do
|
||||
%Person{age: age} = %Person{age: 22, name: "Silvia"}
|
||||
assert age == 22
|
||||
assert age == :__
|
||||
end
|
||||
|
||||
defmodule Plane do
|
||||
@@ -44,16 +37,14 @@ defmodule Structs do
|
||||
end
|
||||
|
||||
koan "or onto the type of the struct itself" do
|
||||
assert is_a_plane(%Plane{passengers: 417, maker: :boeing})
|
||||
refute is_a_plane(%Person{age: 22, name: "Silvia"})
|
||||
assert is_a_plane(%Plane{passengers: 417, maker: :boeing}) == :__
|
||||
end
|
||||
|
||||
def is_a_plane(%Plane{}), do: true
|
||||
def is_a_plane(_), do: false
|
||||
|
||||
koan "are basically maps" do
|
||||
silvia = %Person{age: 22, name: "Silvia"}
|
||||
|
||||
assert Map.fetch!(silvia, :age) == 22
|
||||
assert Map.fetch!(silvia, :age) == :__
|
||||
end
|
||||
end
|
||||
|
||||
@@ -149,6 +149,20 @@ defmodule KoansHarnessTest do
|
||||
test_all(Arithmetic, answers)
|
||||
end
|
||||
|
||||
test "Structs" do
|
||||
answers = [
|
||||
nil,
|
||||
"Joe",
|
||||
33,
|
||||
23,
|
||||
22,
|
||||
true,
|
||||
22,
|
||||
]
|
||||
|
||||
test_all(Structs, answers)
|
||||
end
|
||||
|
||||
def test_all(module, answers) do
|
||||
module.all_koans
|
||||
|> Enum.zip(answers)
|
||||
|
||||
Reference in New Issue
Block a user