1
exercism fetch python diamond

diamond_test.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import unittest

from diamond import make_diamond


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

class DiamondTests(unittest.TestCase):
    def test_degenerate_case_with_a_single_row(self):
        self.assertMultiLineEqual(make_diamond('A'), 'A\n')

    def test_degenerate_case_with_two_rows(self):
        result = [' A ',
                  'B B',
                  ' A ']
        self.assertMultiLineEqual(make_diamond('B'), '\n'.join(result) + '\n')

    def test_smallest_non_degenerate_case_with_odd_diamond_side_length(self):
        result = ['  A  ',
                  ' B B ',
                  'C   C',
                  ' B B ',
                  '  A  ']
        self.assertMultiLineEqual(make_diamond('C'), '\n'.join(result) + '\n')

    def test_smallest_non_degenerate_case_with_even_diamond_side_length(self):
        result = ['   A   ',
                  '  B B  ',
                  ' C   C ',
                  'D     D',
                  ' C   C ',
                  '  B B  ',
                  '   A   ']
        self.assertMultiLineEqual(make_diamond('D'), '\n'.join(result) + '\n')

    def test_largest_possible_diamond(self):
        result = ['                         A                         ',
                  '                        B B                        ',
                  '                       C   C                       ',
                  '                      D     D                      ',
                  '                     E       E                     ',
                  '                    F         F                    ',
                  '                   G           G                   ',
                  '                  H             H                  ',
                  '                 I               I                 ',
                  '                J                 J                ',
                  '               K                   K               ',
                  '              L                     L              ',
                  '             M                       M             ',
                  '            N                         N            ',
                  '           O                           O           ',
                  '          P                             P          ',
                  '         Q                               Q         ',
                  '        R                                 R        ',
                  '       S                                   S       ',
                  '      T                                     T      ',
                  '     U                                       U     ',
                  '    V                                         V    ',
                  '   W                                           W   ',
                  '  X                                             X  ',
                  ' Y                                               Y ',
                  'Z                                                 Z',
                  ' Y                                               Y ',
                  '  X                                             X  ',
                  '   W                                           W   ',
                  '    V                                         V    ',
                  '     U                                       U     ',
                  '      T                                     T      ',
                  '       S                                   S       ',
                  '        R                                 R        ',
                  '         Q                               Q         ',
                  '          P                             P          ',
                  '           O                           O           ',
                  '            N                         N            ',
                  '             M                       M             ',
                  '              L                     L              ',
                  '               K                   K               ',
                  '                J                 J                ',
                  '                 I               I                 ',
                  '                  H             H                  ',
                  '                   G           G                   ',
                  '                    F         F                    ',
                  '                     E       E                     ',
                  '                      D     D                      ',
                  '                       C   C                       ',
                  '                        B B                        ',
                  '                         A                         ']
        self.assertMultiLineEqual(make_diamond('Z'), '\n'.join(result) + '\n')


if __name__ == '__main__':
    unittest.main()