massiv 0.2.4.0 → 0.2.4.1
raw patch · 5 files changed
+94/−8 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- massiv.cabal +2/−1
- src/Data/Massiv/Array.hs +1/−0
- src/Data/Massiv/Array/Ops/Map.hs +8/−7
- tests/Data/Massiv/Array/Ops/MapSpec.hs +81/−0
- tests/Spec.hs +2/−0
massiv.cabal view
@@ -1,5 +1,5 @@ name: massiv-version: 0.2.4.0+version: 0.2.4.1 synopsis: Massiv (Массив) is an Array Library. description: Multi-dimensional Arrays with fusion, stencils and parallel computation. homepage: https://github.com/lehins/massiv@@ -94,6 +94,7 @@ , Data.Massiv.Array.Ops.FoldSpec , Data.Massiv.Array.Ops.SliceSpec , Data.Massiv.Array.Ops.TransformSpec+ , Data.Massiv.Array.Ops.MapSpec , Data.Massiv.Array.StencilSpec , Data.Massiv.CoreArbitrary , Data.Massiv.Core.IndexSpec
src/Data/Massiv/Array.hs view
@@ -150,6 +150,7 @@ , product , splitAt , sum+ , zip ) {- $folding
src/Data/Massiv/Array/Ops/Map.hs view
@@ -32,13 +32,14 @@ ) where -import Control.Monad (void, when)+import Control.Monad (void, when) import Data.Massiv.Array.Delayed.Internal import Data.Massiv.Core.Common import Data.Massiv.Core.Scheduler-import Prelude hiding (map, mapM, mapM_,- unzip, unzip3, zip, zip3,- zipWith, zipWith3)+import Data.Monoid ((<>))+import Prelude hiding (map, mapM, mapM_,+ unzip, unzip3, zip, zip3,+ zipWith, zipWith3) -- | Map a function over an array map :: Source r ix e' => (e' -> e) -> Array r ix e' -> Array D ix e@@ -87,7 +88,7 @@ izipWith :: (Source r1 ix e1, Source r2 ix e2) => (ix -> e1 -> e2 -> e) -> Array r1 ix e1 -> Array r2 ix e2 -> Array D ix e izipWith f arr1 arr2 =- DArray (getComp arr1) (liftIndex2 min (size arr1) (size arr1)) $ \ !ix ->+ DArray (getComp arr1 <> getComp arr2) (liftIndex2 min (size arr1) (size arr2)) $ \ !ix -> f ix (unsafeIndex arr1 ix) (unsafeIndex arr2 ix) {-# INLINE izipWith #-} @@ -109,8 +110,8 @@ -> Array D ix e izipWith3 f arr1 arr2 arr3 = DArray- (getComp arr1)- (liftIndex2 min (liftIndex2 min (size arr1) (size arr1)) (size arr3)) $ \ !ix ->+ (getComp arr1 <> getComp arr2 <> getComp arr3)+ (liftIndex2 min (liftIndex2 min (size arr1) (size arr2)) (size arr3)) $ \ !ix -> f ix (unsafeIndex arr1 ix) (unsafeIndex arr2 ix) (unsafeIndex arr3 ix) {-# INLINE izipWith3 #-}
+ tests/Data/Massiv/Array/Ops/MapSpec.hs view
@@ -0,0 +1,81 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE ScopedTypeVariables #-}+module Data.Massiv.Array.Ops.MapSpec (spec) where++import Data.Massiv.CoreArbitrary as A+import Prelude as P+import Test.Hspec+import Test.QuickCheck++prop_zipUnzip ::+ (Arbitrary ix, CoArbitrary ix, Index ix, Show (Array D ix Int))+ => proxy ix+ -> Array D ix Int+ -> Array D ix Int+ -> Property+prop_zipUnzip _ arr1 arr2 =+ (extract' zeroIndex sz arr1, extract' zeroIndex sz arr2) === A.unzip (A.zip arr1 arr2)+ where sz = liftIndex2 min (size arr1) (size arr2)++prop_zipFlip ::+ (Arbitrary ix, CoArbitrary ix, Index ix, Show (Array D ix Int), Show (Array D ix (Int, Int)))+ => proxy ix+ -> Array D ix Int+ -> Array D ix Int+ -> Property+prop_zipFlip _ arr1 arr2 =+ A.zip arr1 arr2 ===+ A.map (\(e2, e1) -> (e1, e2)) (A.zip arr2 arr1)++prop_zipUnzip3 ::+ (Arbitrary ix, CoArbitrary ix, Index ix, Show (Array D ix Int))+ => proxy ix+ -> Array D ix Int+ -> Array D ix Int+ -> Array D ix Int+ -> Property+prop_zipUnzip3 _ arr1 arr2 arr3 =+ (extract' zeroIndex sz arr1, extract' zeroIndex sz arr2, extract' zeroIndex sz arr3) ===+ A.unzip3 (A.zip3 arr1 arr2 arr3)+ where+ sz = liftIndex2 min (liftIndex2 min (size arr1) (size arr2)) (size arr3)++prop_zipFlip3 ::+ ( Arbitrary ix+ , CoArbitrary ix+ , Index ix+ , Show (Array D ix Int)+ , Show (Array D ix (Int, Int, Int))+ )+ => proxy ix+ -> Array D ix Int+ -> Array D ix Int+ -> Array D ix Int+ -> Property+prop_zipFlip3 _ arr1 arr2 arr3 =+ A.zip3 arr1 arr2 arr3 === A.map (\(e3, e2, e1) -> (e1, e2, e3)) (A.zip3 arr3 arr2 arr1)++mapSpec ::+ ( Arbitrary ix+ , CoArbitrary ix+ , Index ix+ , Show (Array D ix Int)+ , Show (Array D ix (Int, Int))+ , Show (Array D ix (Int, Int, Int))+ )+ => proxy ix+ -> Spec+mapSpec proxy = do+ describe "Zipping" $ do+ it "zipUnzip" $ property $ prop_zipUnzip proxy+ it "zipFlip" $ property $ prop_zipFlip proxy+ it "zipUnzip3" $ property $ prop_zipUnzip3 proxy+ it "zipFlip3" $ property $ prop_zipFlip3 proxy++spec :: Spec+spec = do+ describe "Ix1" $ mapSpec (Nothing :: Maybe Ix1)+ describe "Ix2" $ mapSpec (Nothing :: Maybe Ix2)+ describe "Ix3" $ mapSpec (Nothing :: Maybe Ix3)+ describe "Ix4" $ mapSpec (Nothing :: Maybe Ix4)
tests/Spec.hs view
@@ -7,6 +7,7 @@ --import Data.Massiv.Array.MutableSpec as Mutable import Data.Massiv.Array.Ops.ConstructSpec as Construct import Data.Massiv.Array.Ops.FoldSpec as Fold+import Data.Massiv.Array.Ops.MapSpec as Map import Data.Massiv.Array.Ops.SliceSpec as Slice import Data.Massiv.Array.Ops.TransformSpec as Transform import Data.Massiv.Array.StencilSpec as Stencil@@ -30,6 +31,7 @@ Fold.spec Slice.spec Transform.spec+ Map.spec describe "Delayed" $ Delayed.spec describe "Windowed" $ Windowed.spec describe "Manifest" $ Manifest.spec