allergies
This commit is contained in:
241
elixir/allergies/test/allergies_test.exs
Normal file
241
elixir/allergies/test/allergies_test.exs
Normal file
@@ -0,0 +1,241 @@
|
||||
defmodule AllergiesTest do
|
||||
use ExUnit.Case
|
||||
|
||||
defp assert_is_a_set_containing(list, to_contain) do
|
||||
set = Enum.into(list, MapSet.new())
|
||||
|
||||
same_contents =
|
||||
to_contain
|
||||
|> Enum.into(MapSet.new())
|
||||
|> MapSet.equal?(set)
|
||||
|
||||
assert same_contents,
|
||||
"Expected a set with: #{inspect(to_contain)} got #{inspect(set |> MapSet.to_list())}"
|
||||
end
|
||||
|
||||
describe "allergy list against expected allergens -" do
|
||||
test "no allergies at all" do
|
||||
Allergies.list(0) |> assert_is_a_set_containing([])
|
||||
end
|
||||
|
||||
test "allergic to just eggs" do
|
||||
Allergies.list(1) |> assert_is_a_set_containing(~w[eggs])
|
||||
end
|
||||
|
||||
test "allergic to just peanuts" do
|
||||
Allergies.list(2) |> assert_is_a_set_containing(~w[peanuts])
|
||||
end
|
||||
|
||||
test "allergic to just strawberries" do
|
||||
Allergies.list(8) |> assert_is_a_set_containing(~w[strawberries])
|
||||
end
|
||||
|
||||
test "allergic to eggs and peanuts" do
|
||||
Allergies.list(3) |> assert_is_a_set_containing(~w[eggs peanuts])
|
||||
end
|
||||
|
||||
test "allergic to more than eggs but not peanuts" do
|
||||
Allergies.list(5) |> assert_is_a_set_containing(~w[eggs shellfish])
|
||||
end
|
||||
|
||||
test "allergic to lots of stuff" do
|
||||
Allergies.list(248)
|
||||
|> assert_is_a_set_containing(~w[strawberries tomatoes chocolate pollen cats])
|
||||
end
|
||||
|
||||
test "allergic to everything" do
|
||||
Allergies.list(255)
|
||||
|> assert_is_a_set_containing(
|
||||
~w[eggs peanuts shellfish strawberries tomatoes chocolate pollen cats]
|
||||
)
|
||||
end
|
||||
|
||||
test "ignore non allergen score parts" do
|
||||
Allergies.list(509)
|
||||
|> assert_is_a_set_containing(
|
||||
~w[eggs shellfish strawberries tomatoes chocolate pollen cats]
|
||||
)
|
||||
end
|
||||
|
||||
test "ignore non allergen score parts without highest valid score" do
|
||||
Allergies.list(257)
|
||||
|> assert_is_a_set_containing(~w[eggs])
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for egg allergies -" do
|
||||
test "not allergic to eggs" do
|
||||
refute Allergies.allergic_to?(0, "eggs")
|
||||
end
|
||||
|
||||
test "is allergic to only eggs" do
|
||||
assert Allergies.allergic_to?(1, "eggs")
|
||||
end
|
||||
|
||||
test "is allergic to eggs and something else" do
|
||||
assert Allergies.allergic_to?(3, "eggs")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not eggs" do
|
||||
refute Allergies.allergic_to?(2, "eggs")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including eggs)" do
|
||||
assert Allergies.allergic_to?(255, "eggs")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for peanuts allergies -" do
|
||||
test "not allergic to peanuts" do
|
||||
refute Allergies.allergic_to?(0, "peanuts")
|
||||
end
|
||||
|
||||
test "is allergic to only peanuts" do
|
||||
assert Allergies.allergic_to?(2, "peanuts")
|
||||
end
|
||||
|
||||
test "is allergic to peanuts and something else" do
|
||||
assert Allergies.allergic_to?(7, "peanuts")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not peanuts" do
|
||||
refute Allergies.allergic_to?(5, "peanuts")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including peanuts)" do
|
||||
assert Allergies.allergic_to?(255, "peanuts")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for shellfish allergies -" do
|
||||
test "not allergic to shellfish" do
|
||||
refute Allergies.allergic_to?(0, "shellfish")
|
||||
end
|
||||
|
||||
test "is allergic to only shellfish" do
|
||||
assert Allergies.allergic_to?(4, "shellfish")
|
||||
end
|
||||
|
||||
test "is allergic to shellfish and something else" do
|
||||
assert Allergies.allergic_to?(14, "shellfish")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not shellfish" do
|
||||
refute Allergies.allergic_to?(10, "shellfish")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including shellfish)" do
|
||||
assert Allergies.allergic_to?(255, "shellfish")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for strawberries allergies -" do
|
||||
test "not allergic to strawberries" do
|
||||
refute Allergies.allergic_to?(0, "strawberries")
|
||||
end
|
||||
|
||||
test "is allergic to only strawberries" do
|
||||
assert Allergies.allergic_to?(8, "strawberries")
|
||||
end
|
||||
|
||||
test "is allergic to strawberries and something else" do
|
||||
assert Allergies.allergic_to?(28, "strawberries")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not strawberries" do
|
||||
refute Allergies.allergic_to?(20, "strawberries")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including strawberries)" do
|
||||
assert Allergies.allergic_to?(255, "strawberries")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for tomatoes allergies -" do
|
||||
test "not allergic to tomatoes" do
|
||||
refute Allergies.allergic_to?(0, "tomatoes")
|
||||
end
|
||||
|
||||
test "is allergic to only tomatoes" do
|
||||
assert Allergies.allergic_to?(16, "tomatoes")
|
||||
end
|
||||
|
||||
test "is allergic to tomatoes and something else" do
|
||||
assert Allergies.allergic_to?(56, "tomatoes")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not tomatoes" do
|
||||
refute Allergies.allergic_to?(40, "tomatoes")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including tomatoes)" do
|
||||
assert Allergies.allergic_to?(255, "tomatoes")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for chocolate allergies -" do
|
||||
test "not allergic to chocolate" do
|
||||
refute Allergies.allergic_to?(0, "chocolate")
|
||||
end
|
||||
|
||||
test "is allergic to only chocolate" do
|
||||
assert Allergies.allergic_to?(32, "chocolate")
|
||||
end
|
||||
|
||||
test "is allergic to chocolate and something else" do
|
||||
assert Allergies.allergic_to?(112, "chocolate")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not chocolate" do
|
||||
refute Allergies.allergic_to?(80, "chocolate")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including chocolate)" do
|
||||
assert Allergies.allergic_to?(255, "chocolate")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for pollen allergies -" do
|
||||
test "not allergic to pollen" do
|
||||
refute Allergies.allergic_to?(0, "pollen")
|
||||
end
|
||||
|
||||
test "is allergic to only pollen" do
|
||||
assert Allergies.allergic_to?(64, "pollen")
|
||||
end
|
||||
|
||||
test "is allergic to pollen and something else" do
|
||||
assert Allergies.allergic_to?(224, "pollen")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not pollen" do
|
||||
refute Allergies.allergic_to?(160, "pollen")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including pollen)" do
|
||||
assert Allergies.allergic_to?(255, "pollen")
|
||||
end
|
||||
end
|
||||
|
||||
describe "score for cats allergies -" do
|
||||
test "not allergic to cats" do
|
||||
refute Allergies.allergic_to?(0, "cats")
|
||||
end
|
||||
|
||||
test "is allergic to only cats" do
|
||||
assert Allergies.allergic_to?(128, "cats")
|
||||
end
|
||||
|
||||
test "is allergic to cats and something else" do
|
||||
assert Allergies.allergic_to?(192, "cats")
|
||||
end
|
||||
|
||||
test "is allergic to something, but not cats" do
|
||||
refute Allergies.allergic_to?(64, "cats")
|
||||
end
|
||||
|
||||
test "is allergic to everything (including cats)" do
|
||||
assert Allergies.allergic_to?(255, "cats")
|
||||
end
|
||||
end
|
||||
end
|
||||
2
elixir/allergies/test/test_helper.exs
Normal file
2
elixir/allergies/test/test_helper.exs
Normal file
@@ -0,0 +1,2 @@
|
||||
ExUnit.start()
|
||||
ExUnit.configure(exclude: :pending, trace: true)
|
||||
Reference in New Issue
Block a user