49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
import pytest
|
|
from multiplayer_crosswords.crossword_generators import extract_slots, slot_pattern, Slot
|
|
from multiplayer_crosswords.crossword import Orientation
|
|
|
|
def test_extract_slots_simple():
|
|
grid = [
|
|
['', '', '', '#', ''],
|
|
['', '#', '', '', ''],
|
|
['', '', '', '', ''],
|
|
['#', '', '#', '', ''],
|
|
['', '', '', '', ''],
|
|
]
|
|
slots = extract_slots(grid, min_length=2)
|
|
# Should find horizontal and vertical slots of length >= 2
|
|
assert any(s.orientation == Orientation.HORIZONTAL and s.length == 3 for s in slots)
|
|
assert any(s.orientation == Orientation.VERTICAL and s.length == 3 for s in slots)
|
|
# No slot should start at a '#' cell
|
|
for slot in slots:
|
|
r, c = slot.row, slot.col
|
|
assert grid[r][c] != '#'
|
|
|
|
assert len(slots) == 10 # Total slots found
|
|
|
|
def test_slot_pattern():
|
|
grid = [
|
|
['a', '', '', '#', ''],
|
|
['', '#', '', '', ''],
|
|
['', '', '', '', ''],
|
|
['#', '', '#', '', ''],
|
|
['', '', '', '', ''],
|
|
]
|
|
slot = Slot(0, 0, Orientation.HORIZONTAL, 3)
|
|
pattern = slot_pattern(grid, slot)
|
|
assert pattern == 'a**'
|
|
|
|
slot2 = Slot(2, 1, Orientation.VERTICAL, 3)
|
|
pattern2 = slot_pattern(grid, slot2)
|
|
assert pattern2 == '***' # All empty cells in this slot
|
|
|
|
def test_extract_slots_min_length():
|
|
grid = [
|
|
['#', '', '', '#'],
|
|
['', '', '', ''],
|
|
['#', '', '', '#'],
|
|
]
|
|
slots = extract_slots(grid, min_length=3)
|
|
# Only slots of length 3 or more
|
|
assert all(slot.length >= 3 for slot in slots)
|
|
assert len(slots) == 3 |