packages feed

hw-packed-vector 0.0.0.1 → 0.0.0.2

raw patch · 7 files changed

+152/−130 lines, 7 filesdep +deepseqdep +hedgehogdep +hw-hedgehogdep −QuickCheckdep −hw-intdep −hw-string-parsedep ~bytestringdep ~hspecdep ~hw-bitsPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: deepseq, hedgehog, hw-hedgehog, hw-hspec-hedgehog

Dependencies removed: QuickCheck, hw-int, hw-string-parse, safe

Dependency ranges changed: bytestring, hspec, hw-bits, hw-prim, vector

API changes (from Hackage documentation)

+ HaskellWorks.Data.PackedVector.PackedVector64: instance Control.DeepSeq.NFData HaskellWorks.Data.PackedVector.PackedVector64.PackedVector64
+ HaskellWorks.Data.PackedVector.PackedVector64: instance GHC.Generics.Generic HaskellWorks.Data.PackedVector.PackedVector64.PackedVector64
- HaskellWorks.Data.PackedVector.PackedVector64: PackedVector64 :: !(Vector Word64) -> !Word -> !Int -> PackedVector64
+ HaskellWorks.Data.PackedVector.PackedVector64: PackedVector64 :: !Vector Word64 -> !Word -> !Int -> PackedVector64
- HaskellWorks.Data.PackedVector.PackedVector64: [swBuffer] :: PackedVector64 -> !(Vector Word64)
+ HaskellWorks.Data.PackedVector.PackedVector64: [swBuffer] :: PackedVector64 -> !Vector Word64

Files

README.md view
@@ -1,6 +1,6 @@ # hw-packed-vector-[![CircleCI](https://circleci.com/gh/haskell-works/hw-packed-vector/tree/0-branch.svg?style=svg)](https://circleci.com/gh/haskell-works/hw-packed-vector/tree/0-branch) +[![CircleCI](https://circleci.com/gh/haskell-works/hw-packed-vector.svg?style=svg)](https://circleci.com/gh/haskell-works/hw-packed-vector)+ A vector that stores words of equal size between 1 to 64 inclusive in memory contiguously with efficient lookup.-
hw-packed-vector.cabal view
@@ -1,53 +1,75 @@-name:                   hw-packed-vector-version:                0.0.0.1-synopsis:               Packed Vector-description:            Please see README.md-homepage:               http://github.com/haskell-works/hw-packed-vector#readme-license:                BSD3-license-file:           LICENSE-author:                 John Ky-maintainer:             newhoggy@gmail.com-copyright:              2016 John Ky-category:               Data, Vector-stability:              Experimental-build-type:             Simple-extra-source-files:     README.md-cabal-version:          >= 1.22--library-  hs-source-dirs:       src-  exposed-modules:      HaskellWorks.Data.PackedVector-                      , HaskellWorks.Data.PackedVector.Internal-                      , HaskellWorks.Data.PackedVector.PackedVector64-  build-depends:        base                          >= 4          && < 5-                      , bytestring-                      , hw-bits                       >= 0.4.0.0-                      , hw-int                        >= 0.0.0.1-                      , hw-prim                       >= 0.4.0.0-                      , hw-string-parse               >= 0.0.0.1-                      , safe-                      , vector--  default-language:     Haskell2010-  ghc-options:          -Wall -O2 -msse4.2+cabal-version:      2.2 -test-suite hw-packed-vector-test-  type:                 exitcode-stdio-1.0-  hs-source-dirs:       test-  main-is:              Spec.hs-  other-modules:        HaskellWorks.Data.PackedVector.PackedVector64Spec-                      , HaskellWorks.Data.PackedVector.InternalSpec-  build-depends:        base                          >= 4          && < 5-                      , bytestring-                      , hspec-                      , hw-bits                       >= 0.4.0.0-                      , hw-packed-vector-                      , hw-prim                       >= 0.4.0.0-                      , QuickCheck-                      , vector-  ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall-  default-language:     Haskell2010+name:               hw-packed-vector+version:            0.0.0.2+synopsis:           Packed Vector+description:        Packed Vector. Please see README.md+category:           Data, Vector+stability:          Experimental+homepage:           http://github.com/haskell-works/hw-packed-vector#readme+bug-reports:        https://github.com/haskell-works/hw-packed-vector/issues+author:             John Ky+maintainer:         newhoggy@gmail.com+copyright:          2016-2019 John Ky+license:            BSD-3-Clause+license-file:       LICENSE+build-type:         Simple+extra-source-files:+  README.md  source-repository head-  type:     git+  type: git   location: https://github.com/haskell-works/hw-packed-vector++common base                 { build-depends: base                 >= 4          && < 5      }++common bytestring           { build-depends: bytestring           >= 0.10.8.2   && < 0.11   }+common deepseq              { build-depends: deepseq              >= 1.4        && < 1.5    }+common hedgehog             { build-depends: hedgehog             >= 0.6        && < 1.1    }+common hspec                { build-depends: hspec                >= 2.7.1      && < 3      }+common hw-bits              { build-depends: hw-bits              >= 0.7.0.6    && < 0.8    }+common hw-hedgehog          { build-depends: hw-hedgehog          >= 0.1.0.3    && < 0.2    }+common hw-hspec-hedgehog    { build-depends: hw-hspec-hedgehog    >= 0.1.0.7    && < 0.2    }+common hw-prim              { build-depends: hw-prim              >= 0.6.2.25   && < 0.7    }+common vector               { build-depends: vector               >= 0.12.0.3   && < 0.13   }++common config+  default-language: Haskell2010+  ghc-options:      -Wall -O2 -msse4.2++library+  import:   base, config+          , bytestring+          , deepseq+          , hw-bits+          , hw-prim+          , vector+  exposed-modules:+    HaskellWorks.Data.PackedVector+    HaskellWorks.Data.PackedVector.Internal+    HaskellWorks.Data.PackedVector.PackedVector64+  other-modules:    Paths_hw_packed_vector+  autogen-modules:  Paths_hw_packed_vector+  hs-source-dirs:   src++test-suite hw-packed-vector-test+  import:   base, config+          , bytestring+          , hedgehog+          , hspec+          , hw-bits+          , hw-hedgehog+          , hw-hspec-hedgehog+          , hw-prim+          , vector+  type:             exitcode-stdio-1.0+  main-is:          Spec.hs+  other-modules:+      HaskellWorks.Data.PackedVector.InternalSpec+      HaskellWorks.Data.PackedVector.PackedVector64Spec+      HaskellWorks.Gen+      Paths_hw_packed_vector+  hs-source-dirs:   test+  ghc-options:      -threaded -rtsopts -with-rtsopts=-N+  build-depends:    hw-packed-vector+  build-tools:      hspec-discover
src/HaskellWorks/Data/PackedVector.hs view
@@ -1,8 +1,6 @@-{-# LANGUAGE MultiParamTypeClasses #-}- module HaskellWorks.Data.PackedVector     ( module X     ) where -import           HaskellWorks.Data.PackedVector.Internal       as X-import           HaskellWorks.Data.PackedVector.PackedVector64 as X+import HaskellWorks.Data.PackedVector.Internal       as X+import HaskellWorks.Data.PackedVector.PackedVector64 as X
src/HaskellWorks/Data/PackedVector/PackedVector64.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE TypeFamilies  #-}  module HaskellWorks.Data.PackedVector.PackedVector64   ( PackedVector64(..)@@ -7,22 +8,27 @@   , toList   ) where +import Control.DeepSeq+import Data.Int+import Data.Word+import GHC.Generics+import HaskellWorks.Data.AtIndex+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.Bits.LoBitsSized+import HaskellWorks.Data.PackedVector.Internal+import HaskellWorks.Data.Positioning+import HaskellWorks.Data.Unsign+import Prelude                                 hiding (length)+ import qualified Data.Vector.Storable as DVS-import           Data.Int-import           Data.Word-import           HaskellWorks.Data.AtIndex-import           HaskellWorks.Data.Bits.BitWise-import           HaskellWorks.Data.Bits.LoBitsSized-import           HaskellWorks.Data.PackedVector.Internal-import           HaskellWorks.Data.Positioning-import           HaskellWorks.Data.Unsign-import           Prelude hiding (length)  data PackedVector64 = PackedVector64-    { swBuffer      :: !(DVS.Vector Word64)-    , swBitSize     :: !Word-    , swBufferLen   :: !Int-    } deriving (Eq, Show)+  { swBuffer    :: !(DVS.Vector Word64)+  , swBitSize   :: !Word+  , swBufferLen :: !Int+  } deriving (Eq, Show, Generic)++instance NFData PackedVector64  empty :: PackedVector64 empty =
test/HaskellWorks/Data/PackedVector/InternalSpec.hs view
@@ -1,38 +1,25 @@-{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}-{-# LANGUAGE    ScopedTypeVariables           #-}- module HaskellWorks.Data.PackedVector.InternalSpec (spec) where -import           Data.Word-import           HaskellWorks.Data.Bits.BitWise-import           HaskellWorks.Data.PackedVector.Internal-import           HaskellWorks.Data.Positioning-import           Test.Hspec-import           Test.QuickCheck--{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}--subWordSize :: Count -> Gen Count-subWordSize maxWordSize = choose (1, maxWordSize)--word8OfSize :: Count -> Gen Word8-word8OfSize sz = choose (0, 1 .<. fromIntegral sz - 1)+import HaskellWorks.Data.PackedVector.Internal+import HaskellWorks.Hspec.Hedgehog+import Hedgehog+import Test.Hspec -word64OfSize :: Count -> Gen Word64-word64OfSize sz = choose (0, 1 .<. fromIntegral sz - 1)+import qualified HaskellWorks.Gen as G+import qualified Hedgehog.Gen     as G+import qualified Hedgehog.Range   as R -listLen :: Gen Int-listLen = choose (1, 128)+{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.PackedVector.InternalSpec" $ do-  it "PackedVector Word8" $-    forAll (subWordSize 8) $ \wSize ->-      forAll (choose (1, 3)) $ \len ->-        forAll (vectorOf len (word8OfSize wSize)) $ \ws ->-          unpackBits (length ws) wSize (packBits wSize ws) `shouldBe` ws-  it "PackedVector Word64" $-    forAll (subWordSize 64) $ \wSize ->-      forAll listLen $ \len ->-        forAll (vectorOf len (word64OfSize wSize)) $ \ws ->-          unpackBits (length ws) wSize (packBits wSize ws) `shouldBe` ws+  it "PackedVector Word8" $ require $ property $ do+    wSize <- forAll $ G.subWordSize 8+    len   <- forAll $ G.int   (R.linear 1 3)+    ws    <- forAll $ G.list  (R.singleton len) (G.word8OfSize wSize)+    unpackBits (length ws) wSize (packBits wSize ws) === ws+  it "PackedVector Word64" $ require $ property $ do+    wSize <- forAll $ G.subWordSize 64+    len   <- forAll $ G.int   (R.linear 1 128)+    ws    <- forAll $ G.list  (R.singleton len) (G.word64OfSize wSize)+    unpackBits (length ws) wSize (packBits wSize ws) === ws
test/HaskellWorks/Data/PackedVector/PackedVector64Spec.hs view
@@ -1,37 +1,28 @@-{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}-{-# LANGUAGE    ScopedTypeVariables           #-}- module HaskellWorks.Data.PackedVector.PackedVector64Spec (spec) where -import           Data.Word-import           HaskellWorks.Data.AtIndex-import           HaskellWorks.Data.Bits.BitWise-import           HaskellWorks.Data.PackedVector.PackedVector64-import           HaskellWorks.Data.Positioning-import           Test.Hspec-import           Test.QuickCheck--{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}--subWordSize :: Count -> Gen Count-subWordSize maxWordSize = choose (1, maxWordSize)+import HaskellWorks.Data.AtIndex+import HaskellWorks.Data.PackedVector.PackedVector64+import Hedgehog+import Test.Hspec+-- import Test.QuickCheck+import HaskellWorks.Hspec.Hedgehog -word64OfSize :: Count -> Gen Word64-word64OfSize sz = choose (0, 1 .<. fromIntegral sz - 1)+import qualified HaskellWorks.Gen          as G+import qualified Hedgehog.Gen              as G+import qualified Hedgehog.Range            as R -listLen :: Gen Int-listLen = choose (1, 128)+{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}  spec :: Spec spec = describe "HaskellWorks.Data.PackedVector.PackedVector64Spec" $ do-  it "Round trip from list" $-    forAll (subWordSize 64) $ \wSize ->-      forAll listLen $ \len ->-        forAll (vectorOf len (word64OfSize wSize)) $ \ws ->-          toList (fromList wSize ws) `shouldBe` ws-  it "Round trip from list" $-    forAll (subWordSize 64) $ \wSize ->-      forAll (choose (1, 32 :: Int)) $ \len ->-        forAll (vectorOf len (word64OfSize wSize)) $ \ws ->-          forAll (choose (0, fromIntegral len - 1 :: Position)) $ \i ->-            (fromList wSize ws !!! i) `shouldBe` (ws !!! i)+  it "Round trip from list" $ require $ property $ do+    wSize <- forAll $ G.subWordSize 64+    len   <- forAll $ G.int   (R.linear 1 128)+    ws    <- forAll $ G.list  (R.singleton len) (G.word64OfSize wSize)+    toList (fromList wSize ws) === ws+  it "Round trip from list" $ require $ property $ do+    wSize <- forAll $ G.subWordSize 64+    len   <- forAll $ G.int   (R.linear 1 32)+    ws    <- forAll $ G.list  (R.singleton len) (G.word64OfSize wSize)+    i     <- forAll $ G.int64 (R.linear 0 (fromIntegral len - 1))+    (fromList wSize ws !!! i) === (ws !!! i)
+ test/HaskellWorks/Gen.hs view
@@ -0,0 +1,18 @@+module HaskellWorks.Gen where++import Data.Word+import HaskellWorks.Data.Bits.BitWise+import HaskellWorks.Data.Positioning+import Hedgehog++import qualified Hedgehog.Gen   as G+import qualified Hedgehog.Range as R++subWordSize :: MonadGen m => Count -> m Count+subWordSize maxWordSize = G.word64 (R.linear 1 maxWordSize)++word8OfSize :: MonadGen m => Count -> m Word8+word8OfSize sz = G.word8 (R.linear 0 (1 .<. fromIntegral sz - 1))++word64OfSize :: MonadGen m => Count -> m Word64+word64OfSize sz = G.word64 (R.linear 0 (1 .<. fromIntegral sz - 1))