PBTのgenerator
ランダムに値を生成する関数群
自作の方針
resize
/mrsekut-book-pbt/082 (4.3 基本的なカスタムジェネレーター)
異なる値に対して相対的なサイズの値を生成したり
e.g. nameとbioをstringで生成するときにbioのほうが長くなって欲しい
transform
/mrsekut-book-pbt/086 (4.3.2 変換ジェネレーター)
generatorの生成した値を自分で定義した構造に変換する
code:ts
const soreted = () => {
return fc.array(fc.integer()).map((n) => n.sort((a, b) => a - b));
};
constraint
/mrsekut-book-pbt/088 (4.3.3 制限をかける)
e.g. nonempty, even, odd
code:ts
fc.integer().filter((n) => n % 2 === 1);
fc.integer() * 2 + 1
確率を変更する
/mrsekut-book-pbt/091 (4.3.4 確率を変更する)
oneofとか
https://fast-check.dev/docs/core-blocks/arbitraries/combiners/any/#oneof
code:ts
fc.oneof({ arbitrary: fc.char(), weight: 5 }, { arbitrary: fc.boolean(), weight: 2 });
frequency
https://hackage.haskell.org/package/QuickCheck-2.14.3/docs/Test-QuickCheck.html#v:frequency
確率を指定して何の値を生成するかを指定できる
recursive
/mrsekut-book-pbt/094 (4.4.1 再帰ジェネレーター)
https://fast-check.dev/docs/core-blocks/arbitraries/combiners/recursive-structure/
前回の実行の結果を持ち続ける
e.g. それまでに通った経路を横切らないような経路を生成する