Files
AareCommon/tests/test_raster_grid_common.py
2026-07-02 12:52:45 +02:00

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)