1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
{-# LANGUAGE OverloadedStrings #-}
module System.IO.Streams.Tests.Vector (tests) where
------------------------------------------------------------------------------
import Control.Monad hiding (mapM)
import qualified Data.Vector as V
import Prelude hiding (mapM, read)
import Test.Framework
import Test.Framework.Providers.HUnit
import Test.HUnit hiding (Test)
------------------------------------------------------------------------------
import qualified System.IO.Streams as S
import System.IO.Streams.List
import System.IO.Streams.Vector
------------------------------------------------------------------------------
import System.IO.Streams.Tests.Common (expectExceptionH)
------------------------------------------------------------------------------
tests :: [Test]
tests = [ testChunk
, testWrite
, testVectorOutputStream
, testFromTo
, testOutputToMutableVector
, testToMutableVector
]
------------------------------------------------------------------------------
testChunk :: Test
testChunk = testCase "vector/chunkVector" $ do
let zeroLen :: IO ([V.Vector Int])
zeroLen = fromList [1..10::Int] >>= chunkVector 0 >>= toList
expectExceptionH zeroLen
fromList [1..10 :: Int] >>= chunkVector 3
>>= toList
>>= assertEqual "chunkVector"
(map V.fromList [ [1,2,3]
, [4,5,6]
, [7,8,9]
, [10]
])
fromList [1..12 :: Int] >>= chunkVector 3
>>= toList
>>= assertEqual "chunkVector2"
(map V.fromList [ [1,2,3]
, [4,5,6]
, [7,8,9]
, [10,11,12]
])
------------------------------------------------------------------------------
testWrite :: Test
testWrite = testCase "vector/writeVector" $
outputToVector act >>=
assertEqual "testWrite" (V.fromList [1..10::Int])
where
act str = do
writeVector (V.fromList [1..10]) str
S.write Nothing str
S.write Nothing str
------------------------------------------------------------------------------
testVectorOutputStream :: Test
testVectorOutputStream = testCase "vector/vectorOutputStream" $ test1 >> test2
where
test1 = do
(os, flush) <- vectorOutputStream
fromList [1,2,3::Int] >>= S.connectTo os
flush >>= assertEqual "v1" (V.fromList [1,2,3::Int])
S.write (Just 4) os
flush >>= assertEqual "v2" V.empty
test2 = do
(os, flush) <- mutableVectorOutputStream
fromList [1,2,3::Int] >>= S.supplyTo os
flush >>= V.unsafeFreeze
>>= assertEqual "v1" (V.fromList [1,2,3::Int])
S.write (Just 4) os
flush >>= V.unsafeFreeze
>>= assertEqual "v2" (V.singleton (4::Int))
------------------------------------------------------------------------------
testFromTo :: Test
testFromTo = testCase "vector/fromVector" $ do
fromVector V.empty >>= toVector
>>= assertEqual "f1" (V.empty :: V.Vector Int)
fromVector vtest >>= toVector >>= assertEqual "f2" vtest
where
vtest = V.fromList [1..100::Int]
------------------------------------------------------------------------------
testOutputToMutableVector :: Test
testOutputToMutableVector = testCase "vector/outputToMutableVector" $ do
is <- S.fromList [1::Int,2,3]
outputToMutableVector (S.connect is)
>>= V.unsafeFreeze
>>= assertEqual "outputToMutableVector" (V.fromList [1,2,3])
------------------------------------------------------------------------------
testToMutableVector :: Test
testToMutableVector = testCase "vector/toMutableVector" $ do
is <- S.fromList [1::Int,2,3]
toMutableVector is
>>= V.unsafeFreeze
>>= assertEqual "toMutableVector" (V.fromList [1,2,3])
|