@@ -19,12 +19,11 @@ import Streamly.Prelude (SerialT)
19import Test.QuickCheck (Property)
19import Test.QuickCheck (Property)
20import Test.QuickCheck.Monadic (monadicIO, assert, run)
20import Test.QuickCheck.Monadic (monadicIO, assert, run)
22−import qualified Streamly.Internal.Data.Array.Storable.Foreign.Types as A
22+import qualified Streamly.Internal.Data.Array.Storable.Foreign.Types as Array
23−import qualified Streamly.Internal.Data.Unfold as UF
24import qualified Streamly.Internal.Network.Inet.TCP as TCP
23import qualified Streamly.Internal.Network.Inet.TCP as TCP
25−import qualified Streamly.Internal.Network.Socket as SK
24+import qualified Streamly.Internal.Network.Socket as Socket
26−import qualified Streamly.Internal.Unicode.Stream as U
25+import qualified Streamly.Internal.Unicode.Stream as Unicode
27−import qualified Streamly.Prelude as S
26+import qualified Streamly.Prelude as Stream
29import Test.Hspec
28import Test.Hspec
30import Test.Hspec.QuickCheck
29import Test.Hspec.QuickCheck
@@ -43,26 +42,26 @@ testDataSource = concat $ replicate 1000 testData
43------------------------------------------------------------------------------
42------------------------------------------------------------------------------
44handlerChunksWithBuffer :: Socket -> IO ()
43handlerChunksWithBuffer :: Socket -> IO ()
45handlerChunksWithBuffer sk =
44handlerChunksWithBuffer sk =
46− S.unfold SK.readChunksWithBufferOf (100, sk)
45+ Stream.unfold Socket.readChunksWithBufferOf (100, sk)
47− & S.fold (SK.writeChunks sk)
46+ & Stream.fold (Socket.writeChunks sk)
50handlerChunks :: Socket -> IO ()
49handlerChunks :: Socket -> IO ()
51handlerChunks sk =
50handlerChunks sk =
52− S.unfold SK.readChunks sk
51+ Stream.unfold Socket.readChunks sk
53− & S.fold (SK.writeChunks sk)
52+ & Stream.fold (Socket.writeChunks sk)
56handlerwithbuffer :: Socket -> IO ()
55handlerwithbuffer :: Socket -> IO ()
57handlerwithbuffer sk =
56handlerwithbuffer sk =
58− S.unfold SK.readWithBufferOf (100, sk)
57+ Stream.unfold Socket.readWithBufferOf (100, sk)
59− & S.fold (SK.writeWithBufferOf 100 sk)
58+ & Stream.fold (Socket.writeWithBufferOf 100 sk)
62handlerRW :: Socket -> IO ()
61handlerRW :: Socket -> IO ()
63handlerRW sk =
62handlerRW sk =
64− S.unfold SK.read sk
63+ Stream.unfold Socket.read sk
65− & S.fold (SK.write sk)
64+ & Stream.fold (Socket.write sk)
67------------------------------------------------------------------------------
66------------------------------------------------------------------------------
68-- Accept connecttions and handle connected sockets
67-- Accept connecttions and handle connected sockets
@@ -71,9 +70,9 @@ handlerRW sk =
71server :: PortNumber -> MVar () -> (Socket -> IO ()) -> IO ()
70server :: PortNumber -> MVar () -> (Socket -> IO ()) -> IO ()
72server port sem handler = do
71server port sem handler = do
73 putMVar sem ()
72 putMVar sem ()
74− (S.serially $ S.unfold TCP.acceptOnPort port)
73+ (Stream.serially $ Stream.unfold TCP.acceptOnPort port)
75− & (S.asyncly . S.mapM (SK.handleWithM handler))
74+ & (Stream.asyncly . Stream.mapM (Socket.handleWithM handler))
76− & S.drain
75+ & Stream.drain
78remoteAddr :: (Word8,Word8,Word8,Word8)
77remoteAddr :: (Word8,Word8,Word8,Word8)
79remoteAddr = (127, 0, 0, 1)
78remoteAddr = (127, 0, 0, 1)
@@ -82,41 +81,49 @@ sender :: PortNumber -> MVar () -> SerialT IO Char
82sender port sem = do
81sender port sem = do
83 _ <- liftIO $ takeMVar sem
82 _ <- liftIO $ takeMVar sem
84 liftIO $ threadDelay 1000000 -- wait for server
83 liftIO $ threadDelay 1000000 -- wait for server
85− S.replicate 1 testDataSource -- SerialT IO String
84+ Stream.replicate 1000 testData -- SerialT IO String
86− & U.unwords UF.fromList -- SerialT IO Char
85+ & Stream.concatMap Stream.fromList -- SerialT IO Char
87− & U.encodeLatin1 -- SerialT IO Word8
86+ & Unicode.encodeLatin1 -- SerialT IO Word8
88 & TCP.transformBytesWith remoteAddr port -- SerialT IO Word8
87 & TCP.transformBytesWith remoteAddr port -- SerialT IO Word8
89− & U.decodeLatin1 -- SerialT IO Char
88+ & Unicode.decodeLatin1 -- SerialT IO Char
91−execute :: PortNumber -> Int -> (Socket -> IO ()) -> IO [Char]
90+execute :: PortNumber -> Int -> (Socket -> IO ()) -> IO (SerialT IO Char)
92execute port size handler = do
91execute port size handler = do
93 sem <- newEmptyMVar
92 sem <- newEmptyMVar
94 tid <- forkIO $ server port sem handler
93 tid <- forkIO $ server port sem handler
95− lst <- sender port sem
94+ let lst = sender port sem
96− & S.take size
95+ & Stream.take size
98− killThread tid
96+ & Stream.finally (killThread tid)
99 return $ lst
97 return $ lst
101validateWithBufferOf :: Property
99validateWithBufferOf :: Property
102validateWithBufferOf = monadicIO $ do
100validateWithBufferOf = monadicIO $ do
103− ls2 <- run $ execute 8000 45000 handlerwithbuffer
102+ ls2 <- execute 8000 45000 handlerwithbuffer
104− assert (testDataSource == ls2)
103+ Stream.eqBy (==) (Stream.fromList testDataSource) ls2
106validateRW :: Property
106validateRW :: Property
107validateRW = monadicIO $ do
107validateRW = monadicIO $ do
108− ls2 <- run $ execute 8001 A.defaultChunkSize handlerRW
109+ ls2 <- execute 8001 Array.defaultChunkSize handlerRW
109− assert (take A.defaultChunkSize testDataSource == ls2)
110+ let dataChunk = take Array.defaultChunkSize testDataSource
111+ Stream.eqBy (==) (Stream.fromList dataChunk) ls2
111validateChunks :: Property
114validateChunks :: Property
112validateChunks = monadicIO $ do
115validateChunks = monadicIO $ do
113− ls2 <- run $ execute 8002 45000 handlerChunks
117+ ls2 <- execute 8002 45000 handlerChunks
114− assert (testDataSource == ls2)
118+ Stream.eqBy (==) (Stream.fromList testDataSource) ls2
116validateChunksWithBufferOf :: Property
121validateChunksWithBufferOf :: Property
117validateChunksWithBufferOf = monadicIO $ do
122validateChunksWithBufferOf = monadicIO $ do
118− ls2 <- run $ execute 8003 45000 handlerChunksWithBuffer
124+ ls2 <- execute 8003 45000 handlerChunksWithBuffer
119− assert (testDataSource == ls2)
125+ Stream.eqBy (==) (Stream.fromList testDataSource) ls2
121main :: IO ()
128main :: IO ()
122main = hspec $ do
129main = hspec $ do