diff --git a/doctest/DoctestDriver.hs b/doctest/DoctestDriver.hs new file mode 100644 index 0000000..a1f4f4b --- /dev/null +++ b/doctest/DoctestDriver.hs @@ -0,0 +1,12 @@ +{-# LANGUAGE CPP #-} + +#if MIN_VERSION_GLASGOW_HASKELL(8,4,4,0) +{-# OPTIONS_GHC -F -pgmF doctest-discover #-} +#else +module Main where + +import qualified System.IO as IO + +main :: IO () +main = IO.putStrLn "WARNING: doctest will not run on GHC versions earlier than 8.4.4" +#endif diff --git a/hw-fingertree.cabal b/hw-fingertree.cabal index 3e32f0f..01ddf97 100644 --- a/hw-fingertree.cabal +++ b/hw-fingertree.cabal @@ -31,19 +31,22 @@ source-repository head type: git location: https://github.com/haskell-works/hw-fingertree -common base { build-depends: base >= 4 && < 5 } +common base { build-depends: base >= 4 && < 5 } -common deepseq { build-depends: deepseq >= 1.4 && < 1.5 } -common hedgehog { build-depends: hedgehog >= 0.6 && < 1.1 } -common hspec { build-depends: hspec >= 2.4 && < 3.0 } -common hw-hspec-hedgehog { build-depends: hw-hspec-hedgehog >= 0.1 && < 0.2 } -common hw-prim { build-depends: hw-prim >= 0.6.2.25 && < 0.7 } +common deepseq { build-depends: deepseq >= 1.4 && < 1.5 } +common doctest { build-depends: doctest >= 0.16.2 && < 0.17 } +common doctest-discover { build-depends: doctest-discover >= 0.2 && < 0.3 } +common hedgehog { build-depends: hedgehog >= 0.6 && < 1.1 } +common hspec { build-depends: hspec >= 2.4 && < 3.0 } +common hw-hspec-hedgehog { build-depends: hw-hspec-hedgehog >= 0.1 && < 0.2 } +common hw-prim { build-depends: hw-prim >= 0.6.2.25 && < 0.7 } common config - default-language: Haskell2010 + default-language: Haskell2010 + ghc-options: -Wall common hw-fingertree - build-depends: hw-fingertree + build-depends: hw-fingertree library import: base, config @@ -61,8 +64,8 @@ test-suite hw-fingertree-tests , deepseq , hedgehog , hspec + , hw-fingertree , hw-hspec-hedgehog - build-depends: hw-fingertree type: exitcode-stdio-1.0 main-is: Spec.hs hs-source-dirs: tests @@ -71,3 +74,15 @@ test-suite hw-fingertree-tests other-modules: HaskellWorks.Data.FingerTree.Gen HaskellWorks.Data.FingerTreeSpec Paths_hw_fingertree + +test-suite doctest + import: base, config + , doctest + , doctest-discover + , hw-fingertree + default-language: Haskell2010 + type: exitcode-stdio-1.0 + ghc-options: -threaded + main-is: DoctestDriver.hs + HS-Source-Dirs: doctest + build-tool-depends: doctest-discover:doctest-discover diff --git a/src/HaskellWorks/Data/IntervalMap/FingerTree.hs b/src/HaskellWorks/Data/IntervalMap/FingerTree.hs index 380c471..b78c486 100644 --- a/src/HaskellWorks/Data/IntervalMap/FingerTree.hs +++ b/src/HaskellWorks/Data/IntervalMap/FingerTree.hs @@ -51,10 +51,10 @@ module HaskellWorks.Data.IntervalMap.FingerTree import Control.Applicative ((<$>)) import Control.DeepSeq import Data.Foldable (Foldable (foldMap)) -import Data.Monoid +import Data.Monoid (Monoid (..)) import Data.Traversable (Traversable (traverse)) import GHC.Generics -import HaskellWorks.Data.FingerTree (FingerTree, Measured (..), ViewL (..), (<|), (><), (|>)) +import HaskellWorks.Data.FingerTree (FingerTree, Measured (..), ViewL (..), (<|), (><)) import qualified Data.Semigroup as S import qualified HaskellWorks.Data.FingerTree as FT diff --git a/tests/HaskellWorks/Data/FingerTree/Gen.hs b/tests/HaskellWorks/Data/FingerTree/Gen.hs index 92e28ce..894874a 100644 --- a/tests/HaskellWorks/Data/FingerTree/Gen.hs +++ b/tests/HaskellWorks/Data/FingerTree/Gen.hs @@ -26,8 +26,8 @@ shrinkFingerTree (Deep _ pr m sf) = [deep pr' m sf | pr' <- shrinkDigit pr] ++ [deep pr m' sf | m' <- shrinkFingerTree m ] ++ [deep pr m sf' | sf' <- shrinkDigit sf] -shrinkFingerTree (Single x) = [] -shrinkFingerTree Empty = [] +shrinkFingerTree (Single _) = [] +shrinkFingerTree Empty = [] fingerTree :: (MonadGen m, Measured v a) => m a -> m (FingerTree v a) fingerTree gen = G.sized $ \size -> genSizedFingerTree size gen @@ -36,10 +36,10 @@ genSizedFingerTree :: (MonadGen m, Measured v a) => Size -> m a -> m (FingerTree genSizedFingerTree n gen = G.shrink shrinkFingerTree $ case n of 0 -> return Empty 1 -> Single <$> gen - n -> deep <$> (One <$> gen) <*> genSizedFingerTree (n `div` 2) (genSizedNode (n `div` 2) gen) <*> (One <$> gen) + o -> deep <$> (One <$> gen) <*> genSizedFingerTree (o `div` 2) (genSizedNode (o `div` 2) gen) <*> (One <$> gen) shrinkNode :: Measured v a => Node v a -> [Node v a] -shrinkNode (Node2 _ a b) = [] +shrinkNode (Node2 _ _ _ ) = [] shrinkNode (Node3 _ a b c) = [node2 a b, node2 a c, node2 b c] genSizedNode :: (MonadGen m, Measured v a) => Size -> m a -> m (Node v a) @@ -49,7 +49,7 @@ genSizedNode n gen = G.shrink shrinkNode $ G.choice ] shrinkDigit :: Digit a -> [Digit a] -shrinkDigit (One a) = [] -shrinkDigit (Two a b) = [One a, One b] -shrinkDigit (Three a b c) = [Two a b, Two a c, Two b c] -shrinkDigit (Four a b c d) = [Three a b c, Three a b d, Three a c d, Three b c d] +shrinkDigit (One _ ) = [] +shrinkDigit (Two a b ) = [One a, One b] +shrinkDigit (Three a b c ) = [Two a b, Two a c, Two b c] +shrinkDigit (Four a b c d) = [Three a b c, Three a b d, Three a c d, Three b c d] diff --git a/tests/HaskellWorks/Data/FingerTreeSpec.hs b/tests/HaskellWorks/Data/FingerTreeSpec.hs index 5de68e5..1887028 100644 --- a/tests/HaskellWorks/Data/FingerTreeSpec.hs +++ b/tests/HaskellWorks/Data/FingerTreeSpec.hs @@ -118,9 +118,9 @@ spec = do toList' (evalM (traverse' f xs)) ~== evalM (traverse f (toList xs)) it "traverseWithPos" $ require $ property $ do xs <- forAll (G.fingerTree (G.int R.constantBounded)) - let f xs y = do + let f ys y = do n <- step - return (xs, n, y) + return (ys, n, y) let xs_list = toList xs toList' (evalM (traverseWithPos f xs)) ~== evalM (traverse (uncurry f) (zip (inits xs_list) xs_list))