| 27 | |
| 28 | export const splitChunks = <A>(chunks: Chunk.Chunk<Chunk.Chunk<A>>): fc.Arbitrary<Chunk.Chunk<Chunk.Chunk<A>>> => { |
| 29 | const split = (chunks: Chunk.Chunk<Chunk.Chunk<A>>): fc.Arbitrary<Chunk.Chunk<Chunk.Chunk<A>>> => |
| 30 | fc.integer({ min: 0, max: Math.max(chunks.length - 1, 0) }).chain((i) => { |
| 31 | const chunk = Chunk.unsafeGet(chunks, i) |
| 32 | return fc.integer({ min: 0, max: Math.max(chunk.length - 1, 0) }).map((j) => { |
| 33 | const [left, right] = pipe(chunk, Chunk.splitAt(j)) |
| 34 | return pipe( |
| 35 | chunks, |
| 36 | Chunk.take(i), |
| 37 | Chunk.appendAll(Chunk.of(left)), |
| 38 | Chunk.appendAll(Chunk.of(right)), |
| 39 | Chunk.appendAll(pipe(chunks, Chunk.drop(i + 1))) |
| 40 | ) |
| 41 | }) |
| 42 | }) |
| 43 | return fc.oneof(fc.constant(chunks), split(chunks).chain((chunks) => splitChunks(chunks))) |
| 44 | } |
| 45 | |