packages feed

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 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)