test.check 生成具有不同节点类型的树

test.check generate tree with different node types

我想生成一棵具有不同节点类型的树。对于每个节点类型,存在可以成为该节点的子节点的不同可能的节点类型组合。任何节点类型都可能没有子节点。

recursive-gen 本质上迫使我从一个叶生成器开始,从内到外构建树,叶生成器生成一个没有子节点的任何类型的节点。从子生成器创建生成器的函数本质上必须生成所需的父节点类型并在子生成器上使用 such-that 直到它生成所需的子节点类型。这通常会导致运行时错误,提示 such-that 在 10 次尝试后失败。

既然无法从父生成器参数化子生成器,那么有什么替代方案?

such-that 类似的策略可能是生成一棵具有不受限制的 children 的完整树,然后 post-process 通过在每个树中过滤掉不允许的 children 来生成它等级.

明显的缺点是大多数时候您最终可能会得到相当小的树,并且会做很多一次性工作。