Files
vt1200/bad-apple/tests/test_movie.py
T

64 lines
1.7 KiB
Python

import numpy as np
from pipeline.movie import (
Rect,
TileRecord,
FrameRecord,
MovieHeader,
MovieFormatError,
encode_frame,
decode_frame,
write_movie,
read_movie,
)
def test_rect_full_tile_bias_roundtrip():
rec = FrameRecord(1, 0, [TileRecord(0, 0, [Rect(0, 0, 32, 32)])])
back, off = decode_frame(encode_frame(rec), 0)
assert back.tiles[0].rects[0] == Rect(0, 0, 32, 32)
assert off == len(encode_frame(rec))
def test_more_than_127_rects_roundtrip():
rects = [Rect(i % 32, i // 32, 1, 1) for i in range(200)]
rec = FrameRecord(1, 0, [TileRecord(3, 0, rects)])
back, _ = decode_frame(encode_frame(rec), 0)
assert len(back.tiles[0].rects) == 200
def test_rect_outside_tile_raises():
rec = FrameRecord(1, 0, [TileRecord(0, 0, [Rect(31, 0, 2, 1)])])
try:
encode_frame(rec)
except MovieFormatError:
return
assert False, "rect crossing a tile boundary was accepted"
def test_truncated_record_raises():
data = encode_frame(
FrameRecord(1, 0, [TileRecord(0, 0, [Rect(0, 0, 4, 4)])]))
try:
decode_frame(data[:-1], 0)
except MovieFormatError:
return
assert False, "truncated record was accepted"
def test_write_movie_refuses_over_cap(tmp_path):
frames = [FrameRecord(1, 0, []) for _ in range(10)]
header = MovieHeader(640, 512, 2, 32, 20, 16, 10, 60, 72)
import pipeline.movie as m
old = m.MAX_DATA_BYTES
m.MAX_DATA_BYTES = 8
try:
try:
write_movie(str(tmp_path / "x.bin"), frames, header)
except MovieFormatError:
return
assert False, "cap not enforced"
finally:
m.MAX_DATA_BYTES = old