import numpy as np from pipeline.movie import Rect, TileRecord, FrameRecord from pipeline.tilepack import decompose_tile, diff_tiles, apply_record def test_decompose_solid_tiles(): black = np.ones((32, 32), dtype=bool) bg, rects = decompose_tile(black) assert bg == 1 and rects == [] white = np.zeros((32, 32), dtype=bool) bg, rects = decompose_tile(white) assert bg == 0 and rects == [] def test_decompose_block_is_one_rect(): tile = np.zeros((32, 32), dtype=bool) tile[4:6, 7:10] = True bg, rects = decompose_tile(tile) assert bg == 0 assert rects == [Rect(7, 4, 3, 2)] def test_diff_only_reports_changed_tiles(): a = np.zeros((64, 64), dtype=bool) b = a.copy() b[0:32, 0:32] = True recs = diff_tiles(a, b, tile=32) assert len(recs) == 1 and recs[0].tile_index == 0 def test_apply_record_reconstructs(): a = np.zeros((32, 32), dtype=bool) b = a.copy() b[4:9, 3:12] = True recs = diff_tiles(a, b, tile=32) canvas = a.copy() for rec in recs: apply_record(canvas, FrameRecord(1, 0, [rec]), tile=32) assert np.array_equal(canvas, b)