Skip to content

Commit 3610a77

Browse files
Sync connect tests (#641)
* Sync connect tests * feedback
1 parent 666725f commit 3610a77

3 files changed

Lines changed: 104 additions & 53 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
local map = function(t, f)
2+
local mapped = {}
3+
for i, v in ipairs(t) do
4+
mapped[i] = f(v)
5+
end
6+
return mapped
7+
end
8+
9+
local function render_board(board)
10+
return table.concat(map(board, function(row)
11+
return "'" .. row .. "', --"
12+
end), '\n ')
13+
end
14+
15+
return {
16+
module_name = 'connect',
17+
18+
generate_test = function(case)
19+
local template = [[
20+
local board = {
21+
%s
22+
}
23+
assert.are.same('%s', connect.winner(board))]]
24+
25+
return template:format(render_board(case.input.board), case.expected)
26+
end
27+
}

exercises/practice/connect/.meta/tests.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ description = "nobody wins crossing adjacent angles"
3030
[cd61c143-92f6-4a8d-84d9-cb2b359e226b]
3131
description = "X wins crossing from left to right"
3232

33+
[495e33ed-30a9-4012-b46e-d7c4d5fe13c3]
34+
description = "X wins with left-hand dead end fork"
35+
36+
[ab167ab0-4a98-4d0f-a1c0-e1cddddc3d58]
37+
description = "X wins with right-hand dead end fork"
38+
3339
[73d1eda6-16ab-4460-9904-b5f5dd401d0b]
3440
description = "O wins crossing from top to bottom"
3541

exercises/practice/connect/connect_spec.lua

Lines changed: 71 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,128 @@
11
local connect = require('connect')
22

3-
-- LuaFormatter off
43
describe('connect', function()
54
it('an empty board has no winner', function()
65
local board = {
7-
'. . . . .',
8-
' . . . . .',
9-
' . . . . .',
10-
' . . . . .',
11-
' . . . . .'
6+
'. . . . .', --
7+
' . . . . .', --
8+
' . . . . .', --
9+
' . . . . .', --
10+
' . . . . .' --
1211
}
1312
assert.are.same('', connect.winner(board))
1413
end)
1514

16-
it('X can win on a 1x1 board', function()
15+
it('x can win on a 1x1 board', function()
1716
local board = {
18-
'X'
17+
'X' --
1918
}
2019
assert.are.same('X', connect.winner(board))
2120
end)
2221

23-
it('O can win on a 1x1 board', function()
22+
it('o can win on a 1x1 board', function()
2423
local board = {
25-
'O'
24+
'O' --
2625
}
2726
assert.are.same('O', connect.winner(board))
2827
end)
2928

3029
it('only edges does not make a winner', function()
3130
local board = {
32-
'O O O X',
33-
' X . . X',
34-
' X . . X',
35-
' X O O O'
31+
'O O O X', --
32+
' X . . X', --
33+
' X . . X', --
34+
' X O O O' --
3635
}
3736
assert.are.same('', connect.winner(board))
3837
end)
3938

4039
it('illegal diagonal does not make a winner', function()
4140
local board = {
42-
'X O . .',
43-
' O X X X',
44-
' O X O .',
45-
' . O X .',
46-
' X X O O'
41+
'X O . .', --
42+
' O X X X', --
43+
' O X O .', --
44+
' . O X .', --
45+
' X X O O' --
4746
}
4847
assert.are.same('', connect.winner(board))
4948
end)
5049

5150
it('nobody wins crossing adjacent angles', function()
5251
local board = {
53-
'X . . .',
54-
' . X O .',
55-
' O . X O',
56-
' . O . X',
57-
' . . O .'
52+
'X . . .', --
53+
' . X O .', --
54+
' O . X O', --
55+
' . O . X', --
56+
' . . O .' --
5857
}
5958
assert.are.same('', connect.winner(board))
6059
end)
6160

62-
it('X wins crossing from left to right', function()
61+
it('x wins crossing from left to right', function()
6362
local board = {
64-
'. O . .',
65-
' O X X X',
66-
' O X O .',
67-
' X X O X',
68-
' . O X .'
63+
'. O . .', --
64+
' O X X X', --
65+
' O X O .', --
66+
' X X O X', --
67+
' . O X .' --
6968
}
7069
assert.are.same('X', connect.winner(board))
7170
end)
7271

73-
it('O wins crossing from top to bottom', function()
72+
it('x wins with left-hand dead end fork', function()
7473
local board = {
75-
'. O . .',
76-
' O X X X',
77-
' O O O .',
78-
' X X O X',
79-
' . O X .'
74+
'. . X .', --
75+
' X X . .', --
76+
' . X X X', --
77+
' O O O O' --
78+
}
79+
assert.are.same('X', connect.winner(board))
80+
end)
81+
82+
it('x wins with right-hand dead end fork', function()
83+
local board = {
84+
'. . X X', --
85+
' X X . .', --
86+
' . X X .', --
87+
' O O O O' --
88+
}
89+
assert.are.same('X', connect.winner(board))
90+
end)
91+
92+
it('o wins crossing from top to bottom', function()
93+
local board = {
94+
'. O . .', --
95+
' O X X X', --
96+
' O O O .', --
97+
' X X O X', --
98+
' . O X .' --
8099
}
81100
assert.are.same('O', connect.winner(board))
82101
end)
83102

84-
it('X wins using a convoluted path', function()
103+
it('x wins using a convoluted path', function()
85104
local board = {
86-
'. X X . .',
87-
' X . X . X',
88-
' . X . X .',
89-
' . X X . .',
90-
' O O O O O'
105+
'. X X . .', --
106+
' X . X . X', --
107+
' . X . X .', --
108+
' . X X . .', --
109+
' O O O O O' --
91110
}
92111
assert.are.same('X', connect.winner(board))
93112
end)
94113

95-
it('X wins using a spiral path', function()
114+
it('x wins using a spiral path', function()
96115
local board = {
97-
'O X X X X X X X X',
98-
' O X O O O O O O O',
99-
' O X O X X X X X O',
100-
' O X O X O O O X O',
101-
' O X O X X X O X O',
102-
' O X O O O X O X O',
103-
' O X X X X X O X O',
104-
' O O O O O O O X O',
105-
' X X X X X X X X O'
116+
'O X X X X X X X X', --
117+
' O X O O O O O O O', --
118+
' O X O X X X X X O', --
119+
' O X O X O O O X O', --
120+
' O X O X X X O X O', --
121+
' O X O O O X O X O', --
122+
' O X X X X X O X O', --
123+
' O O O O O O O X O', --
124+
' X X X X X X X X O' --
106125
}
107126
assert.are.same('X', connect.winner(board))
108127
end)
109128
end)
110-
-- LuaFormatter on

0 commit comments

Comments
 (0)