Passed
Push — master ( 8edc1f...ae5669 )
by Ken M.
01:14
created

test_life_counter   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 376
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 288
dl 0
loc 376
rs 10
c 0
b 0
f 0
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A Tests.test_cell_changes() 0 4 1
A Tests.test_Basics() 0 3 2
A Tests.test_count_neighbours() 0 18 1
A Tests.test_translate_state() 0 7 1
A Tests.test_Extra() 0 3 2
1
import unittest
2
3
from life_counter import cell_changes, count_neighbours, life_counter, translate_state
4
5
6
class Tests(unittest.TestCase):
7
    TESTS = {
8
        "Basics": [
9
            {
10
                "input": [
11
                    (
12
                        (0, 1, 0, 0, 0, 0, 0),
13
                        (0, 0, 1, 0, 0, 0, 0),
14
                        (1, 1, 1, 0, 0, 0, 0),
15
                        (0, 0, 0, 0, 0, 1, 1),
16
                        (0, 0, 0, 0, 0, 1, 1),
17
                        (0, 0, 0, 0, 0, 0, 0),
18
                        (1, 1, 1, 0, 0, 0, 0),
19
                    ),
20
                    4,
21
                ],
22
                "answer": 15,
23
                "explanation": (0, 7, 0, 6),
24
            },
25
            {
26
                "input": [
27
                    (
28
                        (0, 1, 0, 0, 0, 0, 0),
29
                        (0, 0, 1, 0, 0, 0, 0),
30
                        (1, 1, 1, 0, 0, 0, 0),
31
                        (0, 0, 0, 0, 0, 1, 1),
32
                        (0, 0, 0, 0, 0, 1, 1),
33
                        (0, 0, 0, 0, 0, 0, 0),
34
                        (1, 1, 1, 0, 0, 0, 0),
35
                    ),
36
                    15,
37
                ],
38
                "answer": 14,
39
                "explanation": (0, 7, -3, 6),
40
            },
41
            {
42
                "input": [((0, 1, 0), (0, 0, 1), (1, 1, 1)), 50],
43
                "answer": 5,
44
                "explanation": (0, 15, 0, 14),
45
            },
46
            {
47
                "input": [
48
                    (
49
                        (1, 1, 0, 1, 1),
50
                        (1, 1, 0, 1, 1),
51
                        (0, 0, 0, 0, 0),
52
                        (1, 1, 0, 1, 1),
53
                        (1, 1, 0, 1, 1),
54
                    ),
55
                    100,
56
                ],
57
                "answer": 16,
58
                "explanation": (0, 4, 0, 4),
59
            },
60
        ],
61
        "Extra": [
62
            {
63
                "input": [
64
                    (
65
                        (0, 0, 0, 0, 0, 0, 1, 0),
66
                        (1, 1, 0, 0, 0, 0, 0, 0),
67
                        (0, 1, 0, 0, 0, 1, 1, 1),
68
                    ),
69
                    129,
70
                ],
71
                "answer": 2,
72
                "explanation": (-4, 18, -6, 11),
73
            },
74
            {
75
                "input": [
76
                    (
77
                        (0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0),
78
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
79
                        (1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1),
80
                        (1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1),
81
                        (1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1),
82
                        (0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0),
83
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
84
                        (0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0),
85
                        (1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1),
86
                        (1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1),
87
                        (1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1),
88
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
89
                        (0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0),
90
                    ),
91
                    100,
92
                ],
93
                "answer": 56,
94
                "explanation": (-1, 13, -1, 13),
95
            },
96
            {
97
                "input": [
98
                    (
99
                        (0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),
100
                        (0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),
101
                        (1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1),
102
                        (0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),
103
                        (0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0),
104
                        (0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0),
105
                        (0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0),
106
                        (0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0),
107
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
108
                        (0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0),
109
                        (0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0),
110
                    ),
111
                    42,
112
                ],
113
                "answer": 36,
114
                "explanation": (-12, 10, -1, 16),
115
            },
116
            {
117
                "input": [
118
                    (
119
                        (0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1),
120
                        (0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1),
121
                        (1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0),
122
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
123
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
124
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
125
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
126
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
127
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
128
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
129
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
130
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
131
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
132
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
133
                    ),
134
                    100,
135
                ],
136
                "answer": 33,
137
                "explanation": (-9, 15, -5, 22),
138
            },
139
            {
140
                "input": [((0, 1, 0), (0, 0, 1), (1, 1, 1)), 999],
141
                "answer": 5,
142
                "explanation": None,
143
            },
144
            {
145
                "input": [
146
                    (
147
                        (0, 1, 0, 0, 0, 0, 1, 0),
148
                        (1, 0, 0, 0, 0, 0, 0, 1),
149
                        (1, 1, 1, 0, 0, 1, 1, 1),
150
                    ),
151
                    999,
152
                ],
153
                "answer": 10,
154
                "explanation": None,
155
            },
156
            {
157
                "input": [
158
                    (
159
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
160
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
161
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
162
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
163
                        (0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1),
164
                        (0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0),
165
                        (1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1),
166
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
167
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
168
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
169
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
170
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
171
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
172
                        (0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1),
173
                    ),
174
                    100,
175
                ],
176
                "answer": 52,
177
                "explanation": (-18, 20, -5, 20),
178
            },
179
            {
180
                "input": [
181
                    (
182
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
183
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
184
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
185
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
186
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
187
                        (0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
188
                        (0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),
189
                        (0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
190
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
191
                        (0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
192
                        (0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),
193
                        (0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
194
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
195
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
196
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
197
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
198
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
199
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
200
                    ),
201
                    10,
202
                ],
203
                "answer": 22,
204
                "explanation": (0, 17, 0, 16),
205
            },
206
            {
207
                "input": [
208
                    (
209
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
210
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
211
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
212
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
213
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
214
                        (0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
215
                        (0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),
216
                        (0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
217
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
218
                        (0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0),
219
                        (0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0),
220
                        (0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0),
221
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
222
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
223
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
224
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
225
                        (0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
226
                        (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
227
                    ),
228
                    20,
229
                ],
230
                "answer": 0,
231
                "explanation": (0, 17, 0, 16),
232
            },
233
            {
234
                "input": [
235
                    (
236
                        (0, 0, 0, 0, 0, 0, 0, 0),
237
                        (1, 1, 1, 0, 0, 1, 1, 1),
238
                        (0, 0, 0, 0, 0, 1, 0, 0),
239
                        (0, 0, 0, 0, 0, 0, 1, 0),
240
                        (0, 0, 0, 0, 0, 0, 0, 0),
241
                        (1, 1, 1, 0, 0, 0, 0, 0),
242
                        (0, 0, 0, 0, 0, 1, 1, 1),
243
                        (0, 0, 0, 0, 0, 1, 0, 0),
244
                        (0, 0, 0, 0, 0, 0, 1, 0),
245
                        (1, 1, 1, 0, 0, 0, 0, 0),
246
                    ),
247
                    100,
248
                ],
249
                "answer": 3,
250
                "explanation": (-1, 10, -2, 7),
251
            },
252
            {
253
                "input": [
254
                    [
255
                        [0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
256
                        [0, 1, 1, 0, 0, 0, 0, 1, 1, 1],
257
                        [0, 0, 1, 0, 0, 0, 0, 0, 1, 1],
258
                        [1, 0, 0, 1, 0, 0, 1, 1, 1, 1],
259
                        [1, 0, 1, 0, 0, 1, 0, 1, 1, 0],
260
                        [0, 1, 1, 0, 0, 1, 0, 1, 1, 1],
261
                        [1, 0, 1, 0, 1, 1, 1, 0, 1, 1],
262
                        [0, 1, 1, 1, 0, 0, 1, 1, 1, 1],
263
                        [0, 0, 1, 0, 1, 1, 0, 0, 0, 1],
264
                        [1, 0, 1, 0, 0, 0, 1, 1, 1, 1],
265
                    ],
266
                    50,
267
                ],
268
                "answer": 74,
269
                "explanation": (-6, 13, -5, 24),
270
            },
271
            {
272
                "input": [
273
                    [
274
                        [1, 1, 1, 1, 0, 1, 1, 0, 1, 1],
275
                        [0, 0, 0, 0, 1, 0, 0, 0, 1, 0],
276
                        [0, 1, 0, 1, 1, 0, 1, 1, 1, 1],
277
                        [0, 0, 1, 1, 1, 0, 1, 0, 0, 1],
278
                        [0, 1, 1, 1, 0, 1, 1, 1, 0, 0],
279
                        [1, 1, 0, 1, 0, 1, 0, 1, 1, 0],
280
                        [1, 0, 1, 0, 0, 0, 0, 0, 1, 1],
281
                        [1, 1, 1, 0, 1, 0, 1, 1, 0, 1],
282
                        [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
283
                        [0, 0, 0, 1, 1, 0, 1, 0, 1, 1],
284
                    ],
285
                    50,
286
                ],
287
                "answer": 79,
288
                "explanation": (-5, 17, -14, 16),
289
            },
290
            {
291
                "input": [
292
                    [
293
                        [0, 0, 1, 1, 1, 1, 0, 1, 0, 0],
294
                        [1, 1, 0, 0, 1, 0, 1, 1, 1, 0],
295
                        [0, 1, 1, 1, 1, 1, 0, 0, 1, 0],
296
                        [0, 0, 0, 1, 0, 1, 0, 1, 0, 1],
297
                        [1, 1, 0, 1, 0, 0, 0, 0, 1, 0],
298
                        [1, 1, 0, 0, 0, 0, 1, 1, 1, 1],
299
                        [1, 0, 0, 0, 0, 1, 1, 1, 0, 0],
300
                        [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
301
                        [1, 0, 0, 1, 0, 0, 1, 1, 1, 1],
302
                        [1, 0, 0, 0, 0, 0, 1, 0, 1, 0],
303
                    ],
304
                    50,
305
                ],
306
                "answer": 81,
307
                "explanation": (-9, 15, -4, 24),
308
            },
309
            {
310
                "input": [
311
                    [
312
                        [1, 0, 0, 0, 1, 0, 0, 0, 1, 0],
313
                        [1, 1, 0, 0, 1, 0, 1, 0, 1, 0],
314
                        [1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
315
                        [0, 0, 1, 0, 1, 0, 1, 0, 1, 0],
316
                        [0, 1, 1, 1, 1, 1, 0, 1, 1, 0],
317
                        [0, 1, 0, 1, 0, 0, 0, 0, 0, 1],
318
                        [0, 1, 0, 0, 1, 0, 0, 0, 0, 0],
319
                        [1, 1, 0, 1, 0, 0, 0, 0, 1, 1],
320
                        [0, 1, 1, 1, 1, 1, 0, 0, 0, 1],
321
                        [1, 1, 0, 0, 0, 1, 1, 1, 1, 0],
322
                    ],
323
                    50,
324
                ],
325
                "answer": 18,
326
                "explanation": (-3, 16, -5, 13),
327
            },
328
        ],
329
    }
330
331
    def test_count_neighbours(self):
332
        assert (
333
            count_neighbours(
334
                {(0, 1): 1, (1, 2): 1, (2, 0): 1, (2, 1): 1, (2, 2): 1}, 0, 0
335
            )
336
            == 1
337
        )
338
        assert (
339
            count_neighbours(
340
                {(0, 1): 1, (1, 2): 1, (2, 0): 1, (2, 1): 1, (2, 2): 1}, 0, 1
341
            )
342
            == 1
343
        )
344
        assert (
345
            count_neighbours(
346
                {(0, 1): 1, (1, 2): 1, (2, 0): 1, (2, 1): 1, (2, 2): 1}, 1, 0
347
            )
348
            == 3
349
        )
350
351
    def test_translate_state(self):
352
        assert dict(translate_state([(0, 1, 0), (0, 0, 1), (1, 1, 1)])) == {
353
            (0, 1): 1,
354
            (1, 2): 1,
355
            (2, 0): 1,
356
            (2, 1): 1,
357
            (2, 2): 1,
358
        }
359
360
    def test_cell_changes(self):
361
        assert cell_changes(
362
            {(0, 1): 1, (1, 2): 1, (2, 0): 1, (2, 1): 1, (2, 2): 1}
363
        ) == {(0, 1): 0, (2, 0): 0, (1, 0): 1, (3, 1): 1}
364
365
    def test_Basics(self):
366
        for i in self.TESTS['Basics']:
367
            assert life_counter(*i['input']) == i['answer']
368
369
    def test_Extra(self):
370
        for i in self.TESTS['Extra']:
371
            assert life_counter(*i['input']) == i['answer']
372
373
374
if __name__ == "__main__":  # pragma: no cover
375
    unittest.main()
376