Byte Template Quasiquoter and classes for builders
Co-authored-by: Eric Demko <edemko@layer3com.com> Co-authored-by: Andrew Martin <andrew.thaddeus@gmail.com>
This commit is contained in:
parent
2e279c62f2
commit
fba563dd6b
5 changed files with 317 additions and 7 deletions
41
test/Main.hs
41
test/Main.hs
|
@ -1,8 +1,9 @@
|
|||
{-# language BangPatterns #-}
|
||||
{-# language NumericUnderscores #-}
|
||||
{-# language OverloadedStrings #-}
|
||||
{-# language QuasiQuotes #-}
|
||||
{-# language ScopedTypeVariables #-}
|
||||
{-# language TypeApplications #-}
|
||||
{-# language OverloadedStrings #-}
|
||||
|
||||
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
||||
|
||||
|
@ -11,28 +12,32 @@ import Prelude hiding (replicate)
|
|||
import Control.Applicative (liftA2)
|
||||
import Control.Monad.ST (runST)
|
||||
import Data.Bytes.Builder
|
||||
import Data.Bytes.Builder.Template (templ)
|
||||
import Data.Bytes.Types (MutableBytes(MutableBytes))
|
||||
import Data.Primitive (PrimArray)
|
||||
import Data.Word
|
||||
import Data.Char (ord,chr)
|
||||
import Data.IORef (IORef,newIORef,readIORef,writeIORef)
|
||||
import Data.Maybe (fromMaybe)
|
||||
import Data.Primitive (ByteArray)
|
||||
import Data.Primitive (PrimArray)
|
||||
import Data.Text.Short (ShortText)
|
||||
import Data.WideWord (Word128(Word128),Word256(Word256))
|
||||
import Data.Word
|
||||
import Numeric.Natural (Natural)
|
||||
import Test.Tasty (defaultMain,testGroup,TestTree)
|
||||
import Test.QuickCheck ((===),Arbitrary)
|
||||
import Test.QuickCheck.Instances.Natural ()
|
||||
import Text.Printf (printf)
|
||||
import Test.Tasty (defaultMain,testGroup,TestTree)
|
||||
import Test.Tasty.HUnit ((@=?))
|
||||
import Text.Printf (printf)
|
||||
|
||||
import qualified Arithmetic.Nat as Nat
|
||||
import qualified Data.Bits as Bits
|
||||
import qualified Data.Bytes.Builder.Bounded as Bounded
|
||||
import qualified Data.Bytes as Bytes
|
||||
import qualified Data.Bytes.Builder as Builder
|
||||
import qualified Data.Bytes.Builder.Bounded as Bounded
|
||||
import qualified Data.Bytes.Chunks as Chunks
|
||||
import qualified Data.ByteString as ByteString
|
||||
import qualified Data.ByteString.Builder as BB
|
||||
import qualified Data.ByteString.Lazy.Char8 as LB
|
||||
import qualified Data.Bytes.Chunks as Chunks
|
||||
import qualified Data.List as L
|
||||
import qualified Data.Primitive as PM
|
||||
import qualified Data.Text as T
|
||||
|
@ -286,6 +291,28 @@ tests = testGroup "Tests"
|
|||
, 0x00 : 0x09 : map c2w "listening"
|
||||
] @=? map Exts.toList (Exts.toList res)
|
||||
]
|
||||
, testGroup "bytes templates"
|
||||
[ THU.testCase "A" $ do
|
||||
let name = Just ("foo" :: ShortText)
|
||||
msgBuilder = [templ|Hello `fromMaybe "World" name`!\n|]
|
||||
msg = Chunks.concat . Builder.run 200 $ msgBuilder
|
||||
in Bytes.fromAsciiString "Hello foo!\n" @=? msg
|
||||
, THU.testCase "B" $ do
|
||||
let one = "foo" :: ShortText
|
||||
two = "bar" :: String
|
||||
msgBuilder = [templ|`one``two`|]
|
||||
msg = Chunks.concat . Builder.run 200 $ msgBuilder
|
||||
in Bytes.fromAsciiString "foobar" @=? msg
|
||||
, THU.testCase "C" $ do
|
||||
let msgBuilder = [templ|a backtick for you: \`|]
|
||||
msg = Chunks.concat . Builder.run 200 $ msgBuilder
|
||||
in Bytes.fromAsciiString "a backtick for you: `" @=? msg
|
||||
, THU.testCase "D" $ do
|
||||
let i = 137 :: Int
|
||||
msgBuilder = [templ|there are `i` lights!|]
|
||||
msg = Chunks.concat . Builder.run 200 $ msgBuilder
|
||||
in Bytes.fromAsciiString "there are 137 lights!" @=? msg
|
||||
]
|
||||
]
|
||||
|
||||
bytesOntoRef ::
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue