module Test.IO where
import Database.ClickHouseDriver.IO.BufferedWriter
import Database.ClickHouseDriver.IO.BufferedReader
import Test.QuickCheck
import Test.QuickCheck.Monadic
import qualified Data.ByteString as BS
import Control.Monad.Writer hiding (Writer)
import Control.Monad.State
import Data.ByteString (ByteString)
import Data.Int
import qualified Data.ByteString.Char8 as C8
prop_BinaryStr :: String->Property
prop_BinaryStr xs = monadicIO $ do
let wtr = writeBinaryStr :: ByteString->Writer ByteString
let packed = C8.pack xs
a <- run (execWriterT $ wtr packed)
let buf = Buffer {
bufSize = BS.length a,
socket = Nothing,
bytesData = a
}
(res,_) <- run (runStateT readBinaryStr buf)
assert (res == packed)
prop_Strs :: [String]->Property
prop_Strs xs = monadicIO $ do
let wtr = writeBinaryStr :: ByteString->Writer ByteString
let packed = fmap C8.pack xs
a <- run (execWriterT $ (mapM_ wtr packed))
let buf = Buffer {
bufSize = BS.length a,
socket = Nothing,
bytesData = a
}
(res, _) <- run (runStateT (mapM (\x->readBinaryStr) xs) buf)
assert (res == packed)
prop_int8 :: [Int8]->Property
prop_int8 xs = monadicIO $ do
let wtr = writeBinaryInt8 :: Int8->Writer ByteString
a <- run (execWriterT $ (mapM_ wtr xs))
let buf = Buffer {
bufSize = BS.length a,
socket = Nothing,
bytesData = a
}
(res, _) <- run (runStateT (mapM (\x->readBinaryInt8) xs) buf)
assert (res == xs)
prop_int32 :: [Int32]->Property
prop_int32 xs = monadicIO $ do
let wtr = writeBinaryInt32 :: Int32->Writer ByteString
a <- run (execWriterT $ (mapM_ wtr xs))
let buf = Buffer {
bufSize = BS.length a,
socket = Nothing,
bytesData = a
}
(res, _) <- run (runStateT (mapM (\x->readBinaryInt32) xs) buf)
assert (res == xs)
prop_fix_str :: [String]->Property
prop_fix_str xs = monadicIO $ do
let wtr = writeBinaryFixedLengthStr :: Word->ByteString->Writer ByteString
let packed = fmap C8.pack xs
a <- run $ execWriterT $ (mapM_ (\str->wtr (fromIntegral $ BS.length str) str ) packed)
let buf = Buffer {
bufSize = BS.length a,
socket = Nothing,
bytesData = a
}
(res,_) <- run $ runStateT (mapM (\str->readBinaryStrWithLength (BS.length str)) packed) buf
assert (res == packed)
runTests = do
print "test"
quickCheck prop_BinaryStr
quickCheck prop_int8
quickCheck prop_int32
quickCheck prop_Strs
quickCheck prop_fix_str