diff --git a/slist.cabal b/slist.cabal index 4c264d7..01d8fad 100644 --- a/slist.cabal +++ b/slist.cabal @@ -68,6 +68,8 @@ test-suite slist-test main-is: Spec.hs build-depends: slist + , hedgehog + , hedgehog-classes ghc-options: -threaded -rtsopts @@ -82,4 +84,4 @@ test-suite slist-doctest build-depends: doctest , Glob - ghc-options: -threaded \ No newline at end of file + ghc-options: -threaded diff --git a/src/Slist.hs b/src/Slist.hs index 158ddbe..f438a43 100644 --- a/src/Slist.hs +++ b/src/Slist.hs @@ -266,7 +266,7 @@ instance Monoid (Slist a) where where -- foldr :: (a -> ([a], Size) -> ([a], Size)) -> ([a], Size) -> [Slist a] -> ([a], Size) f :: Slist a -> ([a], Size) -> ([a], Size) - f (Slist l s) (xL, !xS) = (xL ++ l, s + xS) + f (Slist l s) (xL, !xS) = (l ++ xL, s + xS) {-# INLINE mconcat #-} instance Functor Slist where diff --git a/test/Spec.hs b/test/Spec.hs index 9ce40a9..0827854 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -1,4 +1,27 @@ module Main (main) where +import Slist as SL +import Hedgehog +import Hedgehog.Main (defaultMain) +import Hedgehog.Classes +import qualified Hedgehog.Gen as Gen +import qualified Hedgehog.Range as Range + main :: IO () -main = putStrLn ("Test suite not yet implemented" :: String) +main = defaultMain $ + lawsCheck <$> + [ functorLaws genFiniteSlist + , applicativeLaws genFiniteSlist + , monadLaws genFiniteSlist + , foldableLaws genFiniteSlist + , traversableLaws genFiniteSlist + , alternativeLaws genFiniteSlist + , semigroupLaws (genFiniteSlist genInt) + , monoidLaws (genFiniteSlist genInt) + ] + +genInt :: Gen Int +genInt = Gen.int (Range.linear 0 100) + +genFiniteSlist :: Gen a -> Gen (Slist a) +genFiniteSlist gen = slist <$> Gen.list (Range.linear 0 100) gen