Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion exercises/allergies/allergies.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ class Allergies(object):
def __init__(self, score):
pass

def is_allergic_to(self, item):
def allergic_to(self, item):
pass

@property
Expand Down
163 changes: 131 additions & 32 deletions exercises/allergies/allergies_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,62 +7,161 @@
unittest.TestCase.assertCountEqual = unittest.TestCase.assertItemsEqual


# Tests adapted from `problem-specifications//canonical-data.json` @ v1.2.0
# Tests adapted from `problem-specifications//canonical-data.json` @ v2.0.0

class AllergiesTest(unittest.TestCase):
def test_no_allergies_means_not_allergic(self):
allergies = Allergies(0)
self.assertIs(allergies.is_allergic_to('peanuts'), False)
self.assertIs(allergies.is_allergic_to('cats'), False)
self.assertIs(allergies.is_allergic_to('strawberries'), False)

def test_is_allergic_to_eggs(self):
self.assertIs(Allergies(1).is_allergic_to('eggs'), True)

def test_allergic_to_eggs_in_addition_to_other_stuff(self):
allergies = Allergies(5)
self.assertIs(allergies.is_allergic_to('eggs'), True)
self.assertIs(allergies.is_allergic_to('shellfish'), True)
self.assertIs(allergies.is_allergic_to('strawberries'), False)

def test_allergic_to_strawberries_but_not_peanuts(self):
allergies = Allergies(9)
self.assertIs(allergies.is_allergic_to('eggs'), True)
self.assertIs(allergies.is_allergic_to('peanuts'), False)
self.assertIs(allergies.is_allergic_to('shellfish'), False)
self.assertIs(allergies.is_allergic_to('strawberries'), True)

def test_no_allergies_at_all(self):

def test_eggs_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("eggs"), False)

def test_allergic_only_to_eggs(self):
self.assertIs(Allergies(1).allergic_to("eggs"), True)

def test_allergic_to_eggs_and_something_else(self):
self.assertIs(Allergies(3).allergic_to("eggs"), True)

def test_allergic_to_something_but_not_eggs(self):
self.assertIs(Allergies(2).allergic_to("eggs"), False)

def test_eggs_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("eggs"), True)

def test_peanuts_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("peanuts"), False)

def test_allergic_only_to_peanuts(self):
self.assertIs(Allergies(2).allergic_to("peanuts"), True)

def test_allergic_to_peanuts_and_something_else(self):
self.assertIs(Allergies(7).allergic_to("peanuts"), True)

def test_allergic_to_something_but_not_peanuts(self):
self.assertIs(Allergies(5).allergic_to("peanuts"), False)

def test_peanuts_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("peanuts"), True)

def test_shellfish_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("shellfish"), False)

def test_allergic_only_to_shellfish(self):
self.assertIs(Allergies(4).allergic_to("shellfish"), True)

def test_allergic_to_shellfish_and_something_else(self):
self.assertIs(Allergies(14).allergic_to("shellfish"), True)

def test_allergic_to_something_but_not_shellfish(self):
self.assertIs(Allergies(10).allergic_to("shellfish"), False)

def test_shellfish_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("shellfish"), True)

def test_strawberries_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("strawberries"), False)

def test_allergic_only_to_strawberries(self):
self.assertIs(Allergies(8).allergic_to("strawberries"), True)

def test_allergic_to_strawberries_and_something_else(self):
self.assertIs(Allergies(28).allergic_to("strawberries"), True)

def test_allergic_to_something_but_not_strawberries(self):
self.assertIs(Allergies(20).allergic_to("strawberries"), False)

def test_strawberries_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("strawberries"), True)

def test_tomatoes_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("tomatoes"), False)

def test_allergic_only_to_tomatoes(self):
self.assertIs(Allergies(16).allergic_to("tomatoes"), True)

def test_allergic_to_tomatoes_and_something_else(self):
self.assertIs(Allergies(56).allergic_to("tomatoes"), True)

def test_allergic_to_something_but_not_tomatoes(self):
self.assertIs(Allergies(40).allergic_to("tomatoes"), False)

def test_tomatoes_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("tomatoes"), True)

def test_chocolate_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("chocolate"), False)

def test_allergic_only_to_chocolate(self):
self.assertIs(Allergies(32).allergic_to("chocolate"), True)

def test_allergic_to_chocolate_and_something_else(self):
self.assertIs(Allergies(112).allergic_to("chocolate"), True)

def test_allergic_to_something_but_not_chocolate(self):
self.assertIs(Allergies(80).allergic_to("chocolate"), False)

def test_chocolate_alergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("chocolate"), True)

def test_pollen_not_alergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("pollen"), False)

def test_allergic_only_to_pollen(self):
self.assertIs(Allergies(64).allergic_to("pollen"), True)

def test_allergic_to_pollen_and_something_else(self):
self.assertIs(Allergies(224).allergic_to("pollen"), True)

def test_allergic_to_something_but_not_pollen(self):
self.assertIs(Allergies(160).allergic_to("pollen"), False)

def test_pollen_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to("pollen"), True)

def test_cats_not_allergic_to_anything(self):
self.assertIs(Allergies(0).allergic_to("cats"), False)

def test_allergic_only_to_cats(self):
self.assertIs(Allergies(128).allergic_to("cats"), True)

def test_allergic_to_cats_and_something_else(self):
self.assertIs(Allergies(192).allergic_to("cats"), True)

def test_allergic_to_something_but_not_cats(self):
self.assertIs(Allergies(64).allergic_to("cats"), False)

def test_cats_allergic_to_everything(self):
self.assertIs(Allergies(255).allergic_to('cats'), True)

def test_no_allergies(self):
self.assertEqual(Allergies(0).lst, [])

def test_allergic_to_just_eggs(self):
def test_just_eggs(self):
self.assertEqual(Allergies(1).lst, ['eggs'])

def test_allergic_to_just_peanuts(self):
def test_just_peanuts(self):
self.assertEqual(Allergies(2).lst, ['peanuts'])

def test_allergic_to_just_strawberries(self):
def test_just_strawberries(self):
self.assertEqual(Allergies(8).lst, ['strawberries'])

def test_allergic_to_eggs_and_peanuts(self):
def test_eggs_and_peanuts(self):
self.assertCountEqual(Allergies(3).lst, ['eggs', 'peanuts'])

def test_allergic_to_more_than_eggs_but_not_peanuts(self):
def test_more_than_eggs_but_not_peanuts(self):
self.assertCountEqual(Allergies(5).lst, ['eggs', 'shellfish'])

def test_allergic_to_lots_of_stuff(self):
def test_lots_of_stuff(self):
self.assertCountEqual(
Allergies(248).lst,
['strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats'])

def test_allergic_to_everything(self):
def test_everything(self):
self.assertCountEqual(
Allergies(255).lst, [
'eggs', 'peanuts', 'shellfish', 'strawberries', 'tomatoes',
'chocolate', 'pollen', 'cats'
])

def test_ignore_non_allergen_score_parts(self):
def test_no_allergen_score_parts(self):
self.assertCountEqual(
Allergies(509).lst, [
'eggs', 'shellfish', 'strawberries', 'tomatoes', 'chocolate',
Expand Down
4 changes: 2 additions & 2 deletions exercises/allergies/example.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ class Allergies(object):
def __init__(self, score):
self.score = score

def is_allergic_to(self, allergy):
def allergic_to(self, allergy):
return bool(self.score & 1 << self._allergies.index(allergy))

@property
def lst(self):
return [allergy for allergy in self._allergies
if self.is_allergic_to(allergy)]
if self.allergic_to(allergy)]