Skip to content

Commit 69aa567

Browse files
committed
Refactor and improve design for recursive generators
1 parent 63f7b18 commit 69aa567

3 files changed

Lines changed: 348 additions & 356 deletions

File tree

src/ppx_deriving_qcheck/README.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -238,18 +238,19 @@ let gen_color =
238238
type tree = Leaf of int | Node of tree * tree
239239
[@@deriving qcheck]
240240
241-
let gen_tree =
242-
QCheck.Gen.sized @@
243-
(QCheck.Gen.fix
244-
(fun self -> function
245-
| 0 -> QCheck.Gen.map (fun gen0 -> Leaf gen0) QCheck.Gen.int
246-
| n ->
247-
QCheck.Gen.frequency
248-
[(1,
249-
(QCheck.Gen.map (fun gen0 -> Leaf gen0) QCheck.Gen.int));
250-
(1,
251-
(QCheck.Gen.map (fun (gen0, gen1) -> Node (gen0, gen1))
252-
(QCheck.Gen.pair (self (n / 2)) (self (n / 2)))))]))
241+
(* ==> *)
242+
243+
let rec gen_tree_sized n =
244+
match n with
245+
| 0 -> QCheck.Gen.map (fun gen0 -> Leaf gen0) QCheck.Gen.int
246+
| n ->
247+
QCheck.Gen.frequency
248+
[(1, (QCheck.Gen.map (fun gen0 -> Leaf gen0) QCheck.Gen.int));
249+
(1,
250+
(QCheck.Gen.map (fun (gen0, gen1) -> Node (gen0, gen1))
251+
(QCheck.Gen.pair (self (n / 2)) (self (n / 2)))))]))
252+
253+
let gen_tree = QCheck.Gen.sized @@ gen_tree_sized
253254
```
254255

255256
* Recursive polymorphic variants

0 commit comments

Comments
 (0)