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 ] ]