Skip to content

Commit

Permalink
pascals-triangle: update tests to canonical-date v1.2.0 (#1164)
Browse files Browse the repository at this point in the history
  • Loading branch information
cmccandless authored Apr 3, 2018
1 parent 1c03092 commit 54c9694
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 52 deletions.
26 changes: 12 additions & 14 deletions exercises/pascals-triangle/example.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
def triangle(nth):
return [row(i) for i in range(nth + 1)]


def is_triangle(t):
new_t = triangle(len(t) - 1)
return t == new_t


def row(nth):
r = [1]
for i in range(1, nth + 1):
r.append(int(r[-1] * (nth - i + 1) / i))
return " ".join([str(i) for i in r])
def rows(row_count):
if row_count < 0:
return None
elif row_count == 0:
return []
r = []
for i in range(row_count):
rn = [1]
for j in range(i):
rn.append(sum(r[-1][j:j+2]))
r.append(rn)
return r
10 changes: 1 addition & 9 deletions exercises/pascals-triangle/pascals_triangle.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,2 @@
def triangle(row_count):
pass


def is_triangle(triangle_rows_list):
pass


def row(row_count):
def rows(row_count):
pass
72 changes: 43 additions & 29 deletions exercises/pascals-triangle/pascals_triangle_test.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,51 @@
import unittest

from pascals_triangle import triangle, row, is_triangle
from pascals_triangle import rows


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

TRIANGLE = [
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1],
[1, 8, 28, 56, 70, 56, 28, 8, 1],
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]


class PascalsTriangleTest(unittest.TestCase):
def test_triangle1(self):
ans = ['1', '1 1', '1 2 1', '1 3 3 1', '1 4 6 4 1']
self.assertEqual(triangle(4), ans)

def test_triangle2(self):
ans = ['1', '1 1', '1 2 1', '1 3 3 1', '1 4 6 4 1', '1 5 10 10 5 1',
'1 6 15 20 15 6 1']
self.assertEqual(triangle(6), ans)

def test_is_triangle_true(self):
inp = ['1', '1 1', '1 2 1', '1 3 3 1', '1 4 6 4 1', '1 5 10 10 5 1']
self.assertIs(is_triangle(inp), True)

def test_is_triangle_false(self):
inp = ['1', '1 1', '1 2 1', '1 4 4 1']
self.assertIs(is_triangle(inp), False)

def test_row1(self):
ans = '1'
self.assertEqual(row(0), ans)

def test_row2(self):
ans = '1 2 1'
self.assertEqual(row(2), ans)

def test_row3(self):
ans = '1 7 21 35 35 21 7 1'
self.assertEqual(row(7), ans)
def test_zero_rows(self):
self.assertEqual(rows(0), [])

def test_single_row(self):
self.assertEqual(rows(1), TRIANGLE[:1])

def test_two_rows(self):
self.assertEqual(rows(2), TRIANGLE[:2])

def test_three_rows(self):
self.assertEqual(rows(3), TRIANGLE[:3])

def test_four_rows(self):
self.assertEqual(rows(4), TRIANGLE[:4])

def test_five_rows(self):
self.assertEqual(rows(5), TRIANGLE[:5])

def test_six_rows(self):
self.assertEqual(rows(6), TRIANGLE[:6])

def test_ten_rows(self):
self.assertEqual(rows(10), TRIANGLE[:10])

def test_negative_rows(self):
self.assertEqual(rows(-1), None)


if __name__ == '__main__':
Expand Down

0 comments on commit 54c9694

Please sign in to comment.