{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Test.Massiv.Core.Mutable
(
unsafeMutableSpec
, prop_UnsafeNewMsize
, prop_UnsafeThawFreeze
, prop_UnsafeInitializeNew
, prop_UnsafeArrayLinearCopy
, unsafeMutableUnboxedSpec
, prop_UnsafeInitialize
) where
import Data.Massiv.Array as A
import Data.Massiv.Array.Unsafe
import Test.Massiv.Core.Common
import Test.Massiv.Utils
prop_UnsafeNewMsize ::
forall r ix e.
(Arbitrary ix, Mutable r ix e)
=> Property
prop_UnsafeNewMsize :: Property
prop_UnsafeNewMsize = (Sz ix -> IO ()) -> Property
forall prop. Testable prop => prop -> Property
property ((Sz ix -> IO ()) -> Property) -> (Sz ix -> IO ()) -> Property
forall a b. (a -> b) -> a -> b
$ \ Sz ix
sz -> do
MArray RealWorld r ix e
marr :: MArray RealWorld r ix e <- Sz ix -> IO (MArray (PrimState IO) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
Sz ix
sz Sz ix -> Sz ix -> IO ()
forall a. (HasCallStack, Show a, Eq a) => a -> a -> IO ()
`shouldBe` MArray RealWorld r ix e -> Sz ix
forall r ix e s. Mutable r ix e => MArray s r ix e -> Sz ix
msize MArray RealWorld r ix e
marr
prop_UnsafeNewLinearWriteRead ::
forall r ix e.
(Eq e, Show e, Mutable r ix e, Arbitrary ix, Arbitrary e)
=> Property
prop_UnsafeNewLinearWriteRead :: Property
prop_UnsafeNewLinearWriteRead = (SzIx ix -> e -> e -> IO ()) -> Property
forall prop. Testable prop => prop -> Property
property ((SzIx ix -> e -> e -> IO ()) -> Property)
-> (SzIx ix -> e -> e -> IO ()) -> Property
forall a b. (a -> b) -> a -> b
$ \ (SzIx Sz ix
sz ix
ix) e
e1 e
e2 -> do
MArray RealWorld r ix e
marr :: MArray RealWorld r ix e <- Sz ix -> IO (MArray (PrimState IO) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
let i :: Int
i = Sz ix -> ix -> Int
forall ix. Index ix => Sz ix -> ix -> Int
toLinearIndex Sz ix
sz ix
ix
MArray (PrimState IO) r ix e -> Int -> e -> IO ()
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> Int -> e -> m ()
unsafeLinearWrite MArray RealWorld r ix e
MArray (PrimState IO) r ix e
marr Int
i e
e1
MArray (PrimState IO) r ix e -> Int -> IO e
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> Int -> m e
unsafeLinearRead MArray RealWorld r ix e
MArray (PrimState IO) r ix e
marr Int
i IO e -> e -> IO ()
forall a. (HasCallStack, Show a, Eq a) => IO a -> a -> IO ()
`shouldReturn` e
e1
MArray (PrimState IO) r ix e -> (e -> IO e) -> Int -> IO e
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> (e -> m e) -> Int -> m e
unsafeLinearModify MArray RealWorld r ix e
MArray (PrimState IO) r ix e
marr (\ !e
_ -> e -> IO e
forall (f :: * -> *) a. Applicative f => a -> f a
pure e
e2) Int
i IO e -> e -> IO ()
forall a. (HasCallStack, Show a, Eq a) => IO a -> a -> IO ()
`shouldReturn` e
e1
MArray (PrimState IO) r ix e -> Int -> IO e
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> Int -> m e
unsafeLinearRead MArray RealWorld r ix e
MArray (PrimState IO) r ix e
marr Int
i IO e -> e -> IO ()
forall a. (HasCallStack, Show a, Eq a) => IO a -> a -> IO ()
`shouldReturn` e
e2
prop_UnsafeThawFreeze ::
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Mutable r ix e)
=> Array r ix e -> Property
prop_UnsafeThawFreeze :: Array r ix e -> Property
prop_UnsafeThawFreeze Array r ix e
arr = Array r ix e
arr Array r ix e -> Array r ix e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== (forall s. ST s (Array r ix e)) -> Array r ix e
forall a. (forall s. ST s a) -> a
runST (Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) (MArray s r ix e -> ST s (Array r ix e))
-> ST s (MArray s r ix e) -> ST s (Array r ix e)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Array r ix e -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Array r ix e -> m (MArray (PrimState m) r ix e)
unsafeThaw Array r ix e
arr)
prop_UnsafeInitializeNew ::
forall r ix e.
( Eq (Array r ix e)
, Show (Array r ix e)
, Show e
, Arbitrary e
, Arbitrary ix
, Mutable r ix e
)
=> Property
prop_UnsafeInitializeNew :: Property
prop_UnsafeInitializeNew =
(Comp -> Sz ix -> e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((Comp -> Sz ix -> e -> Property) -> Property)
-> (Comp -> Sz ix -> e -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ \Comp
comp Sz ix
sz e
e ->
(Array DL ix e -> Array r ix e
forall r ix e r'.
(Mutable r ix e, Load r' ix e) =>
Array r' ix e -> Array r ix e
compute (Comp -> Sz ix -> e -> Array DL ix e
forall ix e. Index ix => Comp -> Sz ix -> e -> Array DL ix e
A.replicate Comp
comp Sz ix
sz e
e) :: Array r ix e) Array r ix e -> Array r ix e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
===
(forall s. ST s (Array r ix e)) -> Array r ix e
forall a. (forall s. ST s a) -> a
runST (Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
comp (MArray s r ix e -> ST s (Array r ix e))
-> ST s (MArray s r ix e) -> ST s (Array r ix e)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Maybe e -> Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Maybe e -> Sz ix -> m (MArray (PrimState m) r ix e)
initializeNew (e -> Maybe e
forall a. a -> Maybe a
Just e
e) Sz ix
sz)
prop_UnsafeInitialize ::
forall r ix e.
( Eq (Array r ix e)
, Show (Array r ix e)
, Arbitrary ix
, Mutable r ix e
)
=> Property
prop_UnsafeInitialize :: Property
prop_UnsafeInitialize =
(Comp -> Sz ix -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((Comp -> Sz ix -> Property) -> Property)
-> (Comp -> Sz ix -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ \Comp
comp Sz ix
sz ->
(forall s. ST s Property) -> Property
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s Property) -> Property)
-> (forall s. ST s Property) -> Property
forall a b. (a -> b) -> a -> b
$ do
MArray s r ix e
marr1 :: MArray s r ix e <- Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
MArray (PrimState (ST s)) r ix e -> ST s ()
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> m ()
initialize MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr1
MArray s r ix e
marr2 :: MArray s r ix e <- Maybe e -> Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Maybe e -> Sz ix -> m (MArray (PrimState m) r ix e)
initializeNew Maybe e
forall a. Maybe a
Nothing Sz ix
sz
Array r ix e -> Array r ix e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
(===) (Array r ix e -> Array r ix e -> Property)
-> ST s (Array r ix e) -> ST s (Array r ix e -> Property)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
comp MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr1 ST s (Array r ix e -> Property)
-> ST s (Array r ix e) -> ST s Property
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
comp MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr2
prop_UnsafeLinearCopy ::
forall r ix e. (Eq (Array r ix e), Show (Array r ix e), Mutable r ix e)
=> Array r ix e
-> Property
prop_UnsafeLinearCopy :: Array r ix e -> Property
prop_UnsafeLinearCopy Array r ix e
arr =
(Array r ix e
arr, Array r ix e
arr) (Array r ix e, Array r ix e)
-> (Array r ix e, Array r ix e) -> Property
forall a. (Eq a, Show a) => a -> a -> Property
===
(forall s. ST s (Array r ix e, Array r ix e))
-> (Array r ix e, Array r ix e)
forall a. (forall s. ST s a) -> a
runST
(do let sz :: Sz ix
sz = Array r ix e -> Sz ix
forall r ix e. Load r ix e => Array r ix e -> Sz ix
size Array r ix e
arr
MArray s r ix e
marrs <- Array r ix e -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Array r ix e -> m (MArray (PrimState m) r ix e)
thawS Array r ix e
arr
MArray s r ix e
marrd <- Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
MArray (PrimState (ST s)) r ix e
-> Int -> MArray (PrimState (ST s)) r ix e -> Int -> Sz1 -> ST s ()
forall r ix e ix' (m :: * -> *).
(Mutable r ix e, Mutable r ix' e, PrimMonad m) =>
MArray (PrimState m) r ix' e
-> Int -> MArray (PrimState m) r ix e -> Int -> Sz1 -> m ()
unsafeLinearCopy MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrs Int
0 MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrd Int
0 (Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz))
Array r ix e
arrd <- Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrd
Array r ix e
arrs <- Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrs
(Array r ix e, Array r ix e) -> ST s (Array r ix e, Array r ix e)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Array r ix e
arrs, Array r ix e
arrd))
prop_UnsafeLinearCopyPart ::
forall r ix e.
( Eq (Vector r e)
, Show (Vector r e)
, Eq (Array r ix e)
, Show (Array r ix e)
, Mutable r ix e
, Mutable r Ix1 e
)
=> ArrIx r ix e
-> NonNegative Ix1
-> Ix1
-> Property
prop_UnsafeLinearCopyPart :: ArrIx r ix e -> NonNegative Int -> Int -> Property
prop_UnsafeLinearCopyPart (ArrIx Array r ix e
arr ix
ix) (NonNegative Int
delta) Int
toOffset =
Array r ix e
arr Array r ix e -> Array r ix e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Array r ix e
arrs Property -> Property -> Property
forall prop1 prop2.
(Testable prop1, Testable prop2) =>
prop1 -> prop2 -> Property
.&&. Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
i Sz1
k (Array r ix e -> Vector r e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten Array r ix e
arr) Vector r e -> Vector r e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
j Sz1
k Vector r e
arrd
where
sz :: Sz ix
sz = Array r ix e -> Sz ix
forall r ix e. Load r ix e => Array r ix e -> Sz ix
size Array r ix e
arr
i :: Int
i = Sz ix -> ix -> Int
forall ix. Index ix => Sz ix -> ix -> Int
toLinearIndex Sz ix
sz ix
ix
j :: Int
j = Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
0 (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
toOffset)
k :: Sz1
k = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
delta)
sz' :: Sz1
sz' = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Int
j Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Sz1 -> Int
forall ix. Sz ix -> ix
unSz Sz1
k)
(Array r ix e
arrs, Vector r e
arrd) =
(forall s. ST s (Array r ix e, Vector r e))
-> (Array r ix e, Vector r e)
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s (Array r ix e, Vector r e))
-> (Array r ix e, Vector r e))
-> (forall s. ST s (Array r ix e, Vector r e))
-> (Array r ix e, Vector r e)
forall a b. (a -> b) -> a -> b
$ do
MArray s r ix e
marrs <- Array r ix e -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Array r ix e -> m (MArray (PrimState m) r ix e)
thawS Array r ix e
arr
MArray s r Int e
marrd <- Sz1 -> ST s (MArray (PrimState (ST s)) r Int e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz1
sz'
MArray (PrimState (ST s)) r ix e
-> Int
-> MArray (PrimState (ST s)) r Int e
-> Int
-> Sz1
-> ST s ()
forall r ix e ix' (m :: * -> *).
(Mutable r ix e, Mutable r ix' e, PrimMonad m) =>
MArray (PrimState m) r ix' e
-> Int -> MArray (PrimState m) r ix e -> Int -> Sz1 -> m ()
unsafeLinearCopy MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrs Int
i MArray s r Int e
MArray (PrimState (ST s)) r Int e
marrd Int
j Sz1
k
(,) (Array r ix e -> Vector r e -> (Array r ix e, Vector r e))
-> ST s (Array r ix e)
-> ST s (Vector r e -> (Array r ix e, Vector r e))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrs ST s (Vector r e -> (Array r ix e, Vector r e))
-> ST s (Vector r e) -> ST s (Array r ix e, Vector r e)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Comp -> MArray (PrimState (ST s)) r Int e -> ST s (Vector r e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r Int e
MArray (PrimState (ST s)) r Int e
marrd
prop_UnsafeArrayLinearCopy ::
forall r ix e. (Eq (Array r ix e), Show (Array r ix e), Mutable r ix e)
=> Array r ix e
-> Property
prop_UnsafeArrayLinearCopy :: Array r ix e -> Property
prop_UnsafeArrayLinearCopy Array r ix e
arr =
Array r ix e
arr Array r ix e -> Array r ix e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
===
(forall s. ST s (Array r ix e)) -> Array r ix e
forall a. (forall s. ST s a) -> a
runST
(do let sz :: Sz ix
sz = Array r ix e -> Sz ix
forall r ix e. Load r ix e => Array r ix e -> Sz ix
size Array r ix e
arr
MArray s r ix e
marr <- Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
Array r ix e
-> Int -> MArray (PrimState (ST s)) r ix e -> Int -> Sz1 -> ST s ()
forall r ix e ix' (m :: * -> *).
(Mutable r ix e, Mutable r ix' e, PrimMonad m) =>
Array r ix' e
-> Int -> MArray (PrimState m) r ix e -> Int -> Sz1 -> m ()
unsafeArrayLinearCopy Array r ix e
arr Int
0 MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr Int
0 (Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz))
Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr)
prop_UnsafeArrayLinearCopyPart ::
forall r ix e.
( Eq (Vector r e)
, Show (Vector r e)
, Mutable r ix e
, Mutable r Ix1 e
)
=> ArrIx r ix e
-> NonNegative Ix1
-> Ix1
-> Property
prop_UnsafeArrayLinearCopyPart :: ArrIx r ix e -> NonNegative Int -> Int -> Property
prop_UnsafeArrayLinearCopyPart (ArrIx Array r ix e
arr ix
ix) (NonNegative Int
delta) Int
toOffset =
Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
i Sz1
k (Array r ix e -> Vector r e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten Array r ix e
arr) Vector r e -> Vector r e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
j Sz1
k Vector r e
arr'
where
sz :: Sz ix
sz = Array r ix e -> Sz ix
forall r ix e. Load r ix e => Array r ix e -> Sz ix
size Array r ix e
arr
i :: Int
i = Sz ix -> ix -> Int
forall ix. Index ix => Sz ix -> ix -> Int
toLinearIndex Sz ix
sz ix
ix
j :: Int
j = Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
0 (Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
toOffset)
k :: Sz1
k = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
delta)
sz' :: Sz1
sz' = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Int
j Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Sz1 -> Int
forall ix. Sz ix -> ix
unSz Sz1
k)
arr' :: Vector r e
arr' =
(forall s. ST s (Vector r e)) -> Vector r e
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s (Vector r e)) -> Vector r e)
-> (forall s. ST s (Vector r e)) -> Vector r e
forall a b. (a -> b) -> a -> b
$ do
MArray s r Int e
marr <- Sz1 -> ST s (MArray (PrimState (ST s)) r Int e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz1
sz'
Array r ix e
-> Int
-> MArray (PrimState (ST s)) r Int e
-> Int
-> Sz1
-> ST s ()
forall r ix e ix' (m :: * -> *).
(Mutable r ix e, Mutable r ix' e, PrimMonad m) =>
Array r ix' e
-> Int -> MArray (PrimState m) r ix e -> Int -> Sz1 -> m ()
unsafeArrayLinearCopy Array r ix e
arr Int
i MArray s r Int e
MArray (PrimState (ST s)) r Int e
marr Int
j Sz1
k
Comp -> MArray (PrimState (ST s)) r Int e -> ST s (Vector r e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r Int e
MArray (PrimState (ST s)) r Int e
marr
prop_UnsafeLinearSet ::
forall r ix e.
( Eq (Vector r e)
, Show (Vector r e)
, Mutable r ix e
, Mutable r Ix1 e
)
=> Comp
-> SzIx ix
-> NonNegative Ix1
-> e
-> Property
prop_UnsafeLinearSet :: Comp -> SzIx ix -> NonNegative Int -> e -> Property
prop_UnsafeLinearSet Comp
comp (SzIx Sz ix
sz ix
ix) (NonNegative Int
delta) e
e =
Array DL Int e -> Array r Int e
forall r ix e r'.
(Mutable r ix e, Load r' ix e) =>
Array r' ix e -> Array r ix e
compute (Comp -> Sz1 -> e -> Array DL Int e
forall ix e. Index ix => Comp -> Sz ix -> e -> Array DL ix e
A.replicate Comp
Seq Sz1
k e
e) Array r Int e -> Array r Int e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
===
Int -> Sz1 -> Array r Int e -> Array r Int e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
i Sz1
k (Array r ix e -> Array r Int e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten (Array r ix e
arrd :: Array r ix e))
where
i :: Int
i = Sz ix -> ix -> Int
forall ix. Index ix => Sz ix -> ix -> Int
toLinearIndex Sz ix
sz ix
ix
k :: Sz1
k = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
delta)
arrd :: Array r ix e
arrd =
(forall s. ST s (Array r ix e)) -> Array r ix e
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s (Array r ix e)) -> Array r ix e)
-> (forall s. ST s (Array r ix e)) -> Array r ix e
forall a b. (a -> b) -> a -> b
$ do
MArray s r ix e
marrd <- Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
MArray (PrimState (ST s)) r ix e -> Int -> Sz1 -> e -> ST s ()
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> Int -> Sz1 -> e -> m ()
unsafeLinearSet MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrd Int
i Sz1
k e
e
Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
comp MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrd
prop_UnsafeLinearShrink ::
forall r ix e.
( Eq (Vector r e)
, Show (Vector r e)
, Mutable r ix e
, Source r Ix1 e
)
=> ArrIx r ix e
-> Property
prop_UnsafeLinearShrink :: ArrIx r ix e -> Property
prop_UnsafeLinearShrink (ArrIx Array r ix e
arr ix
ix) =
Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
0 Sz1
k (Array r ix e -> Vector r e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten Array r ix e
arr) Vector r e -> Vector r e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
0 Sz1
k (Array r ix e -> Vector r e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten Array r ix e
arr')
where
sz :: Sz ix
sz = Array r ix e -> Sz ix
forall r ix e. Load r ix e => Array r ix e -> Sz ix
size Array r ix e
arr
sz' :: Sz ix
sz' = ix -> Sz ix
forall ix. Index ix => ix -> Sz ix
Sz ((Int -> Int -> Int) -> ix -> ix -> ix
forall ix. Index ix => (Int -> Int -> Int) -> ix -> ix -> ix
liftIndex2 (-) (Sz ix -> ix
forall ix. Sz ix -> ix
unSz Sz ix
sz) ix
ix)
k :: Sz1
k = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz')
arr' :: Array r ix e
arr' =
(forall s. ST s (Array r ix e)) -> Array r ix e
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s (Array r ix e)) -> Array r ix e)
-> (forall s. ST s (Array r ix e)) -> Array r ix e
forall a b. (a -> b) -> a -> b
$ do
MArray s r ix e
marr <- Array r ix e -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Array r ix e -> m (MArray (PrimState m) r ix e)
thawS Array r ix e
arr
MArray s r ix e
marr' <- MArray (PrimState (ST s)) r ix e
-> Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e
-> Sz ix -> m (MArray (PrimState m) r ix e)
unsafeLinearShrink MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr Sz ix
sz'
Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr'
prop_UnsafeLinearGrow ::
forall r ix e.
( Eq (Array r ix e)
, Show (Array r ix e)
, Eq (Vector r e)
, Show (Vector r e)
, Mutable r ix e
, Source r Ix1 e
)
=> ArrIx r ix e
-> e
-> Property
prop_UnsafeLinearGrow :: ArrIx r ix e -> e -> Property
prop_UnsafeLinearGrow (ArrIx Array r ix e
arr ix
ix) e
e =
Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
0 Sz1
k (Array r ix e -> Vector r e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten Array r ix e
arr) Vector r e -> Vector r e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Int -> Sz1 -> Vector r e -> Vector r e
forall r e.
Source r Int e =>
Int -> Sz1 -> Vector r e -> Vector r e
slice' Int
0 Sz1
k (Array r ix e -> Vector r e
forall r ix e.
(Load r ix e, Resize r ix) =>
Array r ix e -> Array r Int e
flatten Array r ix e
arrGrown) Property -> Property -> Property
forall prop1 prop2.
(Testable prop1, Testable prop2) =>
prop1 -> prop2 -> Property
.&&.
Array r ix e
arrCopied Array r ix e -> Array r ix e -> Property
forall a. (Eq a, Show a) => a -> a -> Property
=== Array r ix e
arrGrown
where
sz :: Sz ix
sz = Array r ix e -> Sz ix
forall r ix e. Load r ix e => Array r ix e -> Sz ix
size Array r ix e
arr
sz' :: Sz ix
sz' = ix -> Sz ix
forall ix. Index ix => ix -> Sz ix
Sz ((Int -> Int -> Int) -> ix -> ix -> ix
forall ix. Index ix => (Int -> Int -> Int) -> ix -> ix -> ix
liftIndex2 Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) (Sz ix -> ix
forall ix. Sz ix -> ix
unSz Sz ix
sz) ix
ix)
k :: Sz1
k = Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz)
(Array r ix e
arrCopied, Array r ix e
arrGrown) =
(forall s. ST s (Array r ix e, Array r ix e))
-> (Array r ix e, Array r ix e)
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s (Array r ix e, Array r ix e))
-> (Array r ix e, Array r ix e))
-> (forall s. ST s (Array r ix e, Array r ix e))
-> (Array r ix e, Array r ix e)
forall a b. (a -> b) -> a -> b
$ do
MArray s r ix e
marrCopied <- Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz'
Array r ix e
-> Int -> MArray (PrimState (ST s)) r ix e -> Int -> Sz1 -> ST s ()
forall r ix e ix' (m :: * -> *).
(Mutable r ix e, Mutable r ix' e, PrimMonad m) =>
Array r ix' e
-> Int -> MArray (PrimState m) r ix e -> Int -> Sz1 -> m ()
unsafeArrayLinearCopy Array r ix e
arr Int
0 MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrCopied Int
0 Sz1
k
MArray s r ix e
marr <- Array r ix e -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Array r ix e -> m (MArray (PrimState m) r ix e)
thawS Array r ix e
arr
MArray s r ix e
marrGrown <- MArray (PrimState (ST s)) r ix e
-> Sz ix -> ST s (MArray (PrimState (ST s)) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e
-> Sz ix -> m (MArray (PrimState m) r ix e)
unsafeLinearGrow MArray s r ix e
MArray (PrimState (ST s)) r ix e
marr Sz ix
sz'
Bool -> ST s () -> ST s ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Sz ix
sz' Sz ix -> Sz ix -> Bool
forall a. Eq a => a -> a -> Bool
/= Sz ix
sz) (ST s () -> ST s ()) -> ST s () -> ST s ()
forall a b. (a -> b) -> a -> b
$ do
MArray (PrimState (ST s)) r ix e -> Int -> Sz1 -> e -> ST s ()
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> Int -> Sz1 -> e -> m ()
unsafeLinearSet MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrGrown (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz) (Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz' Int -> Int -> Int
forall a. Num a => a -> a -> a
- Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz)) e
e
MArray (PrimState (ST s)) r ix e -> Int -> Sz1 -> e -> ST s ()
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
MArray (PrimState m) r ix e -> Int -> Sz1 -> e -> m ()
unsafeLinearSet MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrCopied (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz) (Int -> Sz1
forall ix. Index ix => ix -> Sz ix
Sz (Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz' Int -> Int -> Int
forall a. Num a => a -> a -> a
- Sz ix -> Int
forall ix. Index ix => Sz ix -> Int
totalElem Sz ix
sz)) e
e
(,) (Array r ix e -> Array r ix e -> (Array r ix e, Array r ix e))
-> ST s (Array r ix e)
-> ST s (Array r ix e -> (Array r ix e, Array r ix e))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrCopied ST s (Array r ix e -> (Array r ix e, Array r ix e))
-> ST s (Array r ix e) -> ST s (Array r ix e, Array r ix e)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Comp -> MArray (PrimState (ST s)) r ix e -> ST s (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze (Array r ix e -> Comp
forall r ix e. Load r ix e => Array r ix e -> Comp
getComp Array r ix e
arr) MArray s r ix e
MArray (PrimState (ST s)) r ix e
marrGrown
unsafeMutableSpec ::
forall r ix e.
( Eq (Vector r e)
, Show (Vector r e)
, Eq (Array r ix e)
, Show (Array r ix e)
, Mutable r ix e
, Mutable r Ix1 e
, Show e
, Eq e
, Arbitrary e
, Arbitrary ix
, Typeable e
, Typeable ix
)
=> Spec
unsafeMutableSpec :: Spec
unsafeMutableSpec =
String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe (String
"Mutable (" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall r ix e.
(Typeable r, Typeable ix, Typeable e) =>
String -> String
showsArrayType @r @ix @e String
") (Unsafe)") (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$ do
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeNewMsize" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Arbitrary ix, Mutable r ix e) => Property
forall r ix e. (Arbitrary ix, Mutable r ix e) => Property
prop_UnsafeNewMsize @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeNewLinearWriteRead" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Eq e, Show e, Mutable r ix e, Arbitrary ix, Arbitrary e) =>
Property
forall r ix e.
(Eq e, Show e, Mutable r ix e, Arbitrary ix, Arbitrary e) =>
Property
prop_UnsafeNewLinearWriteRead @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeThawFreeze" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Array r ix e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((Array r ix e -> Property) -> Property)
-> (Array r ix e -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Array r ix e), Show (Array r ix e), Mutable r ix e) =>
Array r ix e -> Property
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Mutable r ix e) =>
Array r ix e -> Property
prop_UnsafeThawFreeze @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeInitializeNew" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Eq (Array r ix e), Show (Array r ix e), Show e, Arbitrary e,
Arbitrary ix, Mutable r ix e) =>
Property
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Show e, Arbitrary e,
Arbitrary ix, Mutable r ix e) =>
Property
prop_UnsafeInitializeNew @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeLinearSet" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Comp -> SzIx ix -> NonNegative Int -> e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((Comp -> SzIx ix -> NonNegative Int -> e -> Property) -> Property)
-> (Comp -> SzIx ix -> NonNegative Int -> e -> Property)
-> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Vector r e), Show (Vector r e), Mutable r ix e,
Mutable r Int e) =>
Comp -> SzIx ix -> NonNegative Int -> e -> Property
forall r ix e.
(Eq (Vector r e), Show (Vector r e), Mutable r ix e,
Mutable r Int e) =>
Comp -> SzIx ix -> NonNegative Int -> e -> Property
prop_UnsafeLinearSet @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeLinearCopy" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Array r ix e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((Array r ix e -> Property) -> Property)
-> (Array r ix e -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Array r ix e), Show (Array r ix e), Mutable r ix e) =>
Array r ix e -> Property
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Mutable r ix e) =>
Array r ix e -> Property
prop_UnsafeLinearCopy @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeLinearCopyPart" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (ArrIx r ix e -> NonNegative Int -> Int -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((ArrIx r ix e -> NonNegative Int -> Int -> Property) -> Property)
-> (ArrIx r ix e -> NonNegative Int -> Int -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Vector r e), Show (Vector r e), Eq (Array r ix e),
Show (Array r ix e), Mutable r ix e, Mutable r Int e) =>
ArrIx r ix e -> NonNegative Int -> Int -> Property
forall r ix e.
(Eq (Vector r e), Show (Vector r e), Eq (Array r ix e),
Show (Array r ix e), Mutable r ix e, Mutable r Int e) =>
ArrIx r ix e -> NonNegative Int -> Int -> Property
prop_UnsafeLinearCopyPart @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeArrayLinearCopy" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Array r ix e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((Array r ix e -> Property) -> Property)
-> (Array r ix e -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Array r ix e), Show (Array r ix e), Mutable r ix e) =>
Array r ix e -> Property
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Mutable r ix e) =>
Array r ix e -> Property
prop_UnsafeArrayLinearCopy @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeArrayLinearCopyPart" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (ArrIx r ix e -> NonNegative Int -> Int -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((ArrIx r ix e -> NonNegative Int -> Int -> Property) -> Property)
-> (ArrIx r ix e -> NonNegative Int -> Int -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Vector r e), Show (Vector r e), Mutable r ix e,
Mutable r Int e) =>
ArrIx r ix e -> NonNegative Int -> Int -> Property
forall r ix e.
(Eq (Vector r e), Show (Vector r e), Mutable r ix e,
Mutable r Int e) =>
ArrIx r ix e -> NonNegative Int -> Int -> Property
prop_UnsafeArrayLinearCopyPart @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeLinearShrink" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (ArrIx r ix e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((ArrIx r ix e -> Property) -> Property)
-> (ArrIx r ix e -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Vector r e), Show (Vector r e), Mutable r ix e,
Source r Int e) =>
ArrIx r ix e -> Property
forall r ix e.
(Eq (Vector r e), Show (Vector r e), Mutable r ix e,
Source r Int e) =>
ArrIx r ix e -> Property
prop_UnsafeLinearShrink @r @ix @e
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeLinearGrow" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (ArrIx r ix e -> e -> Property) -> Property
forall prop. Testable prop => prop -> Property
property ((ArrIx r ix e -> e -> Property) -> Property)
-> (ArrIx r ix e -> e -> Property) -> Property
forall a b. (a -> b) -> a -> b
$ (Eq (Array r ix e), Show (Array r ix e), Eq (Vector r e),
Show (Vector r e), Mutable r ix e, Source r Int e) =>
ArrIx r ix e -> e -> Property
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Eq (Vector r e),
Show (Vector r e), Mutable r ix e, Source r Int e) =>
ArrIx r ix e -> e -> Property
prop_UnsafeLinearGrow @r @ix @e
unsafeMutableUnboxedSpec ::
forall r ix e.
(Typeable e, Typeable ix, Eq (Array r ix e), Show (Array r ix e), Arbitrary ix, Mutable r ix e)
=> Spec
unsafeMutableUnboxedSpec :: Spec
unsafeMutableUnboxedSpec =
String -> Spec -> Spec
forall a. HasCallStack => String -> SpecWith a -> SpecWith a
describe (String
"Mutable Unboxed (" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall r ix e.
(Typeable r, Typeable ix, Typeable e) =>
String -> String
showsArrayType @r @ix @e String
") (Unsafe)") (Spec -> Spec) -> Spec -> Spec
forall a b. (a -> b) -> a -> b
$
String -> Property -> SpecWith (Arg Property)
forall a.
(HasCallStack, Example a) =>
String -> a -> SpecWith (Arg a)
it String
"UnsafeInitialize" (Property -> SpecWith (Arg Property))
-> Property -> SpecWith (Arg Property)
forall a b. (a -> b) -> a -> b
$ (Eq (Array r ix e), Show (Array r ix e), Arbitrary ix,
Mutable r ix e) =>
Property
forall r ix e.
(Eq (Array r ix e), Show (Array r ix e), Arbitrary ix,
Mutable r ix e) =>
Property
prop_UnsafeInitialize @r @ix @e