28 lines
741 B
Haskell
28 lines
741 B
Haskell
|
|
module Main (main) where
|
||
|
|
|
||
|
|
import Datalog
|
||
|
|
import Data.Text qualified as T
|
||
|
|
import Data.Text.IO qualified as T
|
||
|
|
import Text.Megaparsec qualified as M
|
||
|
|
|
||
|
|
parserGoldenTest :: String -> IO Bool
|
||
|
|
parserGoldenTest prefix = do
|
||
|
|
let inFile = "test/golden/" <> prefix <> ".dl"
|
||
|
|
outFile = "test/golden/" <> prefix <> ".show"
|
||
|
|
inp <- T.readFile inFile
|
||
|
|
out <- T.readFile outFile
|
||
|
|
result <- case M.parse parseProgram inFile inp of
|
||
|
|
Left e -> do
|
||
|
|
print e
|
||
|
|
return False
|
||
|
|
Right out' -> do
|
||
|
|
return (T.strip out == T.pack (show out'))
|
||
|
|
let resultS = if result then "passed" else "failed"
|
||
|
|
putStrLn $ unwords ["Parser test", prefix, resultS]
|
||
|
|
return result
|
||
|
|
|
||
|
|
main :: IO ()
|
||
|
|
main = do
|
||
|
|
True <- parserGoldenTest "ancestor"
|
||
|
|
return ()
|