Как создать случайный экземпляр в Haskell QuickCheck, а затем запустить дополнительные тесты для этого самого экземпляра?
Позвольте мне продемонстрировать, приведя пример. В следующем фрагменте кода я генерирую Int
, а затем хочу запустить дополнительные тесты на этом самом Int
:
{-# OPTIONS -Wall #-}
import Test.Tasty
import Test.Tasty.QuickCheck as QC
import qualified Debug.Trace as Trace
main :: IO()
main = defaultMain tests
test1 :: Int -> Property
test1 i = withMaxSuccess 2 (test2 i)
test2 :: Int -> (Int, Int) -> Property
test2 i (a, b) =
Trace.trace ("(n,a,b) = " ++ show (i, a, b)) $
property True
tests :: TestTree
tests =
testGroup
"Test suite"
[
QC.testProperty "Test" (withMaxSuccess 3 test1)
]
В качестве вывода я хочу получить что-то вроде:
(n,a,b) = (0,0,0)
(n,a,b) = (0,1,2)
(n,a,b) = (-1,-1,-1)
(n,a,b) = (-1,-2,-3)
(n,a,b) = (2,0,-2)
(n,a,b) = (2,1,-1)
Но вместо этого я получаю:
(n,a,b) = (0,0,0)
(n,a,b) = (-1,-1,-1)
(n,a,b) = (2,0,-2)
Я нашел этот пост (Как QuickCheck может проверить все свойства для каждого образца) , но он мне не очень помог.