test.check создает дерево с различными типами узлов

Я хочу создать дерево с различными типами узлов. Для каждого типа узла существуют различные возможные комбинации типов узлов, которые могут стать дочерними для этого узла. Любой тип узла может не иметь дочерних элементов.

recursive-gen по сути, вынуждает меня строить дерево наизнанку, начиная с генератора листьев, который генерирует узел любого типа без дочерних элементов. Функция, которая создает генератор из дочернего генератора, по существу должна генерировать желаемый тип родительского узла и использовать such-that на дочернем генераторе, пока он не сгенерирует требуемые типы дочерних узлов. Это часто приводит к ошибкам во время выполнения, говоря, что such-that не удалось после 10 попыток.

Поскольку нет способа параметризации дочернего генератора из родительского генератора, какие есть альтернативные варианты?

1 ответ

Решение

Подобная тактика such-that Можно создать полное дерево с неограниченными дочерними элементами, а затем обработать его, отфильтровав запрещенных дочерних элементов на каждом уровне.

Очевидным недостатком является то, что большую часть времени вы можете получить довольно маленькие деревья, а также выполнять много работы.

Другие вопросы по тегам