fb-util-0.1.0.1: tests/IOBufTest.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
module IOBufTest where
import Data.ByteString.Lazy as Lazy
import Data.ByteString.Unsafe
import Foreign.C
import Foreign.Ptr
import Util.IOBuf
import TestRunner
import Test.HUnit
lazyBS :: Lazy.ByteString
lazyBS = fromChunks ["hello", " ", "world"]
roundTripTest :: Test
roundTripTest = TestLabel "round trip" $ TestCase $ do
bs <- unsafePackMallocCString =<< unsafeWithIOBuf lazyBS c_echo
assertEqual "echo'd" "hello world" bs
-- `show` adds quotes
testString :: String
testString = "\"All happy families are alike; " ++
"every unhappy family is unhappy in its own way.\""
fromCTest :: Test
fromCTest = TestLabel "from C" $ TestCase $ do
x <- toLazy c_create
assertEqual "marshalled" testString $ show x
main :: IO ()
main = testRunner $ TestList [ roundTripTest, fromCTest ]
--------------------------------------------------------------------------------
foreign import ccall "echo"
c_echo :: Ptr IOBuf -> IO CString
foreign import ccall unsafe "create_buffer" c_create :: Ptr IOBuf