96 lines
3.5 KiB
Python
96 lines
3.5 KiB
Python
import pytest
|
|
from aarecommon.math.raster_grid import grid_to_image_id, image_id_to_grid
|
|
|
|
|
|
def test_grid_to_image_id_single_cell():
|
|
assert grid_to_image_id(grid_x=1, grid_y=1, number_of_cols=1) == 0
|
|
|
|
|
|
def test_grid_to_image_id_first_row_left_to_right():
|
|
assert grid_to_image_id(grid_x=1, grid_y=1, number_of_cols=5) == 0
|
|
assert grid_to_image_id(grid_x=2, grid_y=1, number_of_cols=5) == 1
|
|
assert grid_to_image_id(grid_x=3, grid_y=1, number_of_cols=5) == 2
|
|
assert grid_to_image_id(grid_x=4, grid_y=1, number_of_cols=5) == 3
|
|
assert grid_to_image_id(grid_x=5, grid_y=1, number_of_cols=5) == 4
|
|
|
|
|
|
def test_grid_to_image_id_second_row_right_to_left():
|
|
assert grid_to_image_id(grid_x=5, grid_y=2, number_of_cols=5) == 5
|
|
assert grid_to_image_id(grid_x=4, grid_y=2, number_of_cols=5) == 6
|
|
assert grid_to_image_id(grid_x=3, grid_y=2, number_of_cols=5) == 7
|
|
assert grid_to_image_id(grid_x=2, grid_y=2, number_of_cols=5) == 8
|
|
assert grid_to_image_id(grid_x=1, grid_y=2, number_of_cols=5) == 9
|
|
|
|
|
|
def test_image_id_to_grid_first_row_left_to_right():
|
|
assert image_id_to_grid(0, 5) == (1, 1)
|
|
assert image_id_to_grid(1, 5) == (2, 1)
|
|
assert image_id_to_grid(2, 5) == (3, 1)
|
|
assert image_id_to_grid(3, 5) == (4, 1)
|
|
assert image_id_to_grid(4, 5) == (5, 1)
|
|
|
|
|
|
def test_image_id_to_grid_second_row_right_to_left():
|
|
assert image_id_to_grid(5, 5) == (5, 2)
|
|
assert image_id_to_grid(6, 5) == (4, 2)
|
|
assert image_id_to_grid(7, 5) == (3, 2)
|
|
assert image_id_to_grid(8, 5) == (2, 2)
|
|
assert image_id_to_grid(9, 5) == (1, 2)
|
|
|
|
|
|
def test_round_trip_conversion_for_multiple_grid_shapes():
|
|
for number_of_cols in (1, 2, 3, 5, 8):
|
|
for grid_y in range(1, 7):
|
|
for grid_x in range(1, number_of_cols + 1):
|
|
image_id = grid_to_image_id(
|
|
grid_x=grid_x, grid_y=grid_y, number_of_cols=number_of_cols
|
|
)
|
|
assert image_id_to_grid(image_id, number_of_cols) == (grid_x, grid_y)
|
|
|
|
|
|
def test_known_3x3_serpentine_mapping():
|
|
expected = {
|
|
(1, 1): 0,
|
|
(2, 1): 1,
|
|
(3, 1): 2,
|
|
(3, 2): 3,
|
|
(2, 2): 4,
|
|
(1, 2): 5,
|
|
(1, 3): 6,
|
|
(2, 3): 7,
|
|
(3, 3): 8,
|
|
}
|
|
for grid_pos, image_id in expected.items():
|
|
assert grid_to_image_id(grid_pos[0], grid_pos[1], 3) == image_id
|
|
assert image_id_to_grid(image_id, 3) == grid_pos
|
|
|
|
|
|
def test_grid_to_image_id_rejects_zero_columns():
|
|
with pytest.raises(ValueError, match="number_of_cols must be >= 1"):
|
|
grid_to_image_id(grid_x=1, grid_y=1, number_of_cols=0)
|
|
|
|
|
|
def test_grid_to_image_id_rejects_zero_grid_x():
|
|
with pytest.raises(ValueError, match="grid_x must be >= 1"):
|
|
grid_to_image_id(grid_x=0, grid_y=1, number_of_cols=5)
|
|
|
|
|
|
def test_grid_to_image_id_rejects_zero_grid_y():
|
|
with pytest.raises(ValueError, match="grid_y must be >= 1"):
|
|
grid_to_image_id(grid_x=1, grid_y=0, number_of_cols=5)
|
|
|
|
|
|
def test_grid_to_image_id_rejects_grid_x_larger_than_number_of_cols():
|
|
with pytest.raises(ValueError, match="grid_x cannot be greater than number_of_cols"):
|
|
grid_to_image_id(grid_x=6, grid_y=1, number_of_cols=5)
|
|
|
|
|
|
def test_image_id_to_grid_rejects_zero_columns():
|
|
with pytest.raises(ValueError, match="number_of_cols must be >= 1"):
|
|
image_id_to_grid(image_id=0, number_of_cols=0)
|
|
|
|
|
|
def test_image_id_to_grid_rejects_negative_image_id():
|
|
with pytest.raises(ValueError, match="image_id must be >= 0"):
|
|
image_id_to_grid(image_id=-1, number_of_cols=5)
|