Рецепты
Зависимые значения без отбрасываний — конструируйте, а не фильтруйте:
php
// A size and a payload of exactly that size.
Gen::flatMap(Gen::intBetween(1, 32), static fn(int $size): ArbitraryInterface
=> Gen::tuple(Gen::constant($size), Gen::bytes($size, $size)));
// An ordered interval: Gen::intRange(0, 1440) yields [lo, hi] with lo <= hi.
// Domain strings from an alphabet instead of filtering Unicode.
Gen::stringFrom('abcdefghijklmnopqrstuvwxyz0123456789-', 1, 63); // hostname labelОграниченные рекурсивные данные:
php
use Rasuvaeff\PropertyTesting\Arbitrary\ArrayArbitrary;
// JSON-ish scalars nested in small arrays, at most 3 levels deep.
Gen::recursive(
Gen::oneOf(null, true, false, 0, 1, 'a'),
static fn(ArbitraryInterface $inner): ArbitraryInterface => new ArrayArbitrary($inner, 0, 3),
maxDepth: 3,
);Держите ветвление ветвей небольшим (ограниченные размеры массивов): ширина умножается на каждом уровне вложенности.