primitive-extras 0.7.0.2 → 0.7.1
raw patch · 3 files changed
+33/−2 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ PrimitiveExtras.PrimArray: primitiveVector :: Prim a => Vector a -> PrimArray a
Files
- library/PrimitiveExtras/PrimArray.hs +14/−0
- primitive-extras.cabal +1/−1
- test/Main.hs +18/−1
library/PrimitiveExtras/PrimArray.hs view
@@ -11,6 +11,20 @@ import qualified Data.ByteString.Short.Internal as ShortByteString +{-|+Construct from a primitive vector.+In case the vector is not a slice, it is an /O(1)/ op.+-}+primitiveVector :: Prim a => PrimitiveVector.Vector a -> PrimArray a+primitiveVector (PrimitiveVector.Vector offset length (ByteArray unliftedByteArray)) = let+ primArray = PrimArray unliftedByteArray+ in if offset == 0 && length == sizeofPrimArray primArray+ then primArray+ else runST $ do+ ma <- newPrimArray length+ copyPrimArray ma 0 primArray offset length+ unsafeFreezePrimArray ma+ oneHot :: Prim a => Int {-^ Size -} -> Int {-^ Index -} -> a -> PrimArray a oneHot size index value = runST $ do
primitive-extras.cabal view
@@ -1,5 +1,5 @@ name: primitive-extras-version: 0.7.0.2+version: 0.7.1 category: Primitive synopsis: Extras for the "primitive" library homepage: https://github.com/metrix-ai/primitive-extras
test/Main.hs view
@@ -1,6 +1,7 @@ module Main where -import Prelude+import Prelude hiding (choose)+import Data.Primitive import Test.QuickCheck.Instances import Test.Tasty import Test.Tasty.Runners@@ -16,6 +17,7 @@ import qualified PrimitiveExtras.SmallArray as SmallArray import qualified PrimitiveExtras.PrimArray as PrimArray import qualified Data.Serialize as Serialize+import qualified Data.Vector.Primitive as PrimitiveVector main =@@ -92,6 +94,21 @@ , testGroup "PrimArray" $ [+ testProperty "Construction from primitive vector" $ let+ gen = do+ offset <- choose (0, 2)+ length <- choose (0, 100)+ listSize <- let+ minSize = offset + length+ in choose (minSize, minSize + 100)+ list :: [Int32] <- replicateM listSize arbitrary+ return (list, offset, length)+ in forAll gen $ \ (inputList, offset, length) -> let+ !inputVec = PrimitiveVector.fromList inputList+ !sliceVec = PrimitiveVector.slice offset length inputVec+ !sliceList = PrimitiveVector.toList sliceVec+ in sliceList === primArrayToList (PrimArray.primitiveVector sliceVec)+ , testProperty "Serializes well with as in memory" $ forAll (Gen.primArray Gen.element) $ \ primArray -> Right primArray === Serialize.runGet (PrimArray.cerealGetAsInMemory Serialize.get)