packages feed

hw-prim 0.6.2.39 → 0.6.2.40

raw patch · 13 files changed

+106/−49 lines, 13 filesdep +doctestdep +doctest-discoverdep ~QuickCheckdep ~ghc-primdep ~unliftio-corePVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependencies added: doctest, doctest-discover

Dependency ranges changed: QuickCheck, ghc-prim, unliftio-core

API changes (from Hackage documentation)

+ HaskellWorks.Data.Vector.Storable: unzipFromListN2 :: (Storable a, Storable b) => Int -> [(a, b)] -> (Vector a, Vector b)

Files

+ doctest/DoctestDriver.hs view
@@ -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
hw-prim.cabal view
@@ -1,7 +1,7 @@ cabal-version:  2.2  name:                   hw-prim-version:                0.6.2.39+version:                0.6.2.40 synopsis:               Primitive functions and data types description:            Primitive functions and data types. category:               Data@@ -10,10 +10,10 @@ bug-reports:            https://github.com/haskell-works/hw-prim/issues author:                 John Ky maintainer:             newhoggy@gmail.com-copyright:              2016-2019 John Ky+copyright:              2016-2020 John Ky license:                BSD-3-Clause license-file:           LICENSE-tested-with:            GHC == 8.8.1, GHC == 8.6.5, GHC == 8.4.4, GHC == 8.2.2+tested-with:            GHC == 8.8.2, GHC == 8.6.5, GHC == 8.4.4, GHC == 8.2.2 build-type:             Simple extra-source-files:     README.md @@ -26,33 +26,37 @@   manual:               False   default:              False -common base                 { build-depends: base                 >= 4          && < 5      }+common base                     { build-depends: base                     >= 4          && < 5      } -common QuickCheck           { build-depends: QuickCheck           >= 2.10       && < 2.14   }-common bytestring           { build-depends: bytestring           >= 0.9        && < 0.11   }-common criterion            { build-depends: criterion            >= 1.2        && < 1.6    }-common deepseq              { build-depends: deepseq              >= 1.4        && < 1.5    }-common directory            { build-depends: directory            >= 1.2        && < 1.4    }-common exceptions           { build-depends: exceptions           >= 0.8        && < 0.11   }-common ghc-prim             { build-depends: ghc-prim             >= 0.5        && < 0.6    }-common hedgehog             { build-depends: hedgehog             >= 1.0        && < 1.1    }-common hspec                { build-depends: hspec                >= 2.4        && < 2.8    }-common hw-hspec-hedgehog    { build-depends: hw-hspec-hedgehog    >= 0.1        && < 0.2    }-common mmap                 { build-depends: mmap                 >= 0.5        && < 0.6    }-common semigroups           { build-depends: semigroups           >= 0.8.4      && < 0.20   }-common transformers         { build-depends: transformers         >= 0.4        && < 0.6    }-common vector               { build-depends: vector               >= 0.12       && < 0.13   }-common unliftio-core        { build-depends: unliftio-core        >= 0.1.2.0    && < 0.2    }+common QuickCheck               { build-depends: QuickCheck               >= 2.10       && < 2.14   }+common bytestring               { build-depends: bytestring               >= 0.9        && < 0.11   }+common criterion                { build-depends: criterion                >= 1.2        && < 1.6    }+common deepseq                  { build-depends: deepseq                  >= 1.4        && < 1.5    }+common directory                { build-depends: directory                >= 1.2        && < 1.4    }+common doctest                  { build-depends: doctest                  >= 0.16.2     && < 0.17   }+common doctest-discover         { build-depends: doctest-discover         >= 0.2        && < 0.3    }+common exceptions               { build-depends: exceptions               >= 0.8        && < 0.11   }+common ghc-prim                 { build-depends: ghc-prim                 >= 0.5        && < 0.6    }+common hedgehog                 { build-depends: hedgehog                 >= 1.0        && < 1.1    }+common hspec                    { build-depends: hspec                    >= 2.4        && < 2.8    }+common hw-hspec-hedgehog        { build-depends: hw-hspec-hedgehog        >= 0.1        && < 0.2    }+common mmap                     { build-depends: mmap                     >= 0.5        && < 0.6    }+common semigroups               { build-depends: semigroups               >= 0.8.4      && < 0.20   }+common transformers             { build-depends: transformers             >= 0.4        && < 0.6    }+common vector                   { build-depends: vector                   >= 0.12       && < 0.13   }+common unliftio-core            { build-depends: unliftio-core            >= 0.1.2.0    && < 0.2    } -common common+common hw-prim+  build-depends:        hw-prim++common config   default-language:     Haskell2010   ghc-options:          -Wall -O2 -msse4.2   if flag(bounds-checking-enabled)     cpp-options:        -DBOUNDS_CHECKING_ENABLED  library-  import:               base-                      , common+  import:               base, config                       , bytestring                       , deepseq                       , ghc-prim@@ -112,8 +116,7 @@   hs-source-dirs:       src  test-suite hw-prim-test-  import:               base-                      , common+  import:               base, config                       , QuickCheck                       , bytestring                       , directory@@ -121,6 +124,7 @@                       , hedgehog                       , hspec                       , hw-hspec-hedgehog+                      , hw-prim                       , mmap                       , semigroups                       , transformers@@ -137,25 +141,32 @@                         HaskellWorks.Data.Vector.AsVector8nsSpec                         HaskellWorks.Data.Vector.AsVector8sSpec                         HaskellWorks.Data.Vector.StorableSpec-                        Paths_hw_prim-  autogen-modules:      Paths_hw_prim-  build-depends:        hw-prim   hs-source-dirs:       test   ghc-options:          -threaded -rtsopts -with-rtsopts=-N   build-tool-depends:   hspec-discover:hspec-discover  benchmark bench-  import:               base-                      , common+  import:               base, config                       , bytestring                       , criterion+                      , hw-prim                       , mmap                       , semigroups                       , transformers                       , vector   type:                 exitcode-stdio-1.0   main-is:              Main.hs-  other-modules:        Paths_hw_prim   hs-source-dirs:       bench   build-depends:        hw-prim-  autogen-modules:      Paths_hw_prim++test-suite doctest+  import:               base, config+                      , doctest+                      , doctest-discover+                      , hw-prim+  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
src/HaskellWorks/Data/Vector/Storable.hs view
@@ -10,6 +10,7 @@   , constructSI   , construct2N   , construct64UnzipN+  , unzipFromListN2   ) where  import Control.Monad.ST                   (ST, runST)@@ -18,7 +19,7 @@ import Data.Word import Foreign.ForeignPtr import HaskellWorks.Data.Vector.AsVector8-import Prelude                            hiding (foldMap)+import Prelude                            hiding (abs, foldMap)  import qualified Data.ByteString              as BS import qualified Data.Vector.Generic          as DVG@@ -126,3 +127,25 @@           DVSM.set (DVSM.take ibl ibmv) 0           DVSM.set (DVSM.take bpl bpmv) 0           return (DVSM.length (DVSM.drop ibl ibmv), DVSM.length (DVSM.drop bpl bpmv))++unzipFromListN2 :: (Storable a, Storable b) => Int -> [(a, b)] -> (DVS.Vector a, DVS.Vector b)+unzipFromListN2 n abs = runST $ do+  mas <- DVSM.unsafeNew n+  mbs <- DVSM.unsafeNew n+  len <- go 0 mas mbs abs+  as <- DVG.unsafeFreeze (DVSM.take len mas)+  bs <- DVG.unsafeFreeze (DVSM.take len mbs)+  return (as, bs)+  where go :: (Storable c, Storable d)+          => Int+          -> DVSM.MVector s c+          -> DVSM.MVector s d+          -> [(c, d)]+          -> ST s Int+        go i _   _   []           = return i+        go i mvc mvd ((c, d):cds) = if i < n+          then do+            DVSM.write mvc i c+            DVSM.write mvd i d+            go (i + 1) mvc mvd cds+          else return i
test/HaskellWorks/Data/ByteStringSpec.hs view
@@ -13,7 +13,7 @@ import qualified Hedgehog.Gen                  as G import qualified Hedgehog.Range                as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.ByteStringSpec" $ do@@ -50,4 +50,3 @@   it "rechunk creates correctly sized segments" $ requireProperty $ do     ws <- forAll $ G.list (R.linear 0 (LBSI.defaultChunkSize `div` 4)) (G.word64 R.constantBounded)     fold (BS.toByteStrings ws) === BS.toByteString ws-
test/HaskellWorks/Data/FoldableSpec.hs view
@@ -13,13 +13,13 @@ import qualified Hedgehog.Gen   as G import qualified Hedgehog.Range as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.FoldableSpec" $ do   it "foldFirst" $ requireProperty $ do-    as <- forAll $ G.list (R.linear 0 10) (G.int (R.constantBounded))+    as <- forAll $ G.list (R.linear 0 10) (G.int R.constantBounded)     foldFirst as === listToMaybe as   it "foldLast" $ requireProperty $ do-    as <- forAll $ G.list (R.linear 0 10) (G.int (R.constantBounded))+    as <- forAll $ G.list (R.linear 0 10) (G.int R.constantBounded)     foldLast as === listToMaybe (reverse as)
test/HaskellWorks/Data/FromByteStringSpec.hs view
@@ -11,7 +11,7 @@ import qualified Data.ByteString      as BS import qualified Data.Vector.Storable as DVS -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.FromByteStringSpec" $ do
test/HaskellWorks/Data/FromForeignRegionSpec.hs view
@@ -21,7 +21,7 @@ import qualified System.Directory                    as IO import qualified System.IO                           as IO -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.FromForeignRegionSpec" $ do
test/HaskellWorks/Data/SearchSpec.hs view
@@ -5,7 +5,7 @@ import HaskellWorks.Data.Search import Test.Hspec -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.SearchSpec" $ do
test/HaskellWorks/Data/Vector/AsVector64nsSpec.hs view
@@ -17,7 +17,7 @@ import qualified Hedgehog.Gen         as G import qualified Hedgehog.Range       as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.Vector.AsVector64nsSpec" $ do
test/HaskellWorks/Data/Vector/AsVector64sSpec.hs view
@@ -17,7 +17,7 @@ import qualified Hedgehog.Gen         as G import qualified Hedgehog.Range       as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.Vector.AsVector64sSpec" $ do
test/HaskellWorks/Data/Vector/AsVector8nsSpec.hs view
@@ -17,7 +17,7 @@ import qualified Hedgehog.Gen         as G import qualified Hedgehog.Range       as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.Vector.AsVector8nsSpec" $ do
test/HaskellWorks/Data/Vector/AsVector8sSpec.hs view
@@ -17,7 +17,7 @@ import qualified Hedgehog.Gen         as G import qualified Hedgehog.Range       as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.Vector.AsVector8sSpec" $ do
test/HaskellWorks/Data/Vector/StorableSpec.hs view
@@ -6,11 +6,11 @@   ( spec   ) where -import Control.Monad.ST                  (ST)-import Data.Vector.Storable              (Storable)-import HaskellWorks.Data.Vector.Storable (construct64UnzipN)+import Control.Monad.ST            (ST)+import Data.Vector.Storable        (Storable) import HaskellWorks.Hspec.Hedgehog import Hedgehog+import Prelude                     hiding (abs) import Test.Hspec  import qualified Data.ByteString                   as BS@@ -22,7 +22,7 @@ import qualified Hedgehog.Gen                      as G import qualified Hedgehog.Range                    as R -{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}+{-# ANN module ("HLint: ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.Vector.StorableSpec" $ do@@ -51,11 +51,23 @@       al    <- forAll $ pure $ BS.length (mconcat ass)       bl    <- forAll $ pure $ BS.length (mconcat bss)       len   <- forAll $ pure $ al + bl-      let res = construct64UnzipN len (zip ass bss)+      let res = DVS.construct64UnzipN len (zip ass bss)       let ra = BS.toByteString (fst res)       let rb = BS.toByteString (snd res)       ra === BS.padded ((BS.length as + 7) `div` 8 * 8) as       rb === BS.padded ((BS.length bs + 7) `div` 8 * 8) bs+  it "unzipFromListN2" $ requireProperty $ do+    abs       <- forAll $ G.list (R.linear 0 8) $ (,)+      <$> G.word8 R.constantBounded+      <*> G.word8 R.constantBounded+    len       <- forAll $ G.int (R.linear 0 8)+    as        <- forAll $ pure $ fmap fst abs+    bs        <- forAll $ pure $ fmap snd abs+    (va, vb)  <- forAll $ pure $ DVS.unzipFromListN2 len abs+    let eva = DVS.fromList (take len as)+    let evb = DVS.fromList (take len bs)+    va === eva+    vb === evb  dupList :: [a] -> [a] dupList (a:as) = (a:a:dupList as)