aboutsummaryrefslogtreecommitdiffstats
path: root/bench/life.bad
diff options
context:
space:
mode:
Diffstat (limited to 'bench/life.bad')
-rw-r--r--bench/life.bad71
1 files changed, 71 insertions, 0 deletions
diff --git a/bench/life.bad b/bench/life.bad
new file mode 100644
index 0000000..4dcabff
--- /dev/null
+++ b/bench/life.bad
@@ -0,0 +1,71 @@
1; This board is 8 * 8 = 64 cells.
2; let n_cells = 64
3; let board_a: int[64]
4; let board_b: int[64]
5; let stride = 8
6
7; This board is 32 * 32 = 1024 cells.
8let n_cells = 1024
9let board_a: int[1024]
10let board_b: int[1024]
11let stride = 32
12
13; Storing pointers to the front/backbuffer to avoid copying the board over.
14let front = board_a
15let back = board_b
16
17; Initialize glider
18set front[stride * 2 + 5] = 1
19set front[stride * 3 + 6] = 1
20set front[stride * 4 + 4] = 1
21set front[stride * 4 + 5] = 1
22set front[stride * 4 + 6] = 1
23
24fun print_board(board: @int): nil {
25 for let i = 0 , i < n_cells , set i += 1 {
26 if i % stride == 0 {
27 println("")
28 }
29 if board[i] == 1 print("■ ")
30 else print("· ")
31 }
32 println("")
33}
34
35fun update_board(): nil {
36 for let i = 0 , i < n_cells , set i += 1 {
37 let left = if i > 0 front[i - 1] else 0
38 let right = if i < n_cells - 1 front[i + 1] else 0
39 let top = if i >= stride front[i - stride] else 0
40 let topleft = if i >= stride front[i - stride - 1] else 0
41 let topright = if i >= stride front[i - stride + 1] else 0
42 let bot = if i <= n_cells - stride front[i + stride] else 0
43 let botleft = if i <= n_cells - stride front[i + stride - 1] else 0
44 let botright = if i <= n_cells - stride front[i + stride + 1] else 0
45
46 let neig = left
47 + right
48 + top
49 + bot
50 + topleft
51 + topright
52 + botleft
53 + botright
54
55 cond {
56 front[i] == 0 && neig == 3 = set back[i] = 1
57 front[i] == 1 && (neig == 2 || neig == 3) = set back[i] = 1
58 else = set back[i] = 0
59 }
60 }
61
62 ; Swap boards.
63 let tmp = front
64 set front = back
65 set back = tmp
66}
67
68for let n_iter = 100 , n_iter > 0 , set n_iter -= 1 {
69 print_board(front)
70 update_board()
71}