Skip to content

Commit 4f53e4d

Browse files
committed
Add tests for Array.fromCString# and Array.fromW16CString#
1 parent 87962a8 commit 4f53e4d

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

test/Streamly/Test/Data/Array.hs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ import Control.Monad (void)
1212
import Data.Char (isLower)
1313
import Data.List (sort)
1414
import Data.Proxy (Proxy(..))
15-
import Data.Word(Word8)
15+
import Data.Word(Word8, Word16)
1616
import Foreign.Storable (peek)
1717
import Foreign.ForeignPtr (newForeignPtr_, withForeignPtr)
18-
import GHC.Ptr (plusPtr, Ptr)
18+
import GHC.Ptr (plusPtr, Ptr(..))
1919
import Streamly.Internal.Data.MutByteArray (Unbox, sizeOf)
2020
import Streamly.Internal.Data.MutArray (MutArray)
2121
import Test.QuickCheck (chooseInt, listOf)
@@ -248,6 +248,24 @@ testUnsafeFromForeignPtr = do
248248
performMajorGC
249249
A.unsafeFromForeignPtr fptr len `shouldReturn` arr
250250

251+
testFromCString# :: IO ()
252+
testFromCString# = do
253+
arr0 <- MA.unsafeGetSlice 10 50 <$> MA.fromList ([0 .. 99] :: [Word8])
254+
let arr = A.unsafeFreeze arr0
255+
A.unsafePinnedAsPtr (arr <> A.fromList [0]) $ \(Ptr addr#) _ -> do
256+
arr1 <- A.fromCString# addr#
257+
performGCSweep 4 100000
258+
arr1 `shouldBe` arr
259+
260+
testFromW16CString# :: IO ()
261+
testFromW16CString# = do
262+
arr0 <- MA.unsafeGetSlice 10 50 <$> MA.fromList ([0 .. 99] :: [Word16])
263+
let arr = A.unsafeFreeze arr0
264+
A.unsafePinnedAsPtr (arr <> A.fromList [0]) $ \(Ptr addr#) _ -> do
265+
arr1 <- A.fromW16CString# addr#
266+
performGCSweep 4 100000
267+
arr1 `shouldBe` arr
268+
251269
reallocMA :: Property
252270
reallocMA =
253271
let len = 10000
@@ -283,6 +301,8 @@ main =
283301
it "testUnsafeAsForeignPtr" testUnsafeAsForeignPtr
284302
it "testForeignPtrConversionId" testForeignPtrConversionId
285303
it "testUnsafeFromForeignPtr" testUnsafeFromForeignPtr
304+
it "testFromCString#" testFromCString#
305+
it "testFromW16CString#" testFromW16CString#
286306
describe "unsafeSlice" $ do
287307
it "partial" $ unsafeSlice 2 4 [1..10]
288308
it "none" $ unsafeSlice 10 0 [1..10]

0 commit comments

Comments
 (0)