packages feed

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