test.check создает дерево с различными типами узлов
Я хочу создать дерево с различными типами узлов. Для каждого типа узла существуют различные возможные комбинации типов узлов, которые могут стать дочерними для этого узла. Любой тип узла может не иметь дочерних элементов.
recursive-gen
по сути, вынуждает меня строить дерево наизнанку, начиная с генератора листьев, который генерирует узел любого типа без дочерних элементов. Функция, которая создает генератор из дочернего генератора, по существу должна генерировать желаемый тип родительского узла и использовать such-that
на дочернем генераторе, пока он не сгенерирует требуемые типы дочерних узлов. Это часто приводит к ошибкам во время выполнения, говоря, что such-that
не удалось после 10 попыток.
Поскольку нет способа параметризации дочернего генератора из родительского генератора, какие есть альтернативные варианты?
1 ответ
Подобная тактика such-that
Можно создать полное дерево с неограниченными дочерними элементами, а затем обработать его, отфильтровав запрещенных дочерних элементов на каждом уровне.
Очевидным недостатком является то, что большую часть времени вы можете получить довольно маленькие деревья, а также выполнять много работы.