packages feed

bytesmith-0.1.0.0: test/Main.hs

{-# language BangPatterns #-}
{-# language MultiWayIf #-}
{-# language ScopedTypeVariables #-}
{-# language TypeApplications #-}

import Control.Exception (throwIO)
import Data.Primitive (ByteArray)
import Data.Word (Word8)
import Data.Char (ord)
import Data.Bytes.Types (Bytes(Bytes))
import Data.Bytes.Parser (Parser,Result(..))

import qualified Data.Bytes.Parser as P
import qualified Data.Primitive as PM
import qualified GHC.Exts as Exts

main :: IO ()
main = do
  putStrLn "Start"
  putStrLn "A"
  testA
  putStrLn "Finished"

testA :: IO ()
testA =
  let r = P.parseByteArray
        ( pure (,)
        <*> P.decWord ()
        <*  P.ascii () '.'
        <*> P.decWord ()
        <*  P.ascii () '.'
        ) (pack "42.8.")
   in case r of
        Failure () -> fail "test A failed parsing"
        Success (42,8) 5 0 -> pure ()
        Success _ _ _ -> fail "test A wrong result"

bytes :: String -> Bytes
bytes s = let b = pack s in Bytes b 0 (PM.sizeofByteArray b)

pack :: String -> ByteArray
pack = Exts.fromList . map (fromIntegral @Int @Word8 . ord)