packages feed

smallcheck-series-0.7.0.0: tests/Main.hs

module Main where

import qualified Data.List as List
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.SmallCheck
import Test.SmallCheck.Series
import Test.SmallCheck.Series.Instances.Internal

main :: IO ( )
main = defaultMain $ testGroup "Verify `sets`."
  [ testGroup "An element is present in a set at most once"
    [ testProperty "Int" $ over sets $ \xs -> (xs :: [Int]) == List.nub xs
    , testProperty "Bool" $ over sets $ \xs -> (xs :: [Bool]) == List.nub xs
    ]
  , testProperty "All possible sets within depth limit are generated (for a large enough type)"
    $ \(NonNegative n) -> length (list n sets :: [[Int]]) == 2^n
  , testCase "All 4 sets of depth 2 are generated"
    $ assertEqual "" [[ ], [0], [1], [0, 1]] (list 2 sets :: [[Int]])
  ]