Я написал алгоритм для поиска решения проблемы суммирования подмножества в Haskell. Подпись
subsetSum :: (Ord a, Num a) => [a] -> a -> Maybe [a]
QuickCheck, похоже, подходит для тестирования. Например, я вот один из свойств, которые я мог проверить:
prop_sumEqualsS l s = case subsetSum l s of
Just solution -> (sum solution) == s
Nothing -> True
Проблема заключается в том, что алгоритм достаточно интенсивно вычислит и работает 100 тестов с большими входными списками, для чего требуется возраст.
Я попытался с QuickCheck 1, и он быстро запустился, но наборы данных, используемые для тестирования, были очень маленькими. Перейдя на QuickCheck 2, это кажется противоположной проблемой. Существует руководство для QC, но, похоже, оно устарело (информации о дате нет), и я не знаю, сколько еще применяется к QC2. Учебник доступен в Haskell Wiki, но деталей нет немного, всего несколько слов о создании экземпляра Arbitrary
.
У меня есть два вопроса:
- Какие изменения в QuickCheck 2 делают его настолько медленнее, чем QuickCheck?
- Каков наилучший способ управления созданием наборов данных, чтобы сделать их полезными для данного теста?
Изменить: Чтобы быть более конкретным, я хотел бы проверить свое решение с размером списка от 0 до 100, содержащим целые числа от -10000 до 10000.