capnp-0.17.0.0: tests/Module/Capnp/Basics.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -Wno-error=deprecations #-}
module Module.Capnp.Basics (basicsTests) where
import Capnp
( List,
Mutability (..),
Raw (..),
encode,
evalLimitT,
length,
newMessage,
)
import Capnp.Basics
import Capnp.Mutability (freeze)
import Control.Monad.IO.Class (liftIO)
import qualified Data.ByteString as BS
import qualified Data.Text as T
import Data.Word
import GHC.Prim (coerce)
import Test.Hspec
import Test.QuickCheck
import Test.QuickCheck.IO (propertyIO)
import Test.QuickCheck.Instances ()
import Prelude hiding (length)
-- import Data.Mutable (freeze)
basicsTests :: Spec
basicsTests =
describe "textBuffer and textBytes agree" $
it "Should return the same number of bytes" $
property $ \(text :: T.Text) -> propertyIO $ evalLimitT maxBound $ do
msg <- newMessage Nothing
Raw untyped <- encode msg text
raw :: Raw Text 'Const <- Raw <$> freeze untyped
buf <- textBuffer raw
bytes <- textBytes raw
liftIO $ BS.length bytes `shouldBe` length (coerce buf :: Raw (List Word8) 'Const)