toArray())->toHaveCount(256); expect($palette->colorAt(0))->toBe([0, 0, 0]); expect($palette->colorAt(1))->toBe([31, 23, 11]); }); test('extracts palette data from PLAYPAL bytes', function (): void { $palette0 = str_repeat("\x00\x00\x00", 256); $palette1 = str_repeat("\x10\x20\x30", 256); $palette = DoomPalette::fromPlaypal($palette0 . $palette1, 1); expect($palette->toArray())->toHaveCount(256); expect($palette->colorAt(0))->toBe([16, 32, 48]); expect($palette->colorAt(255))->toBe([16, 32, 48]); }); test('rejects invalid PLAYPAL palette selection', function (): void { expect(fn () => DoomPalette::fromPlaypal("\x00", 0))->toThrow(RuntimeException::class); expect(fn () => DoomPalette::fromPlaypal(str_repeat("\x00", 768), -1))->toThrow(InvalidArgumentException::class); });