#!/usr/bin/env python3 """Exercise camera defaults/errors and single-frame/movie agreement (CPU PNG builds).""" import os from pathlib import Path import struct import subprocess import sys import tempfile import zlib BUILD = Path(sys.argv[1] if len(sys.argv) > 1 else 'build/Release').resolve() TESTDIR = Path(sys.argv[2]).resolve() if len(sys.argv) > 2 else BUILD ENV = dict(os.environ, OMP_NUM_THREADS='4') def run(binary, *args, ok=True, env=ENV): result = subprocess.run([str(binary), *map(str, args)], env=env, capture_output=True, text=True) if (result.returncode == 0) != ok: raise AssertionError(f'{binary.name} {args}: {result.returncode}\n{result.stderr}') return result def image_payload(path, dimensions=(64, 48), allow_black=False): data = path.read_bytes() assert data[:8] == b'\x89PNG\r\n\x1a\n' offset, compressed = 8, bytearray() while offset < len(data): count, kind = struct.unpack_from('>I4s', data, offset) payload = data[offset + 8:offset + 8 + count] if kind == b'IHDR': assert struct.unpack_from('>II', payload) == dimensions if kind == b'IDAT': compressed.extend(payload) offset += count + 12 raw = zlib.decompress(compressed) assert raw, f'missing image data: {path}' assert allow_black or any(raw), f'empty image: {path}' return raw def map_vertices(path): data = path.read_bytes() assert data[:8] == b'GRLENS\x01\x00' assert struct.unpack_from('