62 lines
1.5 KiB
Haskell
62 lines
1.5 KiB
Haskell
module Main (main) where
|
|
|
|
import Test.Tasty (TestTree, testGroup)
|
|
import Test.Tasty.Silver
|
|
import Test.Tasty.Silver.Interactive (defaultMain)
|
|
import Data.Traversable
|
|
import Gyehoek.Driver qualified as Driver
|
|
import System.FilePath
|
|
import Data.List (List)
|
|
import Data.Functor ((<&>))
|
|
import System.Directory
|
|
import Data.Function
|
|
import System.Environment.Blank (getEnvDefault)
|
|
|
|
|
|
disabled :: List String
|
|
disabled =
|
|
[ "square"
|
|
, "lambda"
|
|
]
|
|
|
|
main :: IO ()
|
|
main = defaultMain =<< goldenTests
|
|
|
|
goldenTests :: IO TestTree
|
|
goldenTests = do
|
|
all_cases <- listDirectory "golden"
|
|
let tests = all_cases
|
|
& filter (`notElem` disabled)
|
|
& fmap ("golden"</>)
|
|
testGroup "golden" <$> sequenceA
|
|
[ pure $ watTests tests
|
|
, executionTests tests
|
|
]
|
|
|
|
watTests :: List FilePath -> TestTree
|
|
watTests files =
|
|
testGroup "wat" $ files <&> \test ->
|
|
let source = test </> "source.scm"
|
|
golden = test </> "out.wat"
|
|
testname = takeFileName test
|
|
in goldenVsAction
|
|
testname
|
|
golden
|
|
(Driver.lower_e2e source)
|
|
id
|
|
|
|
executionTests :: List FilePath -> IO TestTree
|
|
executionTests files = do
|
|
cmd <- getEnvDefault "GYEHOEK_RUNTIME"
|
|
"runtime/target/debug/gyehoek-runtime"
|
|
pure $ testGroup "execution" $ files <&> \test ->
|
|
let wat = test </> "out.wat"
|
|
testname = takeFileName test
|
|
resultfile = test </> "exec"
|
|
in goldenVsProg
|
|
testname
|
|
resultfile
|
|
cmd
|
|
[wat]
|
|
"" -- stdin
|