Skip to content

Commit 54c9694

Browse files
authored
pascals-triangle: update tests to canonical-date v1.2.0 (exercism#1164)
1 parent 1c03092 commit 54c9694

3 files changed

Lines changed: 56 additions & 52 deletions

File tree

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
def triangle(nth):
2-
return [row(i) for i in range(nth + 1)]
3-
4-
5-
def is_triangle(t):
6-
new_t = triangle(len(t) - 1)
7-
return t == new_t
8-
9-
10-
def row(nth):
11-
r = [1]
12-
for i in range(1, nth + 1):
13-
r.append(int(r[-1] * (nth - i + 1) / i))
14-
return " ".join([str(i) for i in r])
1+
def rows(row_count):
2+
if row_count < 0:
3+
return None
4+
elif row_count == 0:
5+
return []
6+
r = []
7+
for i in range(row_count):
8+
rn = [1]
9+
for j in range(i):
10+
rn.append(sum(r[-1][j:j+2]))
11+
r.append(rn)
12+
return r
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,2 @@
1-
def triangle(row_count):
2-
pass
3-
4-
5-
def is_triangle(triangle_rows_list):
6-
pass
7-
8-
9-
def row(row_count):
1+
def rows(row_count):
102
pass

exercises/pascals-triangle/pascals_triangle_test.py

Lines changed: 43 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,51 @@
11
import unittest
22

3-
from pascals_triangle import triangle, row, is_triangle
3+
from pascals_triangle import rows
4+
5+
6+
# Tests adapted from `problem-specifications//canonical-data.json` @ v1.2.0
7+
8+
TRIANGLE = [
9+
[1],
10+
[1, 1],
11+
[1, 2, 1],
12+
[1, 3, 3, 1],
13+
[1, 4, 6, 4, 1],
14+
[1, 5, 10, 10, 5, 1],
15+
[1, 6, 15, 20, 15, 6, 1],
16+
[1, 7, 21, 35, 35, 21, 7, 1],
17+
[1, 8, 28, 56, 70, 56, 28, 8, 1],
18+
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
19+
]
420

521

622
class PascalsTriangleTest(unittest.TestCase):
7-
def test_triangle1(self):
8-
ans = ['1', '1 1', '1 2 1', '1 3 3 1', '1 4 6 4 1']
9-
self.assertEqual(triangle(4), ans)
10-
11-
def test_triangle2(self):
12-
ans = ['1', '1 1', '1 2 1', '1 3 3 1', '1 4 6 4 1', '1 5 10 10 5 1',
13-
'1 6 15 20 15 6 1']
14-
self.assertEqual(triangle(6), ans)
15-
16-
def test_is_triangle_true(self):
17-
inp = ['1', '1 1', '1 2 1', '1 3 3 1', '1 4 6 4 1', '1 5 10 10 5 1']
18-
self.assertIs(is_triangle(inp), True)
19-
20-
def test_is_triangle_false(self):
21-
inp = ['1', '1 1', '1 2 1', '1 4 4 1']
22-
self.assertIs(is_triangle(inp), False)
23-
24-
def test_row1(self):
25-
ans = '1'
26-
self.assertEqual(row(0), ans)
27-
28-
def test_row2(self):
29-
ans = '1 2 1'
30-
self.assertEqual(row(2), ans)
31-
32-
def test_row3(self):
33-
ans = '1 7 21 35 35 21 7 1'
34-
self.assertEqual(row(7), ans)
23+
def test_zero_rows(self):
24+
self.assertEqual(rows(0), [])
25+
26+
def test_single_row(self):
27+
self.assertEqual(rows(1), TRIANGLE[:1])
28+
29+
def test_two_rows(self):
30+
self.assertEqual(rows(2), TRIANGLE[:2])
31+
32+
def test_three_rows(self):
33+
self.assertEqual(rows(3), TRIANGLE[:3])
34+
35+
def test_four_rows(self):
36+
self.assertEqual(rows(4), TRIANGLE[:4])
37+
38+
def test_five_rows(self):
39+
self.assertEqual(rows(5), TRIANGLE[:5])
40+
41+
def test_six_rows(self):
42+
self.assertEqual(rows(6), TRIANGLE[:6])
43+
44+
def test_ten_rows(self):
45+
self.assertEqual(rows(10), TRIANGLE[:10])
46+
47+
def test_negative_rows(self):
48+
self.assertEqual(rows(-1), None)
3549

3650

3751
if __name__ == '__main__':

0 commit comments

Comments
 (0)