packages feed

hw-prim 0.6.2.38 → 0.6.2.39

raw patch · 4 files changed

+167/−147 lines, 4 filesdep ~hedgehogPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependency ranges changed: hedgehog

API changes (from Hackage documentation)

+ HaskellWorks.Data.ByteString: padded :: Int -> ByteString -> ByteString

Files

hw-prim.cabal view
@@ -1,31 +1,30 @@ cabal-version:  2.2 -name:           hw-prim-version:        0.6.2.38-synopsis:       Primitive functions and data types-description:    Primitive functions and data types.-category:       Data-stability:      Experimental-homepage:       http://github.com/haskell-works/hw-prim#readme-bug-reports:    https://github.com/haskell-works/hw-prim/issues-author:         John Ky-maintainer:     newhoggy@gmail.com-copyright:      2016-2019 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-build-type:     Simple-extra-source-files:-    README.md+name:                   hw-prim+version:                0.6.2.39+synopsis:               Primitive functions and data types+description:            Primitive functions and data types.+category:               Data+stability:              Experimental+homepage:               http://github.com/haskell-works/hw-prim#readme+bug-reports:            https://github.com/haskell-works/hw-prim/issues+author:                 John Ky+maintainer:             newhoggy@gmail.com+copyright:              2016-2019 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+build-type:             Simple+extra-source-files:     README.md  source-repository head-  type: git-  location: https://github.com/haskell-works/hw-prim+  type:                 git+  location:             https://github.com/haskell-works/hw-prim  flag bounds-checking-enabled-  description: Enable bmi2 instruction set-  manual: False-  default: False+  description:          Enable bmi2 instruction set+  manual:               False+  default:              False  common base                 { build-depends: base                 >= 4          && < 5      } @@ -36,7 +35,7 @@ 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             >= 0.5        && < 1.1    }+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    }@@ -46,122 +45,117 @@ common unliftio-core        { build-depends: unliftio-core        >= 0.1.2.0    && < 0.2    }  common common-  default-language:   Haskell2010-  ghc-options:        -Wall -O2 -msse4.2+  default-language:     Haskell2010+  ghc-options:          -Wall -O2 -msse4.2   if flag(bounds-checking-enabled)-    cpp-options: -DBOUNDS_CHECKING_ENABLED+    cpp-options:        -DBOUNDS_CHECKING_ENABLED  library-  import:   base-          , common-          , bytestring-          , deepseq-          , ghc-prim-          , mmap-          , semigroups-          , transformers-          , unliftio-core-          , vector-  exposed-modules:-    HaskellWorks.Control.Monad.Lazy-    HaskellWorks.Data.AtIndex-    HaskellWorks.Data.Branchless-    HaskellWorks.Data.ByteString-    HaskellWorks.Data.ByteString.Builder-    HaskellWorks.Data.ByteString.Lazy-    HaskellWorks.Data.Char-    HaskellWorks.Data.Char.IsChar-    HaskellWorks.Data.Concat-    HaskellWorks.Data.Cons-    HaskellWorks.Data.Container-    HaskellWorks.Data.Decode-    HaskellWorks.Data.Drop-    HaskellWorks.Data.Empty-    HaskellWorks.Data.Filter-    HaskellWorks.Data.Foldable-    HaskellWorks.Data.FromByteString-    HaskellWorks.Data.FromForeignRegion-    HaskellWorks.Data.FromString-    HaskellWorks.Data.Generate-    HaskellWorks.Data.Head-    HaskellWorks.Data.Length-    HaskellWorks.Data.Naive-    HaskellWorks.Data.Null-    HaskellWorks.Data.Ops-    HaskellWorks.Data.Positioning-    HaskellWorks.Data.Product-    HaskellWorks.Data.Search-    HaskellWorks.Data.Sign-    HaskellWorks.Data.Snoc-    HaskellWorks.Data.Take-    HaskellWorks.Data.TreeCursor-    HaskellWorks.Data.Uncons-    HaskellWorks.Data.Unsign-    HaskellWorks.Data.Unsnoc-    HaskellWorks.Data.Vector.AsVector64-    HaskellWorks.Data.Vector.AsVector64ns-    HaskellWorks.Data.Vector.AsVector64s-    HaskellWorks.Data.Vector.AsVector8-    HaskellWorks.Data.Vector.AsVector8ns-    HaskellWorks.Data.Vector.AsVector8s-    HaskellWorks.Data.Vector.BoxedVectorLike-    HaskellWorks.Data.Vector.Storable-    HaskellWorks.Data.Vector.StorableVectorLike-    HaskellWorks.Data.Word-    HaskellWorks.Foreign-  other-modules:      Paths_hw_prim-  autogen-modules:    Paths_hw_prim-  hs-source-dirs:     src-  other-extensions:   AllowAmbiguousTypes+  import:               base+                      , common+                      , bytestring+                      , deepseq+                      , ghc-prim+                      , mmap+                      , semigroups+                      , transformers+                      , unliftio-core+                      , vector+  exposed-modules:      HaskellWorks.Control.Monad.Lazy+                        HaskellWorks.Data.AtIndex+                        HaskellWorks.Data.Branchless+                        HaskellWorks.Data.ByteString+                        HaskellWorks.Data.ByteString.Builder+                        HaskellWorks.Data.ByteString.Lazy+                        HaskellWorks.Data.Char+                        HaskellWorks.Data.Char.IsChar+                        HaskellWorks.Data.Concat+                        HaskellWorks.Data.Cons+                        HaskellWorks.Data.Container+                        HaskellWorks.Data.Decode+                        HaskellWorks.Data.Drop+                        HaskellWorks.Data.Empty+                        HaskellWorks.Data.Filter+                        HaskellWorks.Data.Foldable+                        HaskellWorks.Data.FromByteString+                        HaskellWorks.Data.FromForeignRegion+                        HaskellWorks.Data.FromString+                        HaskellWorks.Data.Generate+                        HaskellWorks.Data.Head+                        HaskellWorks.Data.Length+                        HaskellWorks.Data.Naive+                        HaskellWorks.Data.Null+                        HaskellWorks.Data.Ops+                        HaskellWorks.Data.Positioning+                        HaskellWorks.Data.Product+                        HaskellWorks.Data.Search+                        HaskellWorks.Data.Sign+                        HaskellWorks.Data.Snoc+                        HaskellWorks.Data.Take+                        HaskellWorks.Data.TreeCursor+                        HaskellWorks.Data.Uncons+                        HaskellWorks.Data.Unsign+                        HaskellWorks.Data.Unsnoc+                        HaskellWorks.Data.Vector.AsVector64+                        HaskellWorks.Data.Vector.AsVector64ns+                        HaskellWorks.Data.Vector.AsVector64s+                        HaskellWorks.Data.Vector.AsVector8+                        HaskellWorks.Data.Vector.AsVector8ns+                        HaskellWorks.Data.Vector.AsVector8s+                        HaskellWorks.Data.Vector.BoxedVectorLike+                        HaskellWorks.Data.Vector.Storable+                        HaskellWorks.Data.Vector.StorableVectorLike+                        HaskellWorks.Data.Word+                        HaskellWorks.Foreign+  other-modules:        Paths_hw_prim+  autogen-modules:      Paths_hw_prim+  hs-source-dirs:       src  test-suite hw-prim-test-  import:   base-          , common-          , QuickCheck-          , bytestring-          , directory-          , exceptions-          , hedgehog-          , hspec-          , hw-hspec-hedgehog-          , mmap-          , semigroups-          , transformers-          , vector-  type: exitcode-stdio-1.0-  main-is: Spec.hs-  other-modules:-    HaskellWorks.Data.ByteStringSpec-    HaskellWorks.Data.FoldableSpec-    HaskellWorks.Data.FromByteStringSpec-    HaskellWorks.Data.FromForeignRegionSpec-    HaskellWorks.Data.SearchSpec-    HaskellWorks.Data.Vector.AsVector64nsSpec-    HaskellWorks.Data.Vector.AsVector64sSpec-    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-  other-extensions:   AllowAmbiguousTypes-  ghc-options:        -threaded -rtsopts -with-rtsopts=-N-  build-tool-depends: hspec-discover:hspec-discover+  import:               base+                      , common+                      , QuickCheck+                      , bytestring+                      , directory+                      , exceptions+                      , hedgehog+                      , hspec+                      , hw-hspec-hedgehog+                      , mmap+                      , semigroups+                      , transformers+                      , vector+  type:                 exitcode-stdio-1.0+  main-is:              Spec.hs+  other-modules:        HaskellWorks.Data.ByteStringSpec+                        HaskellWorks.Data.FoldableSpec+                        HaskellWorks.Data.FromByteStringSpec+                        HaskellWorks.Data.FromForeignRegionSpec+                        HaskellWorks.Data.SearchSpec+                        HaskellWorks.Data.Vector.AsVector64nsSpec+                        HaskellWorks.Data.Vector.AsVector64sSpec+                        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-          , bytestring-          , criterion-          , 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-  other-extensions:   AllowAmbiguousTypes-  autogen-modules:    Paths_hw_prim+  import:               base+                      , common+                      , bytestring+                      , criterion+                      , 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
src/HaskellWorks/Data/ByteString.hs view
@@ -8,6 +8,7 @@   , ToByteString(..)   , ToByteStrings(..)   , mmap+  , padded   , rechunk   , rechunkPadded   , resegment@@ -219,3 +220,7 @@   (fptr :: ForeignPtr Word8, offset, size) <- IO.mmapFileForeignPtr filepath IO.ReadOnly Nothing   let !bs = BSI.fromForeignPtr (castForeignPtr fptr) offset size   return bs++padded :: Int -> BS.ByteString -> BS.ByteString+padded n v = v <> BS.replicate ((n - BS.length v) `max` 0) 0+{-# INLINE padded #-}
src/HaskellWorks/Data/Vector/Storable.hs view
@@ -108,20 +108,21 @@ construct64UnzipN :: Int -> [(BS.ByteString, BS.ByteString)] -> (DVS.Vector Word64, DVS.Vector Word64) construct64UnzipN nBytes xs = (DVS.unsafeCast ibv, DVS.unsafeCast bpv)   where [ibv, bpv] = DVS.createT $ do-          let nW64s     = (nBytes + 7) `div` 8-          ibmv <- DVSM.new nW64s-          bpmv <- DVSM.new nW64s+          let nW8s     = (nBytes + 7) `div` 8 * 8+          ibmv <- DVSM.new nW8s+          bpmv <- DVSM.new nW8s           (ibmvRemaining, bpmvRemaining) <- go ibmv bpmv xs-          return-            [ DVSM.take (((DVSM.length ibmv - ibmvRemaining) `div` 8) * 8) ibmv-            , DVSM.take (((DVSM.length bpmv - bpmvRemaining) `div` 8) * 8) bpmv-            ]+          let ibl = ((DVSM.length ibmv - ibmvRemaining + 7) `div` 8) * 8+          let bpl = ((DVSM.length bpmv - bpmvRemaining + 7) `div` 8) * 8+          return [ DVSM.take ibl ibmv, DVSM.take bpl bpmv]         go :: DVSM.MVector s Word8 -> DVSM.MVector s Word8 -> [(BS.ByteString, BS.ByteString)] -> ST s (Int, Int)         go ibmv bpmv ((ib, bp):ys) = do           DVS.copy (DVSM.take (BS.length ib) ibmv) (asVector8 ib)           DVS.copy (DVSM.take (BS.length bp) bpmv) (asVector8 bp)           go (DVSM.drop (BS.length ib) ibmv) (DVSM.drop (BS.length bp) bpmv) ys         go ibmv bpmv [] = do-          DVSM.set (DVSM.take 8 ibmv) 0-          DVSM.set (DVSM.take 8 bpmv) 0-          return (DVSM.length (DVSM.drop 8 ibmv), DVSM.length (DVSM.drop 8 bpmv))+          let ibl = DVSM.length ibmv `mod` 8+          let bpl = DVSM.length bpmv `mod` 8+          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))
test/HaskellWorks/Data/Vector/StorableSpec.hs view
@@ -6,15 +6,18 @@   ( spec   ) where -import Control.Monad.ST            (ST)-import Data.Vector.Storable        (Storable)+import Control.Monad.ST                  (ST)+import Data.Vector.Storable              (Storable)+import HaskellWorks.Data.Vector.Storable (construct64UnzipN) import HaskellWorks.Hspec.Hedgehog import Hedgehog import Test.Hspec +import qualified Data.ByteString                   as BS import qualified Data.List                         as L import qualified Data.Vector.Storable              as DVS import qualified Data.Vector.Storable.Mutable      as DVSM+import qualified HaskellWorks.Data.ByteString      as BS import qualified HaskellWorks.Data.Vector.Storable as DVS import qualified Hedgehog.Gen                      as G import qualified Hedgehog.Range                    as R@@ -36,6 +39,23 @@     let (bs, cs) = DVS.construct2N (length as) stepb (length as * 2) stepc as     DVS.fromList as           === bs     DVS.fromList (dupList as) === cs+  describe "construct64UnzipN" $ do+    it "property" $ requireProperty $ do+      abss  <- forAll $ G.list (R.linear 1 8) $ (,)+        <$> (fmap BS.pack (G.list (R.linear 1 8) (G.word8 R.constantBounded)))+        <*> (fmap BS.pack (G.list (R.linear 1 8) (G.word8 R.constantBounded)))+      ass   <- forAll $ pure $ fmap fst abss+      bss   <- forAll $ pure $ fmap snd abss+      as    <- forAll $ pure $ mconcat ass+      bs    <- forAll $ pure $ mconcat bss+      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 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  dupList :: [a] -> [a] dupList (a:as) = (a:a:dupList as)