Я пытаюсь запустить QuickCheck для некоторых вложенных списков, что-то вроде этого:
type Constraint = Text
data Value = Value [Constraint]
data Literal = Literal Value [Value]
type Formula = [Literal]
Итак, формула - это список литералов, каждый из которых содержит предикат и некоторые аргументы;Предикат / аргументы - это значения, которые являются дизъюнкцией ограничений в виде строки каждый.Это дает нам список списков списков списков, фу!
Если одно из моих свойств QuickCheck не срабатывает, я получаю непонятную страницу вывода.Прежде чем экспериментировать с усадкой, я привык обходить это, имея произвольные экземпляры, которые могли генерировать только небольшой набор (маленьких) значений.Реализация функции сжатия для каждого из моих типов, кажется, немного помогает, но не так сильно, как хотелось бы.Я все еще получаю целую страницу вывода.
Я думаю, что я хочу получить от shrink небольшой список литералов, где у каждого литерала есть небольшой список значений, который, в свою очередь, имеет несколько ограничений, каждое из которых имеет видКороче как можно.Но в моих текущих усилиях, по крайней мере, эти списки становятся достаточно большими, чтобы сделать вывод ужасным.Если я попытаюсь настроить свои усадочные реализации, я также обнаружу, что контроль качества начинает занимать очень много времени (в поисках усадки?), Что ослабляет мои усилия по эффективному сжатию.
Как вы повышаете свои шансы напонимаете сбои QuickCheck, когда у вас есть подобные данные?