
module Main where

import Foreign.C.UTF8
import Foreign.C.String
import Control.Monad (when)

assertEqual msg expect actual =
  when (expect /= actual)
    ( do
      putStrLn msg
      putStrLn ("expect: " ++ show expect)
      putStrLn ("actual: " ++ show actual)
    )

main = do
  let sz = 1000000
  withCString (take sz (repeat 'a')) $ \cstr -> do
    s <- peekUTF8String cstr
    assertEqual "testLargeFromUTF8" sz (length s)
    s <- peekUTF8StringB cstr
    assertEqual "testLargeFromUTF8B" sz (length s)
    s <- peekUTF8StringLen (cstr, sz)
    assertEqual "testLargeFromUTF8Len" sz (length s)
    s <- peekUTF8StringLenB (cstr, sz)
    assertEqual "testLargeFromUTF8LenB" sz (length s)
