city-office & high-score
This commit is contained in:
186
elixir/high-score/test/high_score_test.exs
Normal file
186
elixir/high-score/test/high_score_test.exs
Normal file
@@ -0,0 +1,186 @@
|
||||
defmodule HighScoreTest do
|
||||
use ExUnit.Case
|
||||
|
||||
# Trivia: Scores used in this test suite are based on lines of code
|
||||
# added to the elixir-lang/elixir github repository as of Apr 27, 2020.
|
||||
|
||||
@tag task_id: 1
|
||||
test "new/1 result in empty score map" do
|
||||
assert HighScore.new() == %{}
|
||||
end
|
||||
|
||||
describe "add_player/2" do
|
||||
@tag task_id: 2
|
||||
test "add player without score to empty score map" do
|
||||
scores = HighScore.new()
|
||||
|
||||
assert HighScore.add_player(scores, "José Valim") == %{"José Valim" => 0}
|
||||
end
|
||||
|
||||
@tag task_id: 2
|
||||
test "add two players without score to empty map" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.add_player("Chris McCord")
|
||||
|
||||
assert scores == %{"Chris McCord" => 0, "José Valim" => 0}
|
||||
end
|
||||
|
||||
@tag task_id: 2
|
||||
test "add player with score to empty score map" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim", 486_373)
|
||||
|
||||
assert scores == %{"José Valim" => 486_373}
|
||||
end
|
||||
|
||||
@tag task_id: 2
|
||||
test "add players with scores to empty score map" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim", 486_373)
|
||||
|> HighScore.add_player("Dave Thomas", 2_374)
|
||||
|
||||
assert scores == %{"José Valim" => 486_373, "Dave Thomas" => 2_374}
|
||||
end
|
||||
end
|
||||
|
||||
describe "remove_player/2" do
|
||||
@tag task_id: 3
|
||||
test "remove from empty score map results in empty score map" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.remove_player("José Valim")
|
||||
|
||||
assert scores == %{}
|
||||
end
|
||||
|
||||
@tag task_id: 3
|
||||
test "remove player after adding results in empty score map" do
|
||||
map =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.remove_player("José Valim")
|
||||
|
||||
assert map == %{}
|
||||
end
|
||||
|
||||
@tag task_id: 3
|
||||
test "remove first player after adding two results in map with remaining player" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.add_player("Chris McCord")
|
||||
|> HighScore.remove_player("José Valim")
|
||||
|
||||
assert scores == %{"Chris McCord" => 0}
|
||||
end
|
||||
|
||||
@tag task_id: 3
|
||||
test "remove second player after adding two results in map with remaining player" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.add_player("Chris McCord")
|
||||
|> HighScore.remove_player("Chris McCord")
|
||||
|
||||
assert scores == %{"José Valim" => 0}
|
||||
end
|
||||
end
|
||||
|
||||
describe "reset_score/2" do
|
||||
@tag task_id: 4
|
||||
test "resetting score for non-existent player sets player score to 0" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.reset_score("José Valim")
|
||||
|
||||
assert scores == %{"José Valim" => 0}
|
||||
end
|
||||
|
||||
@tag task_id: 4
|
||||
test "resetting score for existing player sets previous player score to 0" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim", 486_373)
|
||||
|> HighScore.reset_score("José Valim")
|
||||
|
||||
assert scores == %{"José Valim" => 0}
|
||||
end
|
||||
end
|
||||
|
||||
describe "update_score/3" do
|
||||
@tag task_id: 5
|
||||
test "update score for non existent player initializes value" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.update_score("José Valim", 486_373)
|
||||
|
||||
assert scores == %{"José Valim" => 486_373}
|
||||
end
|
||||
|
||||
@tag task_id: 5
|
||||
test "update score for existing player adds score to previous" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.update_score("José Valim", 486_373)
|
||||
|
||||
assert scores == %{"José Valim" => 486_373}
|
||||
end
|
||||
|
||||
@tag task_id: 5
|
||||
test "update score for existing player with non-zero score adds score to previous" do
|
||||
scores =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.update_score("José Valim", 1)
|
||||
|> HighScore.update_score("José Valim", 486_373)
|
||||
|
||||
assert scores == %{"José Valim" => 486_374}
|
||||
end
|
||||
end
|
||||
|
||||
describe "get_players/1" do
|
||||
@tag task_id: 6
|
||||
test "empty score map gives empty list" do
|
||||
scores_by_player =
|
||||
HighScore.new()
|
||||
|> HighScore.get_players()
|
||||
|
||||
assert scores_by_player == []
|
||||
end
|
||||
|
||||
@tag task_id: 6
|
||||
test "score map with one entry gives one result" do
|
||||
players =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim")
|
||||
|> HighScore.update_score("José Valim", 486_373)
|
||||
|> HighScore.get_players()
|
||||
|
||||
assert players == ["José Valim"]
|
||||
end
|
||||
|
||||
@tag task_id: 6
|
||||
test "score map with multiple entries gives results in unknown order" do
|
||||
players =
|
||||
HighScore.new()
|
||||
|> HighScore.add_player("José Valim", 486_373)
|
||||
|> HighScore.add_player("Dave Thomas", 2_374)
|
||||
|> HighScore.add_player("Chris McCord", 0)
|
||||
|> HighScore.add_player("Saša Jurić", 762)
|
||||
|> HighScore.get_players()
|
||||
|> Enum.sort()
|
||||
|
||||
assert players == [
|
||||
"Chris McCord",
|
||||
"Dave Thomas",
|
||||
"José Valim",
|
||||
"Saša Jurić"
|
||||
]
|
||||
end
|
||||
end
|
||||
end
|
||||
2
elixir/high-score/test/test_helper.exs
Normal file
2
elixir/high-score/test/test_helper.exs
Normal file
@@ -0,0 +1,2 @@
|
||||
ExUnit.start()
|
||||
ExUnit.configure(exclude: :pending, trace: true, seed: 0)
|
||||
Reference in New Issue
Block a user