packages feed

postgresql-syntax-0.4.1.1: hedgehog-test/Main.hs

module Main where

import qualified Data.Text as Text
import Hedgehog
import Hedgehog.Main
import qualified Main.Gen as Gen
import qualified PostgresqlSyntax.Parsing as Parsing
import qualified PostgresqlSyntax.Rendering as Rendering
import Prelude

main :: IO ()
main =
  defaultMain
    [ checkParallel
        $ Group "Parsing a rendered AST produces the same AST"
        $ let p name amount gen parser renderer =
                (,) name
                  $ withDiscards (fromIntegral amount * 200)
                  $ withTests amount
                  $ property
                  $ do
                    ast <- forAll gen
                    let sql = Rendering.toText (renderer ast)
                     in do
                          footnote ("SQL: " <> Text.unpack sql)
                          case Parsing.run parser sql of
                            Left err -> do
                              footnote err
                              failure
                            Right ast' -> ast === ast'
           in [ p "typename" 10000 Gen.typename Parsing.typename Rendering.typename,
                p "tableRef" 10000 Gen.tableRef Parsing.tableRef Rendering.tableRef,
                p "aExpr" 60000 Gen.aExpr Parsing.aExpr Rendering.aExpr,
                p "preparableStmt" 30000 Gen.preparableStmt Parsing.preparableStmt Rendering.preparableStmt
              ]
    ]