@@ -30,6 +30,7 @@ import Data.Word(Word8)
31import qualified Streamly.Internal.Data.Array.Foreign as A
31import qualified Streamly.Internal.Data.Array.Foreign as A
32import qualified Streamly.Internal.Data.Array.Foreign.Type as A
32import qualified Streamly.Internal.Data.Array.Foreign.Type as A
33+import qualified Streamly.Internal.Data.Array.Foreign.Mut.Type as MA
33import qualified Streamly.Internal.Data.Stream.IsStream as IP
34import qualified Streamly.Internal.Data.Stream.IsStream as IP
34import qualified Streamly.Internal.Data.Array.Stream.Foreign as AS
35import qualified Streamly.Internal.Data.Array.Stream.Foreign as AS
35type Array = A.Array
36type Array = A.Array
@@ -187,6 +188,13 @@ testArraysOf =
188#ifdef TEST_ARRAY
189#ifdef TEST_ARRAY
191+unsafeWriteIndex :: [Int] -> Int -> Int -> IO Bool
192+unsafeWriteIndex xs i x = do
193+ let arr = MA.fromList xs
194+ arr1 <- MA.unsafeWriteIndex arr i x
195+ x1 <- MA.unsafeIndexIO arr1 i
190lastN :: Int -> [a] -> [a]
198lastN :: Int -> [a] -> [a]
191lastN n l = drop (length l - n) l
199lastN n l = drop (length l - n) l
@@ -262,6 +270,10 @@ main =
262 it "partial" $ unsafeSlice 2 4 [1..10]
270 it "partial" $ unsafeSlice 2 4 [1..10]
263 it "none" $ unsafeSlice 10 0 [1..10]
271 it "none" $ unsafeSlice 10 0 [1..10]
264 it "full" $ unsafeSlice 0 10 [1..10]
272 it "full" $ unsafeSlice 0 10 [1..10]
273+ describe "Mut.unsafeWriteIndex" $ do
274+ it "first" (unsafeWriteIndex [1..10] 0 0 `shouldReturn` True)
275+ it "middle" (unsafeWriteIndex [1..10] 5 0 `shouldReturn` True)
276+ it "last" (unsafeWriteIndex [1..10] 9 0 `shouldReturn` True)
265 describe "Fold" $ do
277 describe "Fold" $ do
266 prop "lastN : 0 <= n <= len" $ testLastN
278 prop "lastN : 0 <= n <= len" $ testLastN
267 describe "lastN boundary conditions" $ do
279 describe "lastN boundary conditions" $ do