packages feed

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