Skip to content

Commit acaeb9b

Browse files
committed
Added doctests to game_of_life.py
1 parent 03a4251 commit acaeb9b

File tree

1 file changed

+114
-6
lines changed

1 file changed

+114
-6
lines changed

cellular_automata/game_of_life.py

+114-6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
comes a live cell, as if by reproduction.
2929
"""
3030

31+
import doctest
3132
import random
3233
import sys
3334

@@ -42,6 +43,28 @@
4243

4344

4445
def create_canvas(size: int) -> list[list[bool]]:
46+
"""
47+
For creating a nested list of boolean values,
48+
based on the size parameter provided
49+
50+
Args:
51+
size: integer
52+
53+
Returns:
54+
A nested list of boolean values
55+
56+
Examples:
57+
>>> create_canvas(1)
58+
[[False]]
59+
>>> create_canvas(2)
60+
[[False, False], [False, False]]
61+
>>> create_canvas(3)
62+
[[False, False, False], [False, False, False], [False, False, False]]
63+
>>> create_canvas(0)
64+
[]
65+
>>> create_canvas(-1)
66+
[]
67+
"""
4568
canvas = [[False for i in range(size)] for j in range(size)]
4669
return canvas
4770

@@ -56,13 +79,37 @@ def run(canvas: list[list[bool]]) -> list[list[bool]]:
5679
"""
5780
This function runs the rules of game through all points, and changes their
5881
status accordingly.(in the same canvas)
59-
@Args:
60-
--
61-
canvas : canvas of population to run the rules on.
6282
63-
@returns:
64-
--
65-
canvas of population after one step
83+
Args:
84+
canvas : canvas of population to run the rules on.
85+
86+
Returns:
87+
canvas of population after one step
88+
89+
Example #1:
90+
>>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
91+
>>> run(canvas)
92+
[[False, False, False], [False, False, False], [False, False, False]]
93+
94+
Example #2:
95+
>>> canvas=[[True, False, False], [True, False, False], [False, False, False]]
96+
>>> run(canvas)
97+
[[False, False, False], [False, False, False], [False, False, False]]
98+
99+
Example #3:
100+
>>> canvas=[[True, True, True], [True, False, False], [False, False, False]]
101+
>>> run(canvas)
102+
[[False, False, False], [False, False, False], [False, False, False]]
103+
104+
Example #4:
105+
>>> canvas=[[True, False, False], [False, False, True], [False, True, False]]
106+
>>> run(canvas)
107+
[[False, False, False], [False, True, False], [False, False, False]]
108+
109+
Example #5:
110+
>>> canvas=[[True, True, True], [True, True, True], [True, True, True]]
111+
>>> run(canvas)
112+
[[False, False, False], [False, False, False], [False, False, True]]
66113
"""
67114
current_canvas = np.array(canvas)
68115
next_gen_canvas = np.array(create_canvas(current_canvas.shape[0]))
@@ -76,6 +123,66 @@ def run(canvas: list[list[bool]]) -> list[list[bool]]:
76123

77124

78125
def __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool:
126+
"""
127+
Update canvas provided
128+
129+
Args:
130+
pt: boolean
131+
neighbours: canvas
132+
133+
Returns:
134+
Updated canvas
135+
136+
Example #1:
137+
Tests pt = True, and alive < 2; expected 'alive' count = 0
138+
>>> pt=True
139+
>>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
140+
>>> __judge_point(pt, canvas)
141+
False
142+
143+
Example #2:
144+
Tests pt = True, and alive < 2; expected 'alive' count = 1
145+
>>> pt=True
146+
>>> canvas=[[True, False, False], [True, False, False], [False, False, False]]
147+
>>> __judge_point(pt, canvas)
148+
False
149+
150+
Example #3:
151+
Tests pt = True, and alive 'in' 2
152+
>>> pt=True
153+
>>> canvas=[[True, True, True], [False, False, False], [False, False, False]]
154+
>>> __judge_point(pt, canvas)
155+
True
156+
157+
Example #4:
158+
Tests pt = True, and alive 'in' 3
159+
>>> pt=True
160+
>>> canvas=[[True, True, True], [True, False, False], [False, False, False]]
161+
>>> __judge_point(pt, canvas)
162+
True
163+
164+
Example #5:
165+
Tests pt = True, and alive > 3; expected 'alive' count = 4
166+
>>> pt=True
167+
>>> canvas=[[True, True, True], [True, False, False], [False, False, True]]
168+
>>> __judge_point(pt, canvas)
169+
False
170+
171+
Example #6:
172+
Tests pt = False, and alive == 3
173+
>>> pt=False
174+
>>> canvas=[[True, False, False], [False, False, True], [False, True, False]]
175+
>>> __judge_point(pt, canvas)
176+
True
177+
178+
Example #7:
179+
Tests pt = False, and alive != 3; expected 'alive' count = 0
180+
>>> pt=False
181+
>>> canvas=[[False, False, False], [False, False, False], [False, False, False]]
182+
>>> __judge_point(pt, canvas)
183+
False
184+
"""
185+
79186
dead = 0
80187
alive = 0
81188
# finding dead or alive neighbours count.
@@ -111,6 +218,7 @@ def __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool:
111218
if len(sys.argv) != 2:
112219
raise Exception(usage_doc)
113220

221+
doctest.testmod()
114222
canvas_size = int(sys.argv[1])
115223
# main working structure of this module.
116224
c = create_canvas(canvas_size)

0 commit comments

Comments
 (0)