Skip to content

twelve-days: re-implement according to canonical data #1306

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Feb 20, 2018
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
11 changes: 3 additions & 8 deletions exercises/twelve-days/example.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,9 @@ def verse(day_number):
if len(gifts) > 1:
gifts[:-1] = [', '.join(gifts[:-1])]
gifts = ', and '.join(gifts)
return 'On the {} day of Christmas my true love gave to me, {}.\n'.format(
return 'On the {} day of Christmas my true love gave to me, {}.'.format(
ORDINAL[day_number], gifts)


def verses(start, end):
return ''.join([verse(n) + '\n'
for n in range(start, end + 1)])


def sing():
return verses(1, 12)
def recite(start, end):
return [verse(n) for n in range(start, end + 1)]
10 changes: 1 addition & 9 deletions exercises/twelve-days/twelve_days.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,2 @@
def verse(day_number):
pass


def verses(start, end):
pass


def sing():
def recite(start_verse, end_verse):
pass
101 changes: 51 additions & 50 deletions exercises/twelve-days/twelve_days_test.py
Original file line number Diff line number Diff line change
@@ -1,79 +1,81 @@
import unittest

from twelve_days import sing, verse, verses
from twelve_days import recite


class TwelveDaysTests(unittest.TestCase):
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.1.0

class VerseTests(unittest.TestCase):
def test_verse1(self):
expected = ("On the first day of Christmas my true love gave to me, "
"a Partridge in a Pear Tree.\n")
self.assertEqual(verse(1), expected)
expected = ["On the first day of Christmas my true love gave to me, "
"a Partridge in a Pear Tree."]
self.assertEqual(recite(1, 1), expected)

def test_verse2(self):
expected = ("On the second day of Christmas my true love gave to me, "
expected = ["On the second day of Christmas my true love gave to me, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(2), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(2, 2), expected)

def test_verse3(self):
expected = ("On the third day of Christmas my true love gave to me, "
expected = ["On the third day of Christmas my true love gave to me, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(3), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(3, 3), expected)

def test_verse4(self):
expected = ("On the fourth day of Christmas my true love gave to me, "
expected = ["On the fourth day of Christmas my true love gave to me, "
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(4), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(4, 4), expected)

def test_verse5(self):
expected = ("On the fifth day of Christmas my true love gave to me, "
expected = ["On the fifth day of Christmas my true love gave to me, "
"five Gold Rings, "
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(5), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(5, 5), expected)

def test_verse6(self):
expected = ("On the sixth day of Christmas my true love gave to me, "
expected = ["On the sixth day of Christmas my true love gave to me, "
"six Geese-a-Laying, "
"five Gold Rings, "
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(6), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(6, 6), expected)

def test_verse7(self):
expected = ("On the seventh day of Christmas my true love gave to me, "
expected = ["On the seventh day of Christmas my true love gave to me, "
"seven Swans-a-Swimming, "
"six Geese-a-Laying, "
"five Gold Rings, "
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(7), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(7, 7), expected)

def test_verse8(self):
expected = ("On the eighth day of Christmas my true love gave to me, "
expected = ["On the eighth day of Christmas my true love gave to me, "
"eight Maids-a-Milking, "
"seven Swans-a-Swimming, "
"six Geese-a-Laying, "
"five Gold Rings, "
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(8), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(8, 8), expected)

def test_verse9(self):
expected = ("On the ninth day of Christmas my true love gave to me, "
expected = ["On the ninth day of Christmas my true love gave to me, "
"nine Ladies Dancing, "
"eight Maids-a-Milking, "
"seven Swans-a-Swimming, "
Expand All @@ -82,11 +84,11 @@ def test_verse9(self):
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(9), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(9, 9), expected)

def test_verse10(self):
expected = ("On the tenth day of Christmas my true love gave to me, "
expected = ["On the tenth day of Christmas my true love gave to me, "
"ten Lords-a-Leaping, "
"nine Ladies Dancing, "
"eight Maids-a-Milking, "
Expand All @@ -96,11 +98,11 @@ def test_verse10(self):
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(10), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(10, 10), expected)

def test_verse11(self):
expected = ("On the eleventh day of Christmas "
expected = ["On the eleventh day of Christmas "
"my true love gave to me, "
"eleven Pipers Piping, "
"ten Lords-a-Leaping, "
Expand All @@ -112,11 +114,11 @@ def test_verse11(self):
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(11), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(11, 11), expected)

def test_verse12(self):
expected = ("On the twelfth day of Christmas my true love gave to me, "
expected = ["On the twelfth day of Christmas my true love gave to me, "
"twelve Drummers Drumming, "
"eleven Pipers Piping, "
"ten Lords-a-Leaping, "
Expand All @@ -128,23 +130,22 @@ def test_verse12(self):
"four Calling Birds, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n")
self.assertEqual(verse(12), expected)
"and a Partridge in a Pear Tree."]
self.assertEqual(recite(12, 12), expected)

def test_multiple_verses(self):
expected = ("On the first day of Christmas my true love gave to me, "
"a Partridge in a Pear Tree.\n\n"
"On the second day of Christmas my true love gave to me, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n\n"
"On the third day of Christmas my true love gave to me, "
"three French Hens, "
"two Turtle Doves, "
"and a Partridge in a Pear Tree.\n\n")
self.assertEqual(verses(1, 3), expected)

class LyricsTests(unittest.TestCase):
def test_first_three_verses_of_the_song(self):
expected = [recite(n, n)[0] for n in range(1, 4)]
self.assertEqual(recite(1, 3), expected)

def test_three_verses_from_the_middle_of_the_song(self):
expected = [recite(n, n)[0] for n in range(4, 7)]
self.assertEqual(recite(4, 6), expected)

def test_the_whole_song(self):
self.assertEqual(verses(1, 12), sing())
expected = [recite(n, n)[0] for n in range(1, 13)]
self.assertEqual(recite(1, 12), expected)


if __name__ == '__main__':
Expand Down